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