1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef PMIX_BFROP_BASE_H_
27 #define PMIX_BFROP_BASE_H_
28
29 #include <src/include/pmix_config.h>
30
31
32 #ifdef HAVE_SYS_TIME_H
33 #include <sys/time.h>
34 #endif
35 #ifdef HAVE_STRING_H
36 #include <string.h>
37 #endif
38
39 #include "src/class/pmix_pointer_array.h"
40 #include "src/mca/mca.h"
41 #include "src/mca/base/pmix_mca_base_framework.h"
42 #include "src/include/pmix_globals.h"
43 #include "src/mca/bfrops/bfrops.h"
44
45
46 BEGIN_C_DECLS
47
48
49
50
51 PMIX_EXPORT extern pmix_mca_base_framework_t pmix_bfrops_base_framework;
52
53
54
55
56
57
58 PMIX_EXPORT pmix_status_t pmix_bfrop_base_select(void);
59
60
61
62
63 struct pmix_bfrops_base_active_module_t {
64 pmix_list_item_t super;
65 pmix_status_t pri;
66 pmix_bfrops_module_t *module;
67 pmix_bfrops_base_component_t *component;
68 };
69 typedef struct pmix_bfrops_base_active_module_t pmix_bfrops_base_active_module_t;
70 PMIX_CLASS_DECLARATION(pmix_bfrops_base_active_module_t);
71
72
73
74 struct pmix_bfrops_globals_t {
75 pmix_list_t actives;
76 bool initialized;
77 size_t initial_size;
78 size_t threshold_size;
79 pmix_bfrop_buffer_type_t default_type;
80 };
81 typedef struct pmix_bfrops_globals_t pmix_bfrops_globals_t;
82
83 PMIX_EXPORT extern pmix_bfrops_globals_t pmix_bfrops_globals;
84
85
86
87
88 #define PMIX_BFROP_DEFAULT_INITIAL_SIZE 128
89
90
91
92
93 #define PMIX_BFROP_DEFAULT_THRESHOLD_SIZE 1024
94
95
96
97
98
99 #if SIZEOF_SIZE_T == 1
100 #define BFROP_TYPE_SIZE_T PMIX_UINT8
101 #elif SIZEOF_SIZE_T == 2
102 #define BFROP_TYPE_SIZE_T PMIX_UINT16
103 #elif SIZEOF_SIZE_T == 4
104 #define BFROP_TYPE_SIZE_T PMIX_UINT32
105 #elif SIZEOF_SIZE_T == 8
106 #define BFROP_TYPE_SIZE_T PMIX_UINT64
107 #else
108 #error Unsupported size_t size!
109 #endif
110
111
112
113
114
115 #if SIZEOF__BOOL == 1
116 #define BFROP_TYPE_BOOL PMIX_UINT8
117 #elif SIZEOF__BOOL == 2
118 #define BFROP_TYPE_BOOL PMIX_UINT16
119 #elif SIZEOF__BOOL == 4
120 #define BFROP_TYPE_BOOL PMIX_UINT32
121 #elif SIZEOF__BOOL == 8
122 #define BFROP_TYPE_BOOL PMIX_UINT64
123 #else
124 #error Unsupported bool size!
125 #endif
126
127
128
129
130
131 #if SIZEOF_INT == 1
132 #define BFROP_TYPE_INT PMIX_INT8
133 #define BFROP_TYPE_UINT PMIX_UINT8
134 #elif SIZEOF_INT == 2
135 #define BFROP_TYPE_INT PMIX_INT16
136 #define BFROP_TYPE_UINT PMIX_UINT16
137 #elif SIZEOF_INT == 4
138 #define BFROP_TYPE_INT PMIX_INT32
139 #define BFROP_TYPE_UINT PMIX_UINT32
140 #elif SIZEOF_INT == 8
141 #define BFROP_TYPE_INT PMIX_INT64
142 #define BFROP_TYPE_UINT PMIX_UINT64
143 #else
144 #error Unsupported INT size!
145 #endif
146
147
148
149
150
151 #if SIZEOF_PID_T == 1
152 #define BFROP_TYPE_PID_T PMIX_UINT8
153 #elif SIZEOF_PID_T == 2
154 #define BFROP_TYPE_PID_T PMIX_UINT16
155 #elif SIZEOF_PID_T == 4
156 #define BFROP_TYPE_PID_T PMIX_UINT32
157 #elif SIZEOF_PID_T == 8
158 #define BFROP_TYPE_PID_T PMIX_UINT64
159 #else
160 #error Unsupported pid_t size!
161 #endif
162
163
164 #define PMIX_BFROP_UNPACK_SIZE_MISMATCH(reg_types, unpack_type, remote_type, ret) \
165 do { \
166 switch(remote_type) { \
167 case PMIX_UINT8: \
168 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint8_t, remote_type); \
169 break; \
170 case PMIX_INT8: \
171 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int8_t, remote_type); \
172 break; \
173 case PMIX_UINT16: \
174 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint16_t, remote_type); \
175 break; \
176 case PMIX_INT16: \
177 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int16_t, remote_type); \
178 break; \
179 case PMIX_UINT32: \
180 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint32_t, remote_type); \
181 break; \
182 case PMIX_INT32: \
183 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int32_t, remote_type); \
184 break; \
185 case PMIX_UINT64: \
186 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint64_t, remote_type); \
187 break; \
188 case PMIX_INT64: \
189 PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int64_t, remote_type); \
190 break; \
191 default: \
192 ret = PMIX_ERR_NOT_FOUND; \
193 } \
194 } while (0)
195
196 #define PMIX_BFROPS_PACK_TYPE(r, b, s, n, t, arr) \
197 do { \
198 pmix_bfrop_type_info_t *__info; \
199 \
200 __info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item((arr),\
201 (t)); \
202 if (NULL == __info) { \
203 (r) = PMIX_ERR_UNKNOWN_DATA_TYPE; \
204 } else { \
205 (r) = __info->odti_pack_fn(arr, b, s, n, t); \
206 } \
207 } while(0)
208
209 #define PMIX_BFROPS_UNPACK_TYPE(r, b, d, n, t, arr) \
210 do { \
211 pmix_bfrop_type_info_t *__info; \
212 \
213 __info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item((arr),\
214 (t)); \
215 if (NULL == __info) { \
216 (r) = PMIX_ERR_UNKNOWN_DATA_TYPE; \
217 } else { \
218 (r) = __info->odti_unpack_fn(arr, b, d, n, t); \
219 } \
220 } while(0)
221
222
223
224
225 #define PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, tmptype, tmpbfroptype) \
226 do { \
227 int32_t i; \
228 tmptype *tmpbuf = (tmptype*)calloc(*num_vals, sizeof(tmptype)); \
229 PMIX_BFROPS_UNPACK_TYPE(ret, buffer, tmpbuf, num_vals, tmpbfroptype, reg_types); \
230 if (PMIX_ERR_UNKNOWN_DATA_TYPE != ret) { \
231 for (i = 0 ; i < *num_vals ; ++i) { \
232 ((unpack_type*) dest)[i] = (unpack_type)(tmpbuf[i]); \
233 } \
234 } \
235 free(tmpbuf); \
236 } while (0)
237
238
239 typedef struct pmix_info_array {
240 size_t size;
241 pmix_info_t *array;
242 } pmix_info_array_t;
243
244 typedef pmix_status_t (*pmix_bfrop_internal_pack_fn_t)(pmix_pointer_array_t *regtypes,
245 pmix_buffer_t *buffer,
246 const void *src,
247 int32_t num_values,
248 pmix_data_type_t type);
249
250 typedef pmix_status_t (*pmix_bfrop_internal_unpack_fn_t)(pmix_pointer_array_t *regtypes,
251 pmix_buffer_t *buffer, void *dest,
252 int32_t *max_num_values,
253 pmix_data_type_t type);
254
255
256
257
258 typedef struct {
259 pmix_object_t super;
260
261 pmix_data_type_t odti_type;
262
263 char *odti_name;
264
265 pmix_bfrop_internal_pack_fn_t odti_pack_fn;
266
267 pmix_bfrop_internal_unpack_fn_t odti_unpack_fn;
268
269 pmix_bfrop_copy_fn_t odti_copy_fn;
270
271 pmix_bfrop_print_fn_t odti_print_fn;
272 } pmix_bfrop_type_info_t;
273 PMIX_EXPORT PMIX_CLASS_DECLARATION(pmix_bfrop_type_info_t);
274
275
276
277 #define PMIX_REGISTER_TYPE(n, t, p, u, c, pr, arr) \
278 do { \
279 pmix_bfrop_type_info_t *_info; \
280 _info = PMIX_NEW(pmix_bfrop_type_info_t); \
281 _info->odti_name = strdup((n)); \
282 _info->odti_type = (t); \
283 _info->odti_pack_fn = (pmix_bfrop_internal_pack_fn_t)(p); \
284 _info->odti_unpack_fn = (pmix_bfrop_internal_unpack_fn_t)(u); \
285 _info->odti_copy_fn = (pmix_bfrop_copy_fn_t)(c) ; \
286 _info->odti_print_fn = (pmix_bfrop_print_fn_t)(pr) ; \
287 pmix_pointer_array_set_item((arr), (t), _info); \
288 } while (0)
289
290
291 PMIX_EXPORT char* pmix_bfrops_stub_get_available_modules(void);
292 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_assign_module(struct pmix_peer_t *peer,
293 const char *version);
294 PMIX_EXPORT pmix_buffer_t* pmix_bfrops_stub_create_buffer(struct pmix_peer_t *pr);
295 PMIX_EXPORT void pmix_bfrops_construct_buffer(struct pmix_peer_t *pr,
296 pmix_buffer_t *buf);
297 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_pack(struct pmix_peer_t *peer,
298 pmix_buffer_t *buffer,
299 const void *src,
300 int32_t num_values,
301 pmix_data_type_t type);
302 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_unpack(struct pmix_peer_t *peer,
303 pmix_buffer_t *buffer, void *dest,
304 int32_t *max_num_values,
305 pmix_data_type_t type);
306 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_copy(struct pmix_peer_t *peer,
307 void **dest, void *src,
308 pmix_data_type_t type);
309 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_print(struct pmix_peer_t *peer,
310 char **output, char *prefix,
311 void *src, pmix_data_type_t type);
312 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_copy_payload(struct pmix_peer_t *peer,
313 pmix_buffer_t *dest,
314 pmix_buffer_t *src);
315 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_value_xfer(struct pmix_peer_t *peer,
316 pmix_value_t *dest,
317 const pmix_value_t *src);
318 PMIX_EXPORT void pmix_bfrops_stub_value_load(struct pmix_peer_t *peer,
319 pmix_value_t *v, void *data,
320 pmix_data_type_t type);
321 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_value_unload(struct pmix_peer_t *peer,
322 pmix_value_t *kv,
323 void **data, size_t *sz);
324 PMIX_EXPORT pmix_value_cmp_t pmix_bfrops_stub_value_cmp(struct pmix_peer_t *peer,
325 pmix_value_t *p1, pmix_value_t *p2);
326 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_register_type(struct pmix_peer_t *peer,
327 const char *name, pmix_data_type_t type,
328 pmix_bfrop_pack_fn_t pack,
329 pmix_bfrop_unpack_fn_t unpack,
330 pmix_bfrop_copy_fn_t copy,
331 pmix_bfrop_print_fn_t print);
332
333
334 PMIX_EXPORT const char* pmix_bfrops_base_data_type_string(pmix_pointer_array_t *regtypes,
335 pmix_data_type_t type);
336
337
338
339
340 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack(pmix_pointer_array_t *regtypes,
341 pmix_buffer_t *buffer,
342 const void *src, int num_vals,
343 pmix_data_type_t type);
344 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_buffer(pmix_pointer_array_t *regtypes,
345 pmix_buffer_t *buffer,
346 const void *src, int32_t num_vals,
347 pmix_data_type_t type);
348
349 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_bool(pmix_pointer_array_t *regtypes,
350 pmix_buffer_t *buffer, const void *src,
351 int32_t num_vals, pmix_data_type_t type);
352 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int(pmix_pointer_array_t *regtypes,
353 pmix_buffer_t *buffer, const void *src,
354 int32_t num_vals, pmix_data_type_t type);
355 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_sizet(pmix_pointer_array_t *regtypes,
356 pmix_buffer_t *buffer, const void *src,
357 int32_t num_vals, pmix_data_type_t type);
358 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_byte(pmix_pointer_array_t *regtypes,
359 pmix_buffer_t *buffer, const void *src,
360 int32_t num_vals, pmix_data_type_t type);
361 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_string(pmix_pointer_array_t *regtypes,
362 pmix_buffer_t *buffer, const void *src,
363 int32_t num_vals, pmix_data_type_t type);
364 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pid(pmix_pointer_array_t *regtypes,
365 pmix_buffer_t *buffer, const void *src,
366 int32_t num_vals, pmix_data_type_t type);
367
368 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int16(pmix_pointer_array_t *regtypes,
369 pmix_buffer_t *buffer, const void *src,
370 int32_t num_vals, pmix_data_type_t type);
371 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int32(pmix_pointer_array_t *regtypes,
372 pmix_buffer_t *buffer, const void *src,
373 int32_t num_vals, pmix_data_type_t type);
374 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int64(pmix_pointer_array_t *regtypes,
375 pmix_buffer_t *buffer, const void *src,
376 int32_t num_vals, pmix_data_type_t type);
377 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_string(pmix_pointer_array_t *regtypes,
378 pmix_buffer_t *buffer, const void *src,
379 int32_t num_vals, pmix_data_type_t type);
380 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_float(pmix_pointer_array_t *regtypes,
381 pmix_buffer_t *buffer, const void *src,
382 int32_t num_vals, pmix_data_type_t type);
383 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_double(pmix_pointer_array_t *regtypes,
384 pmix_buffer_t *buffer, const void *src,
385 int32_t num_vals, pmix_data_type_t type);
386 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_timeval(pmix_pointer_array_t *regtypes,
387 pmix_buffer_t *buffer, const void *src,
388 int32_t num_vals, pmix_data_type_t type);
389 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_time(pmix_pointer_array_t *regtypes,
390 pmix_buffer_t *buffer, const void *src,
391 int32_t num_vals, pmix_data_type_t type);
392 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_status(pmix_pointer_array_t *regtypes,
393 pmix_buffer_t *buffer, const void *src,
394 int32_t num_vals, pmix_data_type_t type);
395 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_buf(pmix_pointer_array_t *regtypes,
396 pmix_buffer_t *buffer, const void *src,
397 int32_t num_vals, pmix_data_type_t type);
398 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_bo(pmix_pointer_array_t *regtypes,
399 pmix_buffer_t *buffer, const void *src,
400 int32_t num_vals, pmix_data_type_t type);
401 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_proc(pmix_pointer_array_t *regtypes,
402 pmix_buffer_t *buffer, const void *src,
403 int32_t num_vals, pmix_data_type_t type);
404 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_value(pmix_pointer_array_t *regtypes,
405 pmix_buffer_t *buffer, const void *src,
406 int32_t num_vals, pmix_data_type_t type);
407 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_info(pmix_pointer_array_t *regtypes,
408 pmix_buffer_t *buffer, const void *src,
409 int32_t num_vals, pmix_data_type_t type);
410 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pdata(pmix_pointer_array_t *regtypes,
411 pmix_buffer_t *buffer, const void *src,
412 int32_t num_vals, pmix_data_type_t type);
413 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_app(pmix_pointer_array_t *regtypes,
414 pmix_buffer_t *buffer, const void *src,
415 int32_t num_vals, pmix_data_type_t type);
416 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_kval(pmix_pointer_array_t *regtypes,
417 pmix_buffer_t *buffer, const void *src,
418 int32_t num_vals, pmix_data_type_t type);
419 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_array(pmix_pointer_array_t *regtypes,
420 pmix_buffer_t *buffer, const void *src,
421 int32_t num_vals, pmix_data_type_t type);
422 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_modex(pmix_buffer_t *buffer, const void *src,
423 int32_t num_vals, pmix_data_type_t type);
424 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_persist(pmix_pointer_array_t *regtypes,
425 pmix_buffer_t *buffer, const void *src,
426 int32_t num_vals, pmix_data_type_t type);
427 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_datatype(pmix_pointer_array_t *regtypes,
428 pmix_buffer_t *buffer, const void *src,
429 int32_t num_vals, pmix_data_type_t type);
430 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_ptr(pmix_pointer_array_t *regtypes,
431 pmix_buffer_t *buffer, const void *src,
432 int32_t num_vals, pmix_data_type_t type);
433 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_scope(pmix_pointer_array_t *regtypes,
434 pmix_buffer_t *buffer, const void *src,
435 int32_t num_vals, pmix_data_type_t type);
436 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_range(pmix_pointer_array_t *regtypes,
437 pmix_buffer_t *buffer, const void *src,
438 int32_t num_vals, pmix_data_type_t type);
439 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_cmd(pmix_pointer_array_t *regtypes,
440 pmix_buffer_t *buffer, const void *src,
441 int32_t num_vals, pmix_data_type_t type);
442 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_info_directives(pmix_pointer_array_t *regtypes,
443 pmix_buffer_t *buffer, const void *src,
444 int32_t num_vals, pmix_data_type_t type);
445 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pstate(pmix_pointer_array_t *regtypes,
446 pmix_buffer_t *buffer, const void *src,
447 int32_t num_vals, pmix_data_type_t type);
448 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pinfo(pmix_pointer_array_t *regtypes,
449 pmix_buffer_t *buffer, const void *src,
450 int32_t num_vals, pmix_data_type_t type);
451 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_darray(pmix_pointer_array_t *regtypes,
452 pmix_buffer_t *buffer, const void *src,
453 int32_t num_vals, pmix_data_type_t type);
454 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_rank(pmix_pointer_array_t *regtypes,
455 pmix_buffer_t *buffer, const void *src,
456 int32_t num_vals, pmix_data_type_t type);
457 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_query(pmix_pointer_array_t *regtypes,
458 pmix_buffer_t *buffer, const void *src,
459 int32_t num_vals, pmix_data_type_t type);
460 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_val(pmix_pointer_array_t *regtypes,
461 pmix_buffer_t *buffer,
462 pmix_value_t *p);
463 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_alloc_directive(pmix_pointer_array_t *regtypes,
464 pmix_buffer_t *buffer, const void *src,
465 int32_t num_vals, pmix_data_type_t type);
466 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_iof_channel(pmix_pointer_array_t *regtypes,
467 pmix_buffer_t *buffer, const void *src,
468 int32_t num_vals, pmix_data_type_t type);
469 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_envar(pmix_pointer_array_t *regtypes,
470 pmix_buffer_t *buffer, const void *src,
471 int32_t num_vals, pmix_data_type_t type);
472 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_coord(pmix_pointer_array_t *regtypes,
473 pmix_buffer_t *buffer, const void *src,
474 int32_t num_vals, pmix_data_type_t type);
475 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_regattr(pmix_pointer_array_t *regtypes,
476 pmix_buffer_t *buffer, const void *src,
477 int32_t num_vals, pmix_data_type_t type);
478
479
480
481
482 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack(pmix_pointer_array_t *regtypes,
483 pmix_buffer_t *buffer,
484 void *dst, int32_t *num_vals,
485 pmix_data_type_t type);
486
487 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_bool(pmix_pointer_array_t *regtypes,
488 pmix_buffer_t *buffer, void *dest,
489 int32_t *num_vals, pmix_data_type_t type);
490 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_byte(pmix_pointer_array_t *regtypes,
491 pmix_buffer_t *buffer, void *dest,
492 int32_t *num_vals, pmix_data_type_t type);
493 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_string(pmix_pointer_array_t *regtypes,
494 pmix_buffer_t *buffer, void *dest,
495 int32_t *num_vals, pmix_data_type_t type);
496 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int(pmix_pointer_array_t *regtypes,
497 pmix_buffer_t *buffer, void *dest,
498 int32_t *num_vals, pmix_data_type_t type);
499 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_sizet(pmix_pointer_array_t *regtypes,
500 pmix_buffer_t *buffer, void *dest,
501 int32_t *num_vals, pmix_data_type_t type);
502 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pid(pmix_pointer_array_t *regtypes,
503 pmix_buffer_t *buffer, void *dest,
504 int32_t *num_vals, pmix_data_type_t type);
505 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int16(pmix_pointer_array_t *regtypes,
506 pmix_buffer_t *buffer, void *dest,
507 int32_t *num_vals, pmix_data_type_t type);
508 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int32(pmix_pointer_array_t *regtypes,
509 pmix_buffer_t *buffer, void *dest,
510 int32_t *num_vals, pmix_data_type_t type);
511 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_datatype(pmix_pointer_array_t *regtypes,
512 pmix_buffer_t *buffer, void *dest,
513 int32_t *num_vals, pmix_data_type_t type);
514 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int64(pmix_pointer_array_t *regtypes,
515 pmix_buffer_t *buffer, void *dest,
516 int32_t *num_vals, pmix_data_type_t type);
517
518 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_float(pmix_pointer_array_t *regtypes,
519 pmix_buffer_t *buffer, void *dest,
520 int32_t *num_vals, pmix_data_type_t type);
521 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_double(pmix_pointer_array_t *regtypes,
522 pmix_buffer_t *buffer, void *dest,
523 int32_t *num_vals, pmix_data_type_t type);
524 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_timeval(pmix_pointer_array_t *regtypes,
525 pmix_buffer_t *buffer, void *dest,
526 int32_t *num_vals, pmix_data_type_t type);
527 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_time(pmix_pointer_array_t *regtypes,
528 pmix_buffer_t *buffer, void *dest,
529 int32_t *num_vals, pmix_data_type_t type);
530 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_status(pmix_pointer_array_t *regtypes,
531 pmix_buffer_t *buffer, void *dest,
532 int32_t *num_vals, pmix_data_type_t type);
533
534 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_val(pmix_pointer_array_t *regtypes,
535 pmix_buffer_t *buffer,
536 pmix_value_t *val);
537 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_value(pmix_pointer_array_t *regtypes,
538 pmix_buffer_t *buffer, void *dest,
539 int32_t *num_vals, pmix_data_type_t type);
540 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_info(pmix_pointer_array_t *regtypes,
541 pmix_buffer_t *buffer, void *dest,
542 int32_t *num_vals, pmix_data_type_t type);
543 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pdata(pmix_pointer_array_t *regtypes,
544 pmix_buffer_t *buffer, void *dest,
545 int32_t *num_vals, pmix_data_type_t type);
546 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_buf(pmix_pointer_array_t *regtypes,
547 pmix_buffer_t *buffer, void *dest,
548 int32_t *num_vals, pmix_data_type_t type);
549 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_proc(pmix_pointer_array_t *regtypes,
550 pmix_buffer_t *buffer, void *dest,
551 int32_t *num_vals, pmix_data_type_t type);
552 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_app(pmix_pointer_array_t *regtypes,
553 pmix_buffer_t *buffer, void *dest,
554 int32_t *num_vals, pmix_data_type_t type);
555 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_kval(pmix_pointer_array_t *regtypes,
556 pmix_buffer_t *buffer, void *dest,
557 int32_t *num_vals, pmix_data_type_t type);
558 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_modex(pmix_pointer_array_t *regtypes,
559 pmix_buffer_t *buffer, void *dest,
560 int32_t *num_vals, pmix_data_type_t type);
561 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_persist(pmix_pointer_array_t *regtypes,
562 pmix_buffer_t *buffer, void *dest,
563 int32_t *num_vals, pmix_data_type_t type);
564 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_bo(pmix_pointer_array_t *regtypes,
565 pmix_buffer_t *buffer, void *dest,
566 int32_t *num_vals, pmix_data_type_t type);
567 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_ptr(pmix_pointer_array_t *regtypes,
568 pmix_buffer_t *buffer, void *dest,
569 int32_t *num_vals, pmix_data_type_t type);
570 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_scope(pmix_pointer_array_t *regtypes,
571 pmix_buffer_t *buffer, void *dest,
572 int32_t *num_vals, pmix_data_type_t type);
573 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_range(pmix_pointer_array_t *regtypes,
574 pmix_buffer_t *buffer, void *dest,
575 int32_t *num_vals, pmix_data_type_t type);
576 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_cmd(pmix_pointer_array_t *regtypes,
577 pmix_buffer_t *buffer, void *dest,
578 int32_t *num_vals, pmix_data_type_t type);
579 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_info_directives(pmix_pointer_array_t *regtypes,
580 pmix_buffer_t *buffer, void *dest,
581 int32_t *num_vals, pmix_data_type_t type);
582 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_datatype(pmix_pointer_array_t *regtypes,
583 pmix_buffer_t *buffer, void *dest,
584 int32_t *num_vals, pmix_data_type_t type);
585 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pstate(pmix_pointer_array_t *regtypes,
586 pmix_buffer_t *buffer, void *dest,
587 int32_t *num_vals, pmix_data_type_t type);
588 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pinfo(pmix_pointer_array_t *regtypes,
589 pmix_buffer_t *buffer, void *dest,
590 int32_t *num_vals, pmix_data_type_t type);
591 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_darray(pmix_pointer_array_t *regtypes,
592 pmix_buffer_t *buffer, void *dest,
593 int32_t *num_vals, pmix_data_type_t type);
594 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_rank(pmix_pointer_array_t *regtypes,
595 pmix_buffer_t *buffer, void *dest,
596 int32_t *num_vals, pmix_data_type_t type);
597 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_query(pmix_pointer_array_t *regtypes,
598 pmix_buffer_t *buffer, void *dest,
599 int32_t *num_vals, pmix_data_type_t type);
600 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_alloc_directive(pmix_pointer_array_t *regtypes,
601 pmix_buffer_t *buffer, void *dest,
602 int32_t *num_vals, pmix_data_type_t type);
603 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_iof_channel(pmix_pointer_array_t *regtypes,
604 pmix_buffer_t *buffer, void *dest,
605 int32_t *num_vals, pmix_data_type_t type);
606 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_envar(pmix_pointer_array_t *regtypes,
607 pmix_buffer_t *buffer, void *dest,
608 int32_t *num_vals, pmix_data_type_t type);
609 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_coord(pmix_pointer_array_t *regtypes,
610 pmix_buffer_t *buffer, void *dest,
611 int32_t *num_vals, pmix_data_type_t type);
612 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_regattr(pmix_pointer_array_t *regtypes,
613 pmix_buffer_t *buffer, void *dest,
614 int32_t *num_vals, pmix_data_type_t type);
615
616 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_array(pmix_pointer_array_t *regtypes,
617 pmix_buffer_t *buffer, void *dest,
618 int32_t *num_vals, pmix_data_type_t type);
619
620
621
622
623 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy(pmix_pointer_array_t *regtypes,
624 void **dest, void *src,
625 pmix_data_type_t type);
626 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_payload(pmix_buffer_t *dest,
627 pmix_buffer_t *src);
628
629 PMIX_EXPORT pmix_status_t pmix_bfrops_base_std_copy(void **dest, void *src,
630 pmix_data_type_t type);
631
632 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_string(char **dest, char *src,
633 pmix_data_type_t type);
634
635 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_value(pmix_value_t **dest,
636 pmix_value_t *src,
637 pmix_data_type_t type);
638 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_proc(pmix_proc_t **dest,
639 pmix_proc_t *src,
640 pmix_data_type_t type);
641 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_app(pmix_app_t **dest,
642 pmix_app_t *src,
643 pmix_data_type_t type);
644 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_info(pmix_info_t **dest,
645 pmix_info_t *src,
646 pmix_data_type_t type);
647 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_buf(pmix_buffer_t **dest,
648 pmix_buffer_t *src,
649 pmix_data_type_t type);
650 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_kval(pmix_kval_t **dest,
651 pmix_kval_t *src,
652 pmix_data_type_t type);
653 PMIX_EXPORT pmix_status_t pmix_bfrop_base_copy_persist(pmix_persistence_t **dest,
654 pmix_persistence_t *src,
655 pmix_data_type_t type);
656 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_bo(pmix_byte_object_t **dest,
657 pmix_byte_object_t *src,
658 pmix_data_type_t type);
659 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_pdata(pmix_pdata_t **dest,
660 pmix_pdata_t *src,
661 pmix_data_type_t type);
662 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_pinfo(pmix_proc_info_t **dest,
663 pmix_proc_info_t *src,
664 pmix_data_type_t type);
665 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_darray(pmix_data_array_t **dest,
666 pmix_data_array_t *src,
667 pmix_data_type_t type);
668 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_query(pmix_query_t **dest,
669 pmix_query_t *src,
670 pmix_data_type_t type);
671 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_envar(pmix_envar_t **dest,
672 pmix_envar_t *src,
673 pmix_data_type_t type);
674 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_coord(pmix_coord_t **dest,
675 pmix_coord_t *src,
676 pmix_data_type_t type);
677 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_regattr(pmix_regattr_t **dest,
678 pmix_regattr_t *src,
679 pmix_data_type_t type);
680
681
682
683
684 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print(pmix_pointer_array_t *regtypes,
685 char **output, char *prefix,
686 void *src, pmix_data_type_t type);
687 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_bool(char **output, char *prefix,
688 bool *src, pmix_data_type_t type);
689 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_byte(char **output, char *prefix,
690 uint8_t *src, pmix_data_type_t type);
691 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_string(char **output, char *prefix,
692 char *src, pmix_data_type_t type);
693 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_size(char **output, char *prefix,
694 size_t *src, pmix_data_type_t type);
695 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pid(char **output, char *prefix,
696 pid_t *src, pmix_data_type_t type);
697
698 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int(char **output, char *prefix,
699 int *src, pmix_data_type_t type);
700 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int8(char **output, char *prefix,
701 int8_t *src, pmix_data_type_t type);
702 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int16(char **output, char *prefix,
703 int16_t *src, pmix_data_type_t type);
704 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int32(char **output, char *prefix,
705 int32_t *src, pmix_data_type_t type);
706 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int64(char **output, char *prefix,
707 int64_t *src, pmix_data_type_t type);
708
709 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint(char **output, char *prefix,
710 uint *src, pmix_data_type_t type);
711 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint8(char **output, char *prefix,
712 uint8_t *src, pmix_data_type_t type);
713 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint16(char **output, char *prefix,
714 uint16_t *src, pmix_data_type_t type);
715 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint32(char **output, char *prefix,
716 uint32_t *src, pmix_data_type_t type);
717 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint64(char **output, char *prefix,
718 uint64_t *src, pmix_data_type_t type);
719
720 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_float(char **output, char *prefix,
721 float *src, pmix_data_type_t type);
722 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_double(char **output, char *prefix,
723 double *src, pmix_data_type_t type);
724
725 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_timeval(char **output, char *prefix,
726 struct timeval *src, pmix_data_type_t type);
727 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_time(char **output, char *prefix,
728 time_t *src, pmix_data_type_t type);
729 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_status(char **output, char *prefix,
730 pmix_status_t *src, pmix_data_type_t type);
731
732 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_value(char **output, char *prefix,
733 pmix_value_t *src, pmix_data_type_t type);
734 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_proc(char **output, char *prefix,
735 pmix_proc_t *src, pmix_data_type_t type);
736 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_app(char **output, char *prefix,
737 pmix_app_t *src, pmix_data_type_t type);
738 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_info(char **output, char *prefix,
739 pmix_info_t *src, pmix_data_type_t type);
740 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_buf(char **output, char *prefix,
741 pmix_buffer_t *src, pmix_data_type_t type);
742 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_kval(char **output, char *prefix,
743 pmix_kval_t *src, pmix_data_type_t type);
744 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_persist(char **output, char *prefix,
745 pmix_persistence_t *src, pmix_data_type_t type);
746 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_bo(char **output, char *prefix,
747 pmix_byte_object_t *src, pmix_data_type_t type);
748 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pdata(char **output, char *prefix,
749 pmix_pdata_t *src, pmix_data_type_t type);
750 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_ptr(char **output, char *prefix,
751 void *src, pmix_data_type_t type);
752 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_scope(char **output, char *prefix,
753 pmix_scope_t *src, pmix_data_type_t type);
754 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_range(char **output, char *prefix,
755 pmix_data_range_t *src, pmix_data_type_t type);
756 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_cmd(char **output, char *prefix,
757 pmix_cmd_t *src, pmix_data_type_t type);
758 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_info_directives(char **output, char *prefix,
759 pmix_info_directives_t *src,
760 pmix_data_type_t type);
761 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_datatype(char **output, char *prefix,
762 pmix_data_type_t *src,
763 pmix_data_type_t type);
764 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pstate(char **output, char *prefix,
765 pmix_proc_state_t *src,
766 pmix_data_type_t type);
767 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pinfo(char **output, char *prefix,
768 pmix_proc_info_t *src,
769 pmix_data_type_t type);
770 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_darray(char **output, char *prefix,
771 pmix_data_array_t *src,
772 pmix_data_type_t type);
773 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_query(char **output, char *prefix,
774 pmix_query_t *src,
775 pmix_data_type_t type);
776 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_rank(char **output, char *prefix,
777 pmix_rank_t *src,
778 pmix_data_type_t type);
779 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_alloc_directive(char **output, char *prefix,
780 pmix_alloc_directive_t *src,
781 pmix_data_type_t type);
782 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_iof_channel(char **output, char *prefix,
783 pmix_iof_channel_t *src,
784 pmix_data_type_t type);
785 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_envar(char **output, char *prefix,
786 pmix_envar_t *src,
787 pmix_data_type_t type);
788 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_coord(char **output, char *prefix,
789 pmix_coord_t *src,
790 pmix_data_type_t type);
791 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_regattr(char **output, char *prefix,
792 pmix_regattr_t *src,
793 pmix_data_type_t type);
794
795
796
797
798
799 PMIX_EXPORT char* pmix_bfrop_buffer_extend(pmix_buffer_t *bptr, size_t bytes_to_add);
800
801 PMIX_EXPORT bool pmix_bfrop_too_small(pmix_buffer_t *buffer, size_t bytes_reqd);
802
803 PMIX_EXPORT pmix_status_t pmix_bfrop_store_data_type(pmix_pointer_array_t *regtypes,
804 pmix_buffer_t *buffer, pmix_data_type_t type);
805
806 PMIX_EXPORT pmix_status_t pmix_bfrop_get_data_type(pmix_pointer_array_t *regtypes,
807 pmix_buffer_t *buffer, pmix_data_type_t *type);
808
809 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_payload(pmix_buffer_t *dest,
810 pmix_buffer_t *src);
811
812 PMIX_EXPORT void pmix_bfrops_base_value_load(pmix_value_t *v, const void *data,
813 pmix_data_type_t type);
814
815 PMIX_EXPORT pmix_status_t pmix_bfrops_base_value_unload(pmix_value_t *kv,
816 void **data,
817 size_t *sz);
818
819 PMIX_EXPORT pmix_status_t pmix_bfrops_base_value_xfer(pmix_value_t *p,
820 const pmix_value_t *src);
821
822 PMIX_EXPORT pmix_value_cmp_t pmix_bfrops_base_value_cmp(pmix_value_t *p,
823 pmix_value_t *p1);
824
825 END_C_DECLS
826
827 #endif