diskio_proto.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2010 NICTA and the authors listed below
00002 // http://nicta.com.au
00003 // 
00004 // Authors:
00005 // - Conrad Sanderson (conradsand at ieee dot org)
00006 // - Ian Cullinan (ian dot cullinan at nicta dot com dot au)
00007 // 
00008 // This file is part of the Armadillo C++ library.
00009 // It is provided without any warranty of fitness
00010 // for any purpose. You can redistribute this file
00011 // and/or modify it under the terms of the GNU
00012 // Lesser General Public License (LGPL) as published
00013 // by the Free Software Foundation, either version 3
00014 // of the License or (at your option) any later version.
00015 // (see http://www.opensource.org/licenses for more info)
00016 
00017 
00018 //! \addtogroup diskio
00019 //! @{
00020 
00021 
00022 //! class for saving and loading matrices and fields
00023 class diskio
00024   {
00025   public:
00026   
00027   template<typename eT>
00028   struct is_supported_type
00029     {
00030     static const bool value = 
00031       (
00032       false
00033       || is_u8<eT>::value
00034       || is_s8<eT>::value
00035       || is_u16<eT>::value
00036       || is_s16<eT>::value
00037       || is_u32<eT>::value
00038       || is_s32<eT>::value
00039       || is_float<eT>::value
00040       || is_double<eT>::value
00041       || is_complex_float<eT>::value
00042       || is_complex_double<eT>::value
00043       );
00044     };
00045   
00046   
00047   template<typename eT> inline static std::string gen_txt_header(const Mat<eT>& x);
00048   template<typename eT> inline static std::string gen_bin_header(const Mat<eT>& x);
00049 
00050   template<typename eT> inline static std::string gen_txt_header(const Cube<eT>& x);
00051   template<typename eT> inline static std::string gen_bin_header(const Cube<eT>& x);
00052 
00053   
00054   inline static char conv_to_hex_char(const u8 x);
00055   inline static void conv_to_hex(char* out, const u8 x);
00056 
00057   inline static std::string gen_tmp_name(const std::string& x);
00058   
00059   inline static void safe_rename(const std::string& old_name, const std::string& new_name);
00060   
00061   
00062   //
00063   // matrix saving
00064   
00065   template<typename eT> inline static void save_raw_ascii  (const Mat<eT>& x, const std::string& final_name);
00066   template<typename eT> inline static void save_raw_ascii  (const Mat<eT>& x, const std::string& name, std::ostream& f);
00067   template<typename eT> inline static void save_arma_ascii (const Mat<eT>& x, const std::string& final_name);
00068   template<typename eT> inline static void save_arma_ascii (const Mat<eT>& x, const std::string& name, std::ostream& f);
00069   template<typename eT> inline static void save_arma_binary(const Mat<eT>& x, const std::string& final_name);
00070   template<typename eT> inline static void save_arma_binary(const Mat<eT>& x, const std::string& name, std::ostream& f);
00071   template<typename eT> inline static void save_pgm_binary (const Mat<eT>& x, const std::string& final_nname);
00072   template<typename eT> inline static void save_pgm_binary (const Mat<eT>& x, const std::string& name, std::ostream& f);
00073   template<typename  T> inline static void save_pgm_binary (const Mat< std::complex<T> >& x, const std::string& final_name);
00074   template<typename  T> inline static void save_pgm_binary (const Mat< std::complex<T> >& x, const std::string& name, std::ostream& f);
00075   
00076   
00077   //
00078   // matrix loading
00079   
00080   template<typename eT> inline static void load_raw_ascii  (Mat<eT>& x, const std::string& name);
00081   template<typename eT> inline static void load_raw_ascii  (Mat<eT>& x, const std::string& name, std::istream& f);
00082   template<typename eT> inline static void load_arma_ascii (Mat<eT>& x, const std::string& name);
00083   template<typename eT> inline static void load_arma_ascii (Mat<eT>& x, const std::string& name, std::istream& f);
00084   template<typename eT> inline static void load_arma_binary(Mat<eT>& x, const std::string& name);
00085   template<typename eT> inline static void load_arma_binary(Mat<eT>& x, const std::string& name, std::istream& f);
00086   template<typename eT> inline static void load_pgm_binary (Mat<eT>& x, const std::string& name);
00087   template<typename eT> inline static void load_pgm_binary (Mat<eT>& x, const std::string& name, std::istream& is);
00088   template<typename  T> inline static void load_pgm_binary (Mat< std::complex<T> >& x, const std::string& name);
00089   template<typename  T> inline static void load_pgm_binary (Mat< std::complex<T> >& x, const std::string& name, std::istream& is);
00090   template<typename eT> inline static void load_auto_detect(Mat<eT>& x, const std::string& name);
00091   template<typename eT> inline static void load_auto_detect(Mat<eT>& x, const std::string& name, std::istream& f);
00092   
00093   inline static void pnm_skip_comments(std::istream& f);
00094   
00095   
00096   //
00097   // cube saving
00098   
00099   template<typename eT> inline static void save_raw_ascii  (const Cube<eT>& x, const std::string& name);
00100   template<typename eT> inline static void save_raw_ascii  (const Cube<eT>& x, const std::string& name, std::ostream& f);
00101   template<typename eT> inline static void save_arma_ascii (const Cube<eT>& x, const std::string& name);
00102   template<typename eT> inline static void save_arma_ascii (const Cube<eT>& x, const std::string& name, std::ostream& f);
00103   template<typename eT> inline static void save_arma_binary(const Cube<eT>& x, const std::string& name);
00104   template<typename eT> inline static void save_arma_binary(const Cube<eT>& x, const std::string& name, std::ostream& f);
00105   
00106   
00107   //
00108   // cube loading
00109   
00110   template<typename eT> inline static void load_raw_ascii  (Cube<eT>& x, const std::string& name);
00111   template<typename eT> inline static void load_raw_ascii  (Cube<eT>& x, const std::string& name, std::istream& f);
00112   template<typename eT> inline static void load_arma_ascii (Cube<eT>& x, const std::string& name);
00113   template<typename eT> inline static void load_arma_ascii (Cube<eT>& x, const std::string& name, std::istream& f);
00114   template<typename eT> inline static void load_arma_binary(Cube<eT>& x, const std::string& name);
00115   template<typename eT> inline static void load_arma_binary(Cube<eT>& x, const std::string& name, std::istream& f);
00116   template<typename eT> inline static void load_auto_detect(Cube<eT>& x, const std::string& name);
00117   template<typename eT> inline static void load_auto_detect(Cube<eT>& x, const std::string& name, std::istream& f);
00118 
00119 
00120   //
00121   // field saving and loading
00122   
00123   template<typename T1> inline static void save_arma_binary(const field<T1>& x, const std::string& name);
00124   template<typename T1> inline static void save_arma_binary(const field<T1>& x, const std::string& name, std::ostream& f);
00125   template<typename T1> inline static void load_arma_binary(      field<T1>& x, const std::string& name);
00126   template<typename T1> inline static void load_arma_binary(      field<T1>& x, const std::string& name, std::istream& f);
00127   
00128   inline static void save_std_string(const field<std::string>& x, const std::string& name);
00129   inline static void save_std_string(const field<std::string>& x, const std::string& name, std::ostream& f);
00130   inline static void load_std_string(      field<std::string>& x, const std::string& name);
00131   inline static void load_std_string(      field<std::string>& x, const std::string& name, std::istream& f);
00132   
00133   template<typename T1> inline static void load_auto_detect(field<T1>& x, const std::string& name);
00134   template<typename T1> inline static void load_auto_detect(field<T1>& x, const std::string& name, std::istream& f);
00135 
00136 
00137   //
00138   // PPM images
00139 
00140   template<typename T1> inline static void save_ppm_binary(const Cube<T1>& x, const std::string& final_name);
00141   template<typename T1> inline static void save_ppm_binary(const Cube<T1>& x, const std::string& name, std::ostream& f);
00142   template<typename T1> inline static void load_ppm_binary(      Cube<T1>& x, const std::string& final_name);
00143   template<typename T1> inline static void load_ppm_binary(      Cube<T1>& x, const std::string& name, std::istream& f);
00144 
00145   template<typename T1> inline static void save_ppm_binary(const field<T1>& x, const std::string& final_name);
00146   template<typename T1> inline static void save_ppm_binary(const field<T1>& x, const std::string& final_name, std::ostream& f);
00147   template<typename T1> inline static void load_ppm_binary(      field<T1>& x, const std::string& final_name);
00148   template<typename T1> inline static void load_ppm_binary(      field<T1>& x, const std::string& final_name, std::istream& f);
00149   
00150 
00151 
00152   };
00153 
00154 
00155 //! @}