OpenMPI  0.1.1
file.h
1 // -*- c++ -*-
2 //
3 // Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
4 // University Research and Technology
5 // Corporation. All rights reserved.
6 // Copyright (c) 2004-2005 The University of Tennessee and The University
7 // of Tennessee Research Foundation. All rights
8 // reserved.
9 // Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
10 // University of Stuttgart. All rights reserved.
11 // Copyright (c) 2004-2005 The Regents of the University of California.
12 // All rights reserved.
13 // Copyright (c) 2006-2009 Cisco Systems, Inc. All rights reserved.
14 // $COPYRIGHT$
15 //
16 // Additional copyrights may follow
17 //
18 // $HEADER$
19 //
20 
21 // Typedefs for C++ callbacks registered via MPI::Register_datarep
22 typedef void Datarep_extent_function(const Datatype& datatype,
23  Aint& file_extent, void* extra_state);
24 typedef void Datarep_conversion_function(void* userbuf, Datatype& datatype,
25  int count, void* filebuf,
26  Offset position, void* extra_state);
27 
28 // Both callback functions in C++
29 void Register_datarep(const char* datarep,
30  Datarep_conversion_function* read_conversion_fn,
31  Datarep_conversion_function* write_conversion_fn,
32  Datarep_extent_function* dtype_file_extent_fn,
33  void* extra_state);
34 
35 // Overload for C read callback function (MPI_CONVERSION_FN_NULL)
36 void Register_datarep(const char* datarep,
37  MPI_Datarep_conversion_function* read_conversion_fn,
38  Datarep_conversion_function* write_conversion_fn,
39  Datarep_extent_function* dtype_file_extent_fn,
40  void* extra_state);
41 
42 // Overload for C write callback function (MPI_CONVERSION_FN_NULL)
43 void Register_datarep(const char* datarep,
44  Datarep_conversion_function* read_conversion_fn,
45  MPI_Datarep_conversion_function* write_conversion_fn,
46  Datarep_extent_function* dtype_file_extent_fn,
47  void* extra_state);
48 
49 // Overload for C read and write callback functions (MPI_CONVERSION_FN_NULL)
50 void Register_datarep(const char* datarep,
51  MPI_Datarep_conversion_function* read_conversion_fn,
52  MPI_Datarep_conversion_function* write_conversion_fn,
53  Datarep_extent_function* dtype_file_extent_fn,
54  void* extra_state);
55 
56 class File {
57 #if 0 /* OMPI_ENABLE_MPI_PROFILING */
58  // friend class P;
59 
60 #endif
61  friend class MPI::Comm; //so I can access pmpi_file data member in comm.cc
62  friend class MPI::Request; //and also from request.cc
63 
64 public:
65 #if 0 /* OMPI_ENABLE_MPI_PROFILING */
66 
67  // construction / destruction
68  File() { }
69  virtual ~File() { }
70 
71 
72  // copy / assignment
73  File(const File& data) : pmpi_file(data.pmpi_file) { }
74 
75  File(MPI_File i) : pmpi_file(i) { }
76 
77  File& operator=(const File& data) {
78  pmpi_file = data.pmpi_file; return *this; }
79 
80  // comparison, don't need for file
81 
82  // inter-language operability
83  File& operator= (const MPI_File &i) {
84  pmpi_file = i; return *this; }
85  operator MPI_File () const { return pmpi_file; }
86  // operator MPI_File* () const { return pmpi_file; }
87  operator const PMPI::File&() const { return pmpi_file; }
88 
89 #else
90 
91  File() : mpi_file(MPI_FILE_NULL) { }
92  // copy
93  File(const File& data) : mpi_file(data.mpi_file) { }
94 
95  File(MPI_File i) : mpi_file(i) { }
96 
97  virtual ~File() { }
98 
99  File& operator=(const File& data) {
100  mpi_file = data.mpi_file; return *this; }
101 
102  // comparison, don't need for file
103 
104  // inter-language operability
105  File& operator= (const MPI_File &i) {
106  mpi_file = i; return *this; }
107  operator MPI_File () const { return mpi_file; }
108  // operator MPI_File* () const { return (MPI_File*)&mpi_file; }
109 
110 #endif
111 
112  // from the I/o chapter of MPI - 2
113 
114  void Close();
115 
116  static void Delete(const char* filename, const MPI::Info& info);
117 
118  int Get_amode() const;
119 
120  bool Get_atomicity() const;
121 
122  MPI::Offset Get_byte_offset(const MPI::Offset disp) const;
123 
124  MPI::Group Get_group() const;
125 
126  MPI::Info Get_info() const;
127 
128  MPI::Offset Get_position() const;
129 
130  MPI::Offset Get_position_shared() const;
131 
132  MPI::Offset Get_size() const;
133 
134  MPI::Aint Get_type_extent(const MPI::Datatype& datatype) const;
135 
136  void Get_view(MPI::Offset& disp, MPI::Datatype& etype,
137  MPI::Datatype& filetype, char* datarep) const;
138 
139  MPI::Request Iread(void* buf, int count,
140  const MPI::Datatype& datatype);
141 
142  MPI::Request Iread_at(MPI::Offset offset, void* buf, int count,
143  const MPI::Datatype& datatype);
144 
145  MPI::Request Iread_shared(void* buf, int count,
146  const MPI::Datatype& datatype);
147 
148  MPI::Request Iwrite(const void* buf, int count,
149  const MPI::Datatype& datatype);
150 
151  MPI::Request Iwrite_at(MPI::Offset offset, const void* buf,
152  int count, const MPI::Datatype& datatype);
153 
154  MPI::Request Iwrite_shared(const void* buf, int count,
155  const MPI::Datatype& datatype);
156 
157  static MPI::File Open(const MPI::Intracomm& comm,
158  const char* filename, int amode,
159  const MPI::Info& info);
160 
161  void Preallocate(MPI::Offset size);
162 
163  void Read(void* buf, int count, const MPI::Datatype& datatype);
164 
165  void Read(void* buf, int count, const MPI::Datatype& datatype,
166  MPI::Status& status);
167 
168  void Read_all(void* buf, int count, const MPI::Datatype& datatype);
169 
170  void Read_all(void* buf, int count, const MPI::Datatype& datatype,
171  MPI::Status& status);
172 
173  void Read_all_begin(void* buf, int count,
174  const MPI::Datatype& datatype);
175 
176  void Read_all_end(void* buf);
177 
178  void Read_all_end(void* buf, MPI::Status& status);
179 
180  void Read_at(MPI::Offset offset,
181  void* buf, int count, const MPI::Datatype& datatype);
182 
183  void Read_at(MPI::Offset offset, void* buf, int count,
184  const MPI::Datatype& datatype, MPI::Status& status);
185 
186  void Read_at_all(MPI::Offset offset, void* buf, int count,
187  const MPI::Datatype& datatype);
188 
189  void Read_at_all(MPI::Offset offset, void* buf, int count,
190  const MPI::Datatype& datatype, MPI::Status& status);
191 
192  void Read_at_all_begin(MPI::Offset offset, void* buf, int count,
193  const MPI::Datatype& datatype);
194 
195  void Read_at_all_end(void* buf);
196 
197  void Read_at_all_end(void* buf, MPI::Status& status);
198 
199  void Read_ordered(void* buf, int count,
200  const MPI::Datatype& datatype);
201 
202  void Read_ordered(void* buf, int count,
203  const MPI::Datatype& datatype,
204  MPI::Status& status);
205 
206  void Read_ordered_begin(void* buf, int count,
207  const MPI::Datatype& datatype);
208 
209  void Read_ordered_end(void* buf);
210 
211  void Read_ordered_end(void* buf, MPI::Status& status);
212 
213  void Read_shared(void* buf, int count,
214  const MPI::Datatype& datatype);
215 
216  void Read_shared(void* buf, int count,
217  const MPI::Datatype& datatype, MPI::Status& status);
218 
219  void Seek(MPI::Offset offset, int whence);
220 
221  void Seek_shared(MPI::Offset offset, int whence);
222 
223  void Set_atomicity(bool flag);
224 
225  void Set_info(const MPI::Info& info);
226 
227  void Set_size(MPI::Offset size);
228 
229  void Set_view(MPI::Offset disp, const MPI::Datatype& etype,
230  const MPI::Datatype& filetype, const char* datarep,
231  const MPI::Info& info);
232 
233  void Sync();
234 
235  void Write(const void* buf, int count,
236  const MPI::Datatype& datatype);
237 
238  void Write(const void* buf, int count,
239  const MPI::Datatype& datatype, MPI::Status& status);
240 
241  void Write_all(const void* buf, int count,
242  const MPI::Datatype& datatype);
243 
244  void Write_all(const void* buf, int count,
245  const MPI::Datatype& datatype, MPI::Status& status);
246 
247  void Write_all_begin(const void* buf, int count,
248  const MPI::Datatype& datatype);
249 
250  void Write_all_end(const void* buf);
251 
252  void Write_all_end(const void* buf, MPI::Status& status);
253 
254  void Write_at(MPI::Offset offset, const void* buf, int count,
255  const MPI::Datatype& datatype);
256 
257  void Write_at(MPI::Offset offset, const void* buf, int count,
258  const MPI::Datatype& datatype, MPI::Status& status);
259 
260  void Write_at_all(MPI::Offset offset, const void* buf, int count,
261  const MPI::Datatype& datatype);
262 
263  void Write_at_all(MPI::Offset offset, const void* buf, int count,
264  const MPI::Datatype& datatype,
265  MPI::Status& status);
266 
267  void Write_at_all_begin(MPI::Offset offset, const void* buf,
268  int count, const MPI::Datatype& datatype);
269 
270  void Write_at_all_end(const void* buf);
271 
272  void Write_at_all_end(const void* buf, MPI::Status& status);
273 
274  void Write_ordered(const void* buf, int count,
275  const MPI::Datatype& datatype);
276 
277  void Write_ordered(const void* buf, int count,
278  const MPI::Datatype& datatype, MPI::Status& status);
279 
280  void Write_ordered_begin(const void* buf, int count,
281  const MPI::Datatype& datatype);
282 
283  void Write_ordered_end(const void* buf);
284 
285  void Write_ordered_end(const void* buf, MPI::Status& status);
286 
287  void Write_shared(const void* buf, int count,
288  const MPI::Datatype& datatype);
289 
290  void Write_shared(const void* buf, int count,
291  const MPI::Datatype& datatype, MPI::Status& status);
292 
293  //
294  // Errhandler
295  //
296  typedef void Errhandler_function(MPI::File &, int *, ... );
297  typedef Errhandler_function Errhandler_fn
298  __mpi_interface_deprecated__("MPI::File::Errhandler_fn was deprecated in MPI-2.2; use MPI::File::Errhandler_function instead");
299 
300  static MPI::Errhandler Create_errhandler(Errhandler_function* function);
301 
302  MPI::Errhandler Get_errhandler() const;
303 
304  void Set_errhandler(const MPI::Errhandler& errhandler) const;
305 
306  void Call_errhandler(int errorcode) const;
307 
308 protected:
309 #if 0 /* OMPI_ENABLE_MPI_PROFILING */
310  PMPI::File pmpi_file;
311 
312 #else
313  MPI_File mpi_file;
314 
315 #endif
316 };
317 
Definition: datatype.h:24
Back-end structure for MPI_File.
Definition: file.h:42