Actions

icon Post
text/html Subscribe
text/html Unsubscribe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[patch] load_view and save_view for tests


  • To: VSIPL++ Developers List <vsipl++@xxxxxxxxxxxxxxxx>
  • Subject: [patch] load_view and save_view for tests
  • From: Jules Bergmann <jules@xxxxxxxxxxxxxxxx>
  • Date: Fri, 30 Sep 2005 17:44:54 -0400

Both solver-lu and solver-cholesky use load_view, so I broke it out into a separate header. These files are necessary to compile solver-lu. Patch applied.
Index: tests/load_view.hpp
===================================================================
RCS file: tests/load_view.hpp
diff -N tests/load_view.hpp
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- tests/load_view.hpp	30 Sep 2005 21:41:46 -0000
***************
*** 0 ****
--- 1,113 ----
+ /* Copyright (c) 2005 by CodeSourcery, LLC.  All rights reserved. */
+ 
+ /** @file    tests/load_view.hpp
+     @author  Jules Bergmann
+     @date    2005-09-30
+     @brief   VSIPL++ Library: Utility to load a view from disk.
+ */
+ 
+ #ifndef VSIP_TEST_LOAD_VIEW_HPP
+ #define VSIP_TEST_LOAD_VIEW_HPP
+ 
+ /***********************************************************************
+   Included Files
+ ***********************************************************************/
+ 
+ #include <vsip/vector.hpp>
+ #include <vsip/matrix.hpp>
+ #include <vsip/tensor.hpp>
+ 
+ 
+ 
+ /***********************************************************************
+   Definitions
+ ***********************************************************************/
+ 
+ // This is nearly same as sarsim LoadView, but doesn't include byte
+ // ordering.  Move this into common location.
+ 
+ template <typename T>
+ struct Load_view_traits
+ {
+   typedef T base_t;
+   static unsigned const factor = 1;
+ };
+ 
+ template <typename T>
+ struct Load_view_traits<vsip::complex<T> >
+ {
+   typedef T base_t;
+   static unsigned const factor = 2;
+ };
+ 
+ 
+ template <vsip::dimension_type Dim,
+ 	  typename             T>
+ class Load_view
+ {
+ public:
+   typedef typename Load_view_traits<T>::base_t base_t;
+   static unsigned const factor = Load_view_traits<T>::factor;
+ 
+   typedef vsip::Dense<Dim, T> block_t;
+   typedef typename vsip::impl::View_of_dim<Dim, T, block_t>::type view_t;
+ 
+ public:
+   Load_view(char*                    filename,
+ 	    vsip::Domain<Dim> const& dom)
+     : data_  (new base_t[factor*dom.size()]),
+       block_ (dom, data_),
+       view_  (block_)
+   {
+     FILE*  fd;
+     size_t size = dom.size();
+     
+     if (!(fd = fopen(filename,"r")))
+     {
+       fprintf(stderr,"Load_view: error opening '%s'.\n", filename);
+       exit(1);
+     }
+ 
+     if (size != fread(data_, sizeof(T), size, fd))
+     {
+       fprintf(stderr, "Load_view: error reading file %s.\n", filename);
+       exit(1);
+     }
+   
+     fclose(fd);
+     
+     block_.admit(true);
+   }
+ 
+ 
+ 
+   Load_view(FILE*              fd,
+ 	    vsip::Domain<Dim> const& dom)
+     : data_  (new base_t[factor*dom.size()]),
+       block_ (dom, data_),
+       view_  (block_)
+   {
+     size_t size = dom.size();
+ 
+     if (size != fread(data_, sizeof(T), size, fd))
+     {
+       fprintf(stderr, "Load_view: error reading file.\n");
+       exit(1);
+     }
+     
+     block_.admit(true);
+   }
+ 
+   ~Load_view()
+   { delete[] data_; }
+ 
+   view_t view() { return view_; }
+ 
+ private:
+   base_t*       data_;
+ 
+   block_t       block_;
+   view_t        view_;
+ };
+ 
+ #endif // VSIP_TEST_LOAD_VIEW_HPP
Index: tests/save_view.hpp
===================================================================
RCS file: tests/save_view.hpp
diff -N tests/save_view.hpp
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- tests/save_view.hpp	30 Sep 2005 21:41:46 -0000
***************
*** 0 ****
--- 1,136 ----
+ /* Copyright (c) 2005 by CodeSourcery, LLC.  All rights reserved. */
+ 
+ /** @file    tests/save_view.cpp
+     @author  Jules Bergmann
+     @date    2005-09-30
+     @brief   VSIPL++ Library: Utility to save a view to disk.
+ */
+ 
+ #ifndef VSIP_TEST_SAVE_VIEW_HPP
+ #define VSIP_TEST_SAVE_VIEW_HPP
+ 
+ /***********************************************************************
+   Included Files
+ ***********************************************************************/
+ 
+ #include <vsip/vector.hpp>
+ #include <vsip/matrix.hpp>
+ #include <vsip/tensor.hpp>
+ 
+ 
+ 
+ /***********************************************************************
+   Definitions
+ ***********************************************************************/
+ 
+ template <typename T>
+ struct Save_view_traits
+ {
+    typedef T base_t;
+    static unsigned const factor = 1;
+ };
+ 
+ template <typename T>
+ struct Save_view_traits<vsip::complex<T> >
+ {
+    typedef T base_t;
+    static unsigned const factor = 2;
+ };
+ 
+ 
+ 
+ template <vsip::dimension_type Dim,
+ 	  typename             T>
+ class Save_view
+ {
+ public:
+   typedef typename Save_view_traits<T>::base_t base_t;
+   static unsigned const factor = Save_view_traits<T>::factor;
+ 
+   typedef vsip::Dense<Dim, T> block_t;
+   typedef typename vsip::impl::View_of_dim<Dim, T, block_t>::type view_t;
+ 
+ public:
+   static void save(char*  filename,
+ 		   view_t view)
+   {
+     vsip::Domain<Dim> dom(get_domain(view));
+     base_t*           data(new base_t[factor*dom.size()]);
+ 
+     block_t           block(dom, data);
+     view_t            store(block);
+ 
+     FILE*  fd;
+     size_t size = dom.size();
+ 
+     if (!(fd = fopen(filename,"w")))
+     {
+       fprintf(stderr,"Save_view: error opening '%s'.\n", filename);
+       exit(1);
+     }
+ 
+     block.admit(false);
+     store = view;
+     block.release(true);
+     
+     if (size != fwrite(data, sizeof(T), size, fd))
+     {
+       fprintf(stderr, "Save_view: Error writing.\n");
+       exit(1);
+     }
+ 
+     fclose(fd);
+   }
+ 
+ private:
+   template <typename T1,
+ 	    typename Block1>
+   static vsip::Domain<1> get_domain(vsip::const_Vector<T1, Block1> view)
+   { return vsip::Domain<1>(view.size()); }
+ 
+   template <typename T1,
+ 	    typename Block1>
+   static vsip::Domain<2> get_domain(vsip::const_Matrix<T1, Block1> view)
+   { return vsip::Domain<2>(view.size(0), view.size(1)); }
+ 
+   template <typename T1,
+ 	    typename Block1>
+   static vsip::Domain<3> get_domain(vsip::const_Tensor<T1, Block1> view)
+   { return vsip::Domain<3>(view.size(0), view.size(1), view.size(2)); }
+ };
+ 
+ 
+ template <typename T,
+ 	  typename Block>
+ void
+ save_view(
+    char*                        filename,
+    vsip::const_Vector<T, Block> view)
+ {
+    Save_view<1, T>::save(filename, view);
+ }
+ 
+ 
+ 
+ template <typename T,
+ 	  typename Block>
+ void
+ save_view(
+    char*                        filename,
+    vsip::const_Matrix<T, Block> view)
+ {
+    Save_view<2, T>::save(filename, view);
+ }
+ 
+ 
+ 
+ template <typename T,
+ 	  typename Block>
+ void
+ save_view(
+    char*                        filename,
+    vsip::const_Tensor<T, Block> view)
+ {
+    Save_view<3, T>::save(filename, view);
+ }
+ #endif // VSIP_TEST_SAVE_VIEW_HPP