37 #include <itpp/itexports.h> 
  122   static char file_magic[4];
 
  138   explicit it_ifile(
const std::string& filename);
 
  142   void open(
const std::string& filename);
 
  144   virtual void close();
 
  149   bool read_check_file_header();
 
  154   void low_level_read(
char& x);
 
  156   void low_level_read(uint64_t& x);
 
  158   void low_level_read(
bool &x);
 
  161   void low_level_read(
bin& x);
 
  163   void low_level_read(
short& x);
 
  165   void low_level_read(
int& x);
 
  167   void low_level_read(
float& x);
 
  169   void low_level_read(
double& x);
 
  171   void low_level_read(std::complex<float>& x);
 
  173   void low_level_read(std::complex<double>& x);
 
  176   void low_level_read(bvec& v);
 
  178   void low_level_read(svec& v);
 
  180   void low_level_read(ivec& v);
 
  182   void low_level_read_lo(vec& v);
 
  184   void low_level_read_hi(vec& v);
 
  186   void low_level_read_lo(cvec& v);
 
  188   void low_level_read_hi(cvec& v);
 
  191   void low_level_read(std::string& str);
 
  194   void low_level_read(
bmat& m);
 
  196   void low_level_read(smat& m);
 
  198   void low_level_read(imat& m);
 
  200   void low_level_read_lo(mat& m);
 
  202   void low_level_read_hi(mat& m);
 
  204   void low_level_read_lo(cmat& m);
 
  206   void low_level_read_hi(cmat& m);
 
  221   void low_level_read(
Array<std::complex<float> >& v);
 
  223   void low_level_read_lo(
Array<std::complex<double> >& v);
 
  225   void low_level_read_hi(
Array<std::complex<double> >& v);
 
  228   bool seek(
const std::string& name);
 
  232   void info(std::string& name, std::string& type, std::string& desc,
 
  260   explicit it_file(
const std::string& filename, 
bool trunc = 
false);
 
  271   void open(
const std::string& filename, 
bool trunc = 
false);
 
  287   void set_next_name(
const std::string& name,
 
  288                      const std::string& description = 
"")
 
  289   { next_name() = name; next_desc() = description; }
 
  292   void write_file_header();
 
  294   void write_data_header(
const std::string& type, uint64_t 
size);
 
  296   void write_data_header(
const std::string& type, 
const std::string& name,
 
  297                          uint64_t 
size, 
const std::string& description = 
"");
 
  300   void low_level_write(
char x);
 
  302   void low_level_write(uint64_t x);
 
  304   void low_level_write(
bool x);
 
  307   void low_level_write(
bin x);
 
  309   void low_level_write(
short x);
 
  311   void low_level_write(
int x);
 
  313   void low_level_write(
float x);
 
  315   void low_level_write(
double x);
 
  317   void low_level_write(
const std::complex<float>& x);
 
  319   void low_level_write(
const std::complex<double>& x);
 
  322   void low_level_write(
const bvec& v);
 
  324   void low_level_write(
const svec& v);
 
  326   void low_level_write(
const ivec& v);
 
  328   void low_level_write(
const vec& v);
 
  330   void low_level_write(
const cvec& v);
 
  333   void low_level_write(
const std::string& str);
 
  336   void low_level_write(
const bmat& m);
 
  338   void low_level_write(
const smat& m);
 
  340   void low_level_write(
const imat& m);
 
  342   void low_level_write(
const mat& m);
 
  344   void low_level_write(
const cmat& m);
 
  357   void low_level_write(
const Array<std::complex<float> >& v);
 
  359   void low_level_write(
const Array<std::complex<double> >& v);
 
  365   void remove(
const std::string& name);
 
  367   bool exists(
const std::string& name);
 
  375   void write_data_header_here(
const data_header& h);
 
  385   struct Strings_Holder
 
  387     std::string _next_name;
 
  388     std::string _next_desc;
 
  390     Strings_Holder():_next_name(
""),_next_desc(
""),_fname(
""){}
 
  392   Strings_Holder* _strings;
 
  394   std::string& fname() {
return _strings->_fname;}
 
  432   Name(
const std::string& n, 
const std::string& d = 
""): name(n), desc(d) {}
 
  460 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, 
char& v);
 
  462 ITPP_EXPORT it_ifile& 
operator>>(it_ifile &f, 
bool &v);
 
  465 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, bin& v);
 
  467 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, 
short& v);
 
  469 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, 
int& v);
 
  471 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, 
float& v);
 
  473 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, 
