SIONlib  1.7.4
Scalable I/O library for parallel access to task-local files
sion_cxx_serial.hpp
1 #ifndef SION_CXX_SERIAL_HPP_
2 #define SION_CXX_SERIAL_HPP_
3 
4 #include "sion.h"
5 #include <string>
6 #include <string.h>
7 #include "sion_cxx_common.hpp"
8 #include "sion_cxx_base.hpp"
9 
10 namespace sionlib {
11  namespace serial {
12  class SIONFile : public SION_Base {
13  public:
14  SIONFile(std::string sion_file_name, std::string mode = "wb",
15  int num_tasks = 1, int num_files = 1, sion_int64 * chunk_sizes=NULL, sion_int32 _fs_blk_size=-1, int * global_ranks = NULL);
16  ~SIONFile();
17 
18  // Don't copy SIONFile
19 
20  // Class specific methods
21  SIONFile(const SIONFile& rhs) {
22  }
23 
24  void open();
25  void openRank();
26  int close();
27 
28  /* HELPER FUNCTIONS */
29 
30  /* STATIC MEMBER FUNCTIONS */
31  /* return current endianness (1-> big endian, 0 ->little endian) */
32  // static int getEndianness() {
33  // return sion_get_endianness();
34  // }
35 
36  // static bool isBigEndian() {
37  // return (sion_get_endianness() ? true : false);
38  // }
39 
40  /* return if SIONlib supports PTHREADS (Thread-safe) 1 -> yes, 0 -> no */
41  // static bool isThreadSafe() {
42  // return (sion_is_thread_safe() ? true : false);
43  // }
44 
45  /* return version numbers */
46  // static int GetVersion() {
47  // return sion_get_version(&main_version, &sub_version, &patch_level,
48  // &fileformat_version);
49  // }
50 
51  /* WRITE */
52  template<class T>
53  void write(T data) {
54  sion_fwrite(reinterpret_cast<char*>(&data), 1, sizeof(data), _sid);
55  }
56 
57  /* Test for writing out arrays of data */
58  template<class T>
59  void write(T * data) {
60  sion_fwrite(reinterpret_cast<char*>(data), 1, _chunk_sizes[_rank], _sid);
61  }
62 
63 
64  template<class T>
65  void write(T data, int unit, int length) {
66  sion_fwrite((void *) data.data(), unit, length, _sid);
67  }
68 
69  // template<typename T>
70  // SIONFile& operator<<(SIONFile & sf, const T& rhs) {
71  // sf.write(rhs);
72  // return sf;
73  // }
74 
75  /* READ */
76  template<typename T>
77  void read(T * data) {
78  T tmp = *data;
79  _return_code = sion_fread(data, 1, sizeof(tmp), _sid);
80  }
81 
82  template<typename T>
83  void read(T * data, int unit, int length) {
84  _return_code = sion_fread(data, unit, length, _sid);
85  }
86 
87  template<typename T>
88  friend SIONFile& operator<<(SIONFile & sf, const T& rhs);
89 
90  private:
91  SIONFile();
92 
93  };
94  template<typename T>
95  SIONFile& operator<<(SIONFile & sf, const T& rhs) {
96  sf.write(rhs);
97  return sf;
98  }
99  } /* namespace serial */
100 } /* namespace sionlib */
101 #endif /* SION_CXX_SERIAL_HPP_ */
size_t sion_fwrite(const void *data, size_t size, size_t nitems, int sid)
Write data to sion file.
Definition: sion_common.c:470
size_t sion_fread(void *data, size_t size, size_t nitems, int sid)
Read data from sion file.
Definition: sion_common.c:609