This source file includes following definitions.
- Close
- Create_errhandler
- read_intercept_fn
- write_intercept_fn
- extent_intercept_fn
- Register_datarep
- Register_datarep
- Register_datarep
- Register_datarep
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include "mpi.h"
16
17 #include "ompi/constants.h"
18 #include "ompi/mpi/cxx/mpicxx.h"
19 #include "cxx_glue.h"
20
21 void
22 MPI::File::Close()
23 {
24 (void) MPI_File_close(&mpi_file);
25 }
26
27
28 MPI::Errhandler
29 MPI::File::Create_errhandler(MPI::File::Errhandler_function* function)
30 {
31 return ompi_cxx_errhandler_create_file ((ompi_cxx_dummy_fn_t *) function);
32 }
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 static int read_intercept_fn(void *userbuf, MPI_Datatype type_c, int count_c,
50 void *filebuf, MPI_Offset position_c,
51 void *extra_state)
52 {
53 MPI::Datatype type_cxx(type_c);
54 MPI::Offset position_cxx(position_c);
55 ompi_cxx_intercept_file_extra_state_t *intercept_data =
56 (ompi_cxx_intercept_file_extra_state_t*) extra_state;
57 MPI::Datarep_conversion_function *read_fn_cxx =
58 (MPI::Datarep_conversion_function *) intercept_data->read_fn_cxx;
59
60 read_fn_cxx (userbuf, type_cxx, count_c, filebuf, position_cxx,
61 intercept_data->extra_state_cxx);
62 return MPI_SUCCESS;
63 }
64
65
66 static int write_intercept_fn(void *userbuf, MPI_Datatype type_c, int count_c,
67 void *filebuf, MPI_Offset position_c,
68 void *extra_state)
69 {
70 MPI::Datatype type_cxx(type_c);
71 MPI::Offset position_cxx(position_c);
72 ompi_cxx_intercept_file_extra_state_t *intercept_data =
73 (ompi_cxx_intercept_file_extra_state_t*) extra_state;
74 MPI::Datarep_conversion_function *write_fn_cxx =
75 (MPI::Datarep_conversion_function *) intercept_data->write_fn_cxx;
76
77 write_fn_cxx (userbuf, type_cxx, count_c, filebuf, position_cxx,
78 intercept_data->extra_state_cxx);
79 return MPI_SUCCESS;
80 }
81
82
83 static int extent_intercept_fn(MPI_Datatype type_c, MPI_Aint *file_extent_c,
84 void *extra_state)
85 {
86 MPI::Datatype type_cxx(type_c);
87 MPI::Aint file_extent_cxx(*file_extent_c);
88 ompi_cxx_intercept_file_extra_state_t *intercept_data =
89 (ompi_cxx_intercept_file_extra_state_t*) extra_state;
90 MPI::Datarep_extent_function *extent_fn_cxx =
91 (MPI::Datarep_extent_function *) intercept_data->extent_fn_cxx;
92
93 extent_fn_cxx (type_cxx, file_extent_cxx, intercept_data->extra_state_cxx);
94 *file_extent_c = file_extent_cxx;
95 return MPI_SUCCESS;
96 }
97
98
99 void
100 MPI::Register_datarep(const char* datarep,
101 Datarep_conversion_function* read_fn_cxx,
102 Datarep_conversion_function* write_fn_cxx,
103 Datarep_extent_function* extent_fn_cxx,
104 void* extra_state_cxx)
105 {
106 ompi_cxx_intercept_file_extra_state_t *intercept;
107
108 intercept = ompi_cxx_new_intercept_state ((void *) read_fn_cxx, (void *) write_fn_cxx,
109 (void *) extent_fn_cxx, extra_state_cxx);
110 if (NULL == intercept) {
111 ompi_cxx_errhandler_invoke_file (MPI_FILE_NULL, OMPI_ERR_OUT_OF_RESOURCE,
112 "MPI::Register_datarep");
113 return;
114 }
115
116 (void)MPI_Register_datarep (const_cast<char*>(datarep), read_intercept_fn,
117 write_intercept_fn, extent_intercept_fn, intercept);
118 }
119
120
121 void
122 MPI::Register_datarep(const char* datarep,
123 MPI_Datarep_conversion_function* read_fn_c,
124 Datarep_conversion_function* write_fn_cxx,
125 Datarep_extent_function* extent_fn_cxx,
126 void* extra_state_cxx)
127 {
128 ompi_cxx_intercept_file_extra_state_t *intercept;
129
130 intercept = ompi_cxx_new_intercept_state (NULL, (void *) write_fn_cxx, (void *) extent_fn_cxx,
131 extra_state_cxx);
132 if (NULL == intercept) {
133 ompi_cxx_errhandler_invoke_file (MPI_FILE_NULL, OMPI_ERR_OUT_OF_RESOURCE,
134 "MPI::Register_datarep");
135 return;
136 }
137
138 (void)MPI_Register_datarep (const_cast<char*>(datarep), read_fn_c, write_intercept_fn,
139 extent_intercept_fn, intercept);
140 }
141
142
143 void
144 MPI::Register_datarep(const char* datarep,
145 Datarep_conversion_function* read_fn_cxx,
146 MPI_Datarep_conversion_function* write_fn_c,
147 Datarep_extent_function* extent_fn_cxx,
148 void* extra_state_cxx)
149 {
150 ompi_cxx_intercept_file_extra_state_t *intercept;
151
152 intercept = ompi_cxx_new_intercept_state ((void *) read_fn_cxx, NULL, (void *) extent_fn_cxx,
153 extra_state_cxx);
154 if (NULL == intercept) {
155 ompi_cxx_errhandler_invoke_file (MPI_FILE_NULL, OMPI_ERR_OUT_OF_RESOURCE,
156 "MPI::Register_datarep");
157 return;
158 }
159
160 (void)MPI_Register_datarep (const_cast<char*>(datarep), read_intercept_fn, write_fn_c,
161 extent_intercept_fn, intercept);
162 }
163
164
165 void
166 MPI::Register_datarep(const char* datarep,
167 MPI_Datarep_conversion_function* read_fn_c,
168 MPI_Datarep_conversion_function* write_fn_c,
169 Datarep_extent_function* extent_fn_cxx,
170 void* extra_state_cxx)
171 {
172 ompi_cxx_intercept_file_extra_state_t *intercept;
173
174 intercept = ompi_cxx_new_intercept_state (NULL, NULL, (void *) extent_fn_cxx, extra_state_cxx);
175 if (NULL == intercept) {
176 ompi_cxx_errhandler_invoke_file (MPI_FILE_NULL, OMPI_ERR_OUT_OF_RESOURCE,
177 "MPI::Register_datarep");
178 return;
179 }
180
181 (void)MPI_Register_datarep (const_cast<char*>(datarep), read_fn_c, write_fn_c,
182 extent_intercept_fn, intercept);
183 }
184
185