double& v);
 
  475 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, std::complex<float>& v);
 
  477 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, std::complex<double>& v);
 
  480 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, bvec& v);
 
  482 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, svec& v);
 
  484 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, ivec& v);
 
  486 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, vec& v);
 
  488 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, cvec& v);
 
  491 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, std::string& str);
 
  496 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, smat& m);
 
  498 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, imat& m);
 
  500 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, mat& m);
 
  502 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, cmat& m);
 
  505 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<bin>& v);
 
  507 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<short>& v);
 
  509 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<int>& v);
 
  511 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<float>& v);
 
  513 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<double>& v);
 
  515 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<std::complex<float> >& v);
 
  517 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<std::complex<double> >& v);
 
  520 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<bvec>& v);
 
  522 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<svec>& v);
 
  524 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<ivec>& v);
 
  526 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<vec>& v);
 
  528 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<cvec>& v);
 
  531 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<std::string>& v);
 
  534 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<bmat>& v);
 
  536 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<smat>& v);
 
  538 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<imat>& v);
 
  540 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<mat>& v);
 
  542 ITPP_EXPORT it_ifile& 
operator>>(it_ifile& f, Array<cmat>& v);
 
  546 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
char x);
 
  548 ITPP_EXPORT it_file& 
operator<<(it_file &f, 
bool x);
 
  551 ITPP_EXPORT it_file& 
operator<<(it_file& f, bin x);
 
  553 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
short x);
 
  555 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
int x);
 
  557 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
float x);
 
  559 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
double x);
 
  561 ITPP_EXPORT it_file& operator<<(it_file& f, std::complex<float> x);
 
  563 ITPP_EXPORT it_file& operator<<(it_file& f, std::complex<double> x);
 
  566 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const bvec& v);
 
  568 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const svec& v);
 
  570 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const ivec& v);
 
  572 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const vec& v);
 
  574 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const cvec& v);
 
  577 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const std::string& str);
 
  582 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const smat& m);
 
  584 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const imat& m);
 
  586 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const mat& m);
 
  588 ITPP_EXPORT it_file& 
operator<<(it_file& f, 
const cmat& m);
 
  591 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<bin>& v);
 
  593 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<short>& v);
 
  595 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<int>& v);
 
  597 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<float>& v);
 
  599 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<double>& v);
 
  601 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<std::complex<float> >& v);
 
  603 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<std::complex<double> >& v);
 
  606 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<bvec>& v);
 
  608 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<svec>& v);
 
  610 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<ivec>& v);
 
  612 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<vec>& v);
 
  614 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<cvec>& v);
 
  617 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<std::string>& v);
 
  620 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<bmat>& v);
 
  622 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<smat>& v);
 
  624 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<imat>& v);
 
  626 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<mat>& v);
 
  628 ITPP_EXPORT it_file& operator<<(it_file& f, const Array<cmat>& v);
 
  631 template <
class T> 
inline 
  635   f << 
Name(name) << v;
 
  640 template <
