Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
dataIO_Text_impl.h
Go to the documentation of this file.
1 
10 #ifndef DATAIO_TEXT_IMPL_INCLUDED
11 #define DATAIO_TEXT_IMPL_INCLUDED
12 
13 template<typename T>
14 void DataIO_Text::read_file_base(T *v, const size_t n, const string& filename)
15 {
16  ENTER;
17 
19  vout.detailed(m_vl, "reading data to %s.\n", filename.c_str());
20 
21  std::fstream fs(filename.c_str(), std::ios::in);
22  if (!fs.is_open()) {
23  vout.crucial(m_vl, "read file failed.\n");
24  abort();
25  }
26 
27  for (size_t i = 0; i < n; ++i) {
28  fetch_data<T>(v[i], fs);
29  }
30 
31  fs.close();
32  }
33 
34  vout.general(m_vl, "read successful.\n");
35 }
36 
37 
38 template<typename T>
39 void DataIO_Text::write_file_base(const T *v, const size_t n, const string& filename, const bool append)
40 {
41  ENTER;
42 
44  vout.detailed(m_vl, "writing data to %s.\n", filename.c_str());
45 
46  std::fstream fs(filename.c_str(), std::ios::out | (append ? std::ios::app : std::ios::trunc));
47  if (!fs.is_open()) {
48  vout.crucial(m_vl, "write file failed.\n");
49  abort();
50  }
51 
52  fs.setf(std::ios_base::scientific, std::ios_base::floatfield);
53  fs.precision(m_format_precision);
54 
55  for (size_t i = 0; i < n; ++i) {
56  store_data<T>(v[i], fs);
57  }
58 
59  fs.close();
60  }
61 
62  vout.general(m_vl, "write successful.\n");
63 }
64 
65 
66 template<>
67 inline void
68 DataIO_Text::store_data<double> (const double& v, fstream& fs)
69 {
70  fs << v << std::endl;
71 }
72 
73 
74 template<>
75 inline void
76 DataIO_Text::store_data<dcomplex> (const dcomplex& v, fstream& fs)
77 {
78  fs << real(v) << "\t" << imag(v) << std::endl;
79 }
80 
81 
82 template<>
83 inline void
84 DataIO_Text::fetch_data<double> (double& v, fstream& fs)
85 {
86  double val;
87 
88  fs >> val;
89  v = val;
90 }
91 
92 
93 template<>
94 inline void
95 DataIO_Text::fetch_data<dcomplex> (dcomplex& v, fstream& fs)
96 {
97  double valr, vali;
98 
99  fs >> valr >> vali;
100  v = cmplx(valr, vali);
101 }
102 
103 
104 #endif /* DATAIO_TEXT_IMPL_INCLUDED */
void read_file_base(T *v, const size_t n, const string &)
BridgeIO vout
Definition: bridgeIO.cpp:207
void detailed(const char *format,...)
Definition: bridgeIO.cpp:50
void general(const char *format,...)
Definition: bridgeIO.cpp:38
int m_format_precision
Definition: dataIO_Text.h:77
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
Bridge::VerboseLevel m_vl
Definition: dataIO.h:63
void write_file_base(const T *v, const size_t n, const string &, const bool append=true)
#define ENTER
Definition: dataIO.h:18
static bool is_primary()
check if the present node is primary in small communicator.