class T> 
inline 
  650 #define it_save_var(v) it_save_var_as(v,#v) 
  652 #define it_load_var(v) it_load_var_as(v,#v) 
  696   static char file_magic[4];
 
  717   void open(
const std::string& name);
 
  719   virtual void close();
 
  724   bool read_check_file_header();
 
  726   void read_data_header(data_header& h);
 
  728   void low_level_read(
char& x);
 
  730   void low_level_read(
bin& x);
 
  732   void low_level_read(
short& x);
 
  734   void low_level_read(
int& x);
 
  736   void low_level_read(
float& x);
 
  738   void low_level_read(
double& x);
 
  740   void low_level_read(std::complex<float>& x);
 
  742   void low_level_read(std::complex<double>& x);
 
  744   void low_level_read_lo(vec& v);
 
  746   void low_level_read_hi(vec& v);
 
  748   void low_level_read(ivec& v);
 
  750   void low_level_read(bvec& v);
 
  752   void low_level_read_lo(cvec& v);
 
  754   void low_level_read_hi(cvec& v);
 
  756   void low_level_read(std::string& str);
 
  758   void low_level_read_lo(mat& m);
 
  760   void low_level_read_hi(mat& m);
 
  762   void low_level_read(imat& m);
 
  764   void low_level_read(
bmat& m);
 
  766   void low_level_read_lo(cmat& m);
 
  768   void low_level_read_hi(cmat& m);
 
  781   void low_level_read_lo(
Array<std::complex<float> >& v);
 
  783   void low_level_read_lo(
Array<std::complex<double> >& v);
 
  785   void low_level_read_hi(
Array<std::complex<double> >& v);
 
  788   bool seek(
const std::string& name);
 
  793   void info(std::string& name, std::string& type, 
int& bytes);
 
  821   explicit it_file_old(
const std::string& name, 
bool trunc = 
false);
 
  832   void open(
const std::string& name, 
bool trunc = 
false);
 
  853   void write_file_header();
 
  855   void write_data_header(
const std::string& type, uint32_t 
size);
 
  857   void write_data_header(
const std::string& type, 
const std::string& name,
 
  860   void low_level_write(
char x);
 
  862   void low_level_write(
bin x);
 
  864   void low_level_write(
short x);
 
  866   void low_level_write(
int x);
 
  868   void low_level_write(
float x);
 
  870   void low_level_write(
double x);
 
  872   void low_level_write(
const std::complex<float>& x);
 
  874   void low_level_write(
const std::complex<double>& x);
 
  876   void low_level_write(
const vec& v);
 
  878   void low_level_write(
const ivec& v);
 
  880   void low_level_write(
const bvec& v);
 
  882   void low_level_write(
const cvec& v);
 
  884   void low_level_write(
const std::string& str);
 
  886   void low_level_write(
const mat& m);
 
  888   void low_level_write(
const imat& m);
 
  890   void low_level_write(
const bmat& m);
 
  892   void low_level_write(
const cmat& m);
 
  902   void low_level_write(
const Array<std::complex<float> >& v);
 
  904   void low_level_write(
const Array<std::complex<double> >& v);
 
  910   void remove(
const std::string& name);
 
  912   bool exists(
const std::string& name);
 
  920   void write_data_header_here(
const data_header& h);
 
  929     std::string _next_name;
 
  930   String_Holder():_next_name(
""){}
 
  932   String_Holder* _string;
 
  972 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, 
char& v);
 
  975 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, bin& v);
 
  978 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, 
short& v);
 
  981 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, 
int& v);
 
  984 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, 
float& v);
 
  987 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, 
double& v);
 
  990 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, std::complex<float>& v);
 
  993 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, std::complex<double>& v);
 
  996 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, vec& v);
 
  999 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, ivec& v);
 
 1002 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, bvec& v);
 
 1005 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, cvec& v);
 
 1008 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, std::string& str);
 
 1011 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, mat& m);
 
 1014 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, imat& m);
 
 1020 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, cmat& m);
 
 1023 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<float>& v);
 
 1026 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<double>& v);
 
 1029 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<int>& v);
 
 1032 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<bin>& v);
 
 1035 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<std::complex<float> >& v);
 
 1038 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<std::complex<double> >& v);
 
 1041 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<vec>& v);
 
 1044 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<ivec>& v);
 
 1047 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<bvec>& v);
 
 1050 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<cvec>& v);
 
 1053 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<std::string>& v);
 
 1056 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<mat>& v);
 
 1059 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<imat>& v);
 
 1062 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<bmat>& v);
 
 1065 ITPP_EXPORT it_ifile_old& 
operator>>(it_ifile_old& f, Array<cmat>& v);
 
 1069 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
char x);
 
 1072 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, bin x);
 
 1075 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
short x);
 
 1078 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
int x);
 
 1081 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
float x);
 
 1084 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
double x);
 
 1087 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, std::complex<float> x);
 
 1090 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, std::complex<double> x);
 
 1093 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const vec& v);
 
 1096 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const ivec& v);
 
 1099 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const bvec& v);
 
 1102 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const cvec& v);
 
 1105 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const std::string& str);
 
 1108 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const mat& m);
 
 1111 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const imat& m);
 
 1114 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const bmat& m);
 
 1117 ITPP_EXPORT it_file_old& 
operator<<(it_file_old& f, 
const cmat& m);
 
 1120 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<float>& v);
 
 1123 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<double>& v);
 
 1126 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<int>& v);
 
 1129 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<bin>& v);
 
 1132 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<std::complex<float> >& v);
 
 1135 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<std::complex<double> >& v);
 
 1138 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<vec>& v);
 
 1141 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<ivec>& v);
 
 1144 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<bvec>& v);
 
 1147 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<cvec>& v);
 
 1150 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<std::string>& v);
 
 1153 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<mat>& v);
 
 1156 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<imat>& v);
 
 1159 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<bmat>& v);
 
 1162 ITPP_EXPORT it_file_old& operator<<(it_file_old& f, const Array<cmat>& v);
 
 1173 #endif // #ifndef IT_FILE_H