This source file includes following definitions.
- init
- finalize
- register_type
- data_type_string
- pmix12_v2_to_v1_datatype
- pmix12_bfrop_store_data_type
- pmix12_v1_to_v2_datatype
- pmix12_bfrop_get_data_type
- pmix12_bfrop_value_load
- pmix12_bfrop_value_unload
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
27 #include <src/include/pmix_config.h>
28
29 #include "src/mca/bfrops/base/base.h"
30 #include "bfrop_v12.h"
31 #include "internal.h"
32
33 static pmix_status_t init(void);
34 static void finalize(void);
35 static pmix_status_t register_type(const char *name,
36 pmix_data_type_t type,
37 pmix_bfrop_pack_fn_t pack,
38 pmix_bfrop_unpack_fn_t unpack,
39 pmix_bfrop_copy_fn_t copy,
40 pmix_bfrop_print_fn_t print);
41 static const char* data_type_string(pmix_data_type_t type);
42
43 pmix_bfrops_module_t pmix_bfrops_pmix12_module = {
44 .version = "v12",
45 .init = init,
46 .finalize = finalize,
47 .pack = pmix12_bfrop_pack,
48 .unpack = pmix12_bfrop_unpack,
49 .copy = pmix12_bfrop_copy,
50 .print = pmix12_bfrop_print,
51 .copy_payload = pmix12_bfrop_copy_payload,
52 .value_xfer = pmix12_bfrop_value_xfer,
53 .value_load = pmix12_bfrop_value_load,
54 .value_unload = pmix12_bfrop_value_unload,
55 .value_cmp = pmix12_bfrop_value_cmp,
56 .register_type = register_type,
57 .data_type_string = data_type_string
58 };
59
60 static pmix_status_t init(void)
61 {
62
63 PMIX_REGISTER_TYPE("PMIX_BOOL", PMIX_BOOL,
64 pmix12_bfrop_pack_bool,
65 pmix12_bfrop_unpack_bool,
66 pmix12_bfrop_std_copy,
67 pmix12_bfrop_print_bool,
68 &mca_bfrops_v12_component.types);
69
70 PMIX_REGISTER_TYPE("PMIX_BYTE", PMIX_BYTE,
71 pmix12_bfrop_pack_byte,
72 pmix12_bfrop_unpack_byte,
73 pmix12_bfrop_std_copy,
74 pmix12_bfrop_print_byte,
75 &mca_bfrops_v12_component.types);
76
77 PMIX_REGISTER_TYPE("PMIX_STRING", PMIX_STRING,
78 pmix12_bfrop_pack_string,
79 pmix12_bfrop_unpack_string,
80 pmix12_bfrop_copy_string,
81 pmix12_bfrop_print_string,
82 &mca_bfrops_v12_component.types);
83
84
85 PMIX_REGISTER_TYPE("PMIX_SIZE", PMIX_SIZE,
86 pmix12_bfrop_pack_sizet,
87 pmix12_bfrop_unpack_sizet,
88 pmix12_bfrop_std_copy,
89 pmix12_bfrop_print_size,
90 &mca_bfrops_v12_component.types);
91
92 PMIX_REGISTER_TYPE("PMIX_PID", PMIX_PID,
93 pmix12_bfrop_pack_pid,
94 pmix12_bfrop_unpack_pid,
95 pmix12_bfrop_std_copy,
96 pmix12_bfrop_print_pid,
97 &mca_bfrops_v12_component.types);
98
99 PMIX_REGISTER_TYPE("PMIX_INT", PMIX_INT,
100 pmix12_bfrop_pack_int,
101 pmix12_bfrop_unpack_int,
102 pmix12_bfrop_std_copy,
103 pmix12_bfrop_print_int,
104 &mca_bfrops_v12_component.types);
105
106
107 PMIX_REGISTER_TYPE("PMIX_INT8", PMIX_INT8,
108 pmix12_bfrop_pack_byte,
109 pmix12_bfrop_unpack_byte,
110 pmix12_bfrop_std_copy,
111 pmix12_bfrop_print_int8,
112 &mca_bfrops_v12_component.types);
113
114 PMIX_REGISTER_TYPE("PMIX_INT16", PMIX_INT16,
115 pmix12_bfrop_pack_int16,
116 pmix12_bfrop_unpack_int16,
117 pmix12_bfrop_std_copy,
118 pmix12_bfrop_print_int16,
119 &mca_bfrops_v12_component.types);
120
121 PMIX_REGISTER_TYPE("PMIX_INT32", PMIX_INT32,
122 pmix12_bfrop_pack_int32,
123 pmix12_bfrop_unpack_int32,
124 pmix12_bfrop_std_copy,
125 pmix12_bfrop_print_int32,
126 &mca_bfrops_v12_component.types);
127
128 PMIX_REGISTER_TYPE("PMIX_INT64", PMIX_INT64,
129 pmix12_bfrop_pack_int64,
130 pmix12_bfrop_unpack_int64,
131 pmix12_bfrop_std_copy,
132 pmix12_bfrop_print_int64,
133 &mca_bfrops_v12_component.types);
134
135 PMIX_REGISTER_TYPE("PMIX_UINT", PMIX_UINT,
136 pmix12_bfrop_pack_int,
137 pmix12_bfrop_unpack_int,
138 pmix12_bfrop_std_copy,
139 pmix12_bfrop_print_uint,
140 &mca_bfrops_v12_component.types);
141
142 PMIX_REGISTER_TYPE("PMIX_UINT8", PMIX_UINT8,
143 pmix12_bfrop_pack_byte,
144 pmix12_bfrop_unpack_byte,
145 pmix12_bfrop_std_copy,
146 pmix12_bfrop_print_uint8,
147 &mca_bfrops_v12_component.types);
148
149 PMIX_REGISTER_TYPE("PMIX_UINT16", PMIX_UINT16,
150 pmix12_bfrop_pack_int16,
151 pmix12_bfrop_unpack_int16,
152 pmix12_bfrop_std_copy,
153 pmix12_bfrop_print_uint16,
154 &mca_bfrops_v12_component.types);
155
156 PMIX_REGISTER_TYPE("PMIX_UINT32", PMIX_UINT32,
157 pmix12_bfrop_pack_int32,
158 pmix12_bfrop_unpack_int32,
159 pmix12_bfrop_std_copy,
160 pmix12_bfrop_print_uint32,
161 &mca_bfrops_v12_component.types);
162
163 PMIX_REGISTER_TYPE("PMIX_UINT64", PMIX_UINT64,
164 pmix12_bfrop_pack_int64,
165 pmix12_bfrop_unpack_int64,
166 pmix12_bfrop_std_copy,
167 pmix12_bfrop_print_uint64,
168 &mca_bfrops_v12_component.types);
169
170 PMIX_REGISTER_TYPE("PMIX_FLOAT", PMIX_FLOAT,
171 pmix12_bfrop_pack_float,
172 pmix12_bfrop_unpack_float,
173 pmix12_bfrop_std_copy,
174 pmix12_bfrop_print_float,
175 &mca_bfrops_v12_component.types);
176
177 PMIX_REGISTER_TYPE("PMIX_DOUBLE", PMIX_DOUBLE,
178 pmix12_bfrop_pack_double,
179 pmix12_bfrop_unpack_double,
180 pmix12_bfrop_std_copy,
181 pmix12_bfrop_print_double,
182 &mca_bfrops_v12_component.types);
183
184 PMIX_REGISTER_TYPE("PMIX_TIMEVAL", PMIX_TIMEVAL,
185 pmix12_bfrop_pack_timeval,
186 pmix12_bfrop_unpack_timeval,
187 pmix12_bfrop_std_copy,
188 pmix12_bfrop_print_timeval,
189 &mca_bfrops_v12_component.types);
190
191 PMIX_REGISTER_TYPE("PMIX_TIME", PMIX_TIME,
192 pmix12_bfrop_pack_time,
193 pmix12_bfrop_unpack_time,
194 pmix12_bfrop_std_copy,
195 pmix12_bfrop_print_time,
196 &mca_bfrops_v12_component.types);
197
198 PMIX_REGISTER_TYPE("PMIX_STATUS", PMIX_STATUS,
199 pmix12_bfrop_pack_status,
200 pmix12_bfrop_unpack_status,
201 pmix12_bfrop_std_copy,
202 pmix12_bfrop_print_status,
203 &mca_bfrops_v12_component.types);
204
205
206
207 PMIX_REGISTER_TYPE("PMIX_VALUE", PMIX_VALUE,
208 pmix12_bfrop_pack_value,
209 pmix12_bfrop_unpack_value,
210 pmix12_bfrop_copy_value,
211 pmix12_bfrop_print_value,
212 &mca_bfrops_v12_component.types);
213
214 PMIX_REGISTER_TYPE("PMIX_PROC", PMIX_PROC,
215 pmix12_bfrop_pack_proc,
216 pmix12_bfrop_unpack_proc,
217 pmix12_bfrop_copy_proc,
218 pmix12_bfrop_print_proc,
219 &mca_bfrops_v12_component.types);
220
221 PMIX_REGISTER_TYPE("PMIX_APP", PMIX_APP,
222 pmix12_bfrop_pack_app,
223 pmix12_bfrop_unpack_app,
224 pmix12_bfrop_copy_app,
225 pmix12_bfrop_print_app,
226 &mca_bfrops_v12_component.types);
227
228 PMIX_REGISTER_TYPE("PMIX_INFO", PMIX_INFO,
229 pmix12_bfrop_pack_info,
230 pmix12_bfrop_unpack_info,
231 pmix12_bfrop_copy_info,
232 pmix12_bfrop_print_info,
233 &mca_bfrops_v12_component.types);
234
235 PMIX_REGISTER_TYPE("PMIX_PDATA", PMIX_PDATA,
236 pmix12_bfrop_pack_pdata,
237 pmix12_bfrop_unpack_pdata,
238 pmix12_bfrop_copy_pdata,
239 pmix12_bfrop_print_pdata,
240 &mca_bfrops_v12_component.types);
241
242 PMIX_REGISTER_TYPE("PMIX_BUFFER", PMIX_BUFFER,
243 pmix12_bfrop_pack_buf,
244 pmix12_bfrop_unpack_buf,
245 pmix12_bfrop_copy_buf,
246 pmix12_bfrop_print_buf,
247 &mca_bfrops_v12_component.types);
248
249 PMIX_REGISTER_TYPE("PMIX_BYTE_OBJECT", PMIX_BYTE_OBJECT,
250 pmix12_bfrop_pack_bo,
251 pmix12_bfrop_unpack_bo,
252 pmix12_bfrop_copy_bo,
253 pmix12_bfrop_print_bo,
254 &mca_bfrops_v12_component.types);
255
256 PMIX_REGISTER_TYPE("PMIX_KVAL", PMIX_KVAL,
257 pmix12_bfrop_pack_kval,
258 pmix12_bfrop_unpack_kval,
259 pmix12_bfrop_copy_kval,
260 pmix12_bfrop_print_kval,
261 &mca_bfrops_v12_component.types);
262
263 PMIX_REGISTER_TYPE("PMIX_MODEX", PMIX_MODEX,
264 pmix12_bfrop_pack_modex,
265 pmix12_bfrop_unpack_modex,
266 pmix12_bfrop_copy_modex,
267 pmix12_bfrop_print_modex,
268 &mca_bfrops_v12_component.types);
269
270 PMIX_REGISTER_TYPE("PMIX_PERSIST", PMIX_PERSIST,
271 pmix12_bfrop_pack_persist,
272 pmix12_bfrop_unpack_persist,
273 pmix12_bfrop_std_copy,
274 pmix12_bfrop_print_persist,
275 &mca_bfrops_v12_component.types);
276
277 PMIX_REGISTER_TYPE("PMIX_POINTER", PMIX_POINTER,
278 pmix12_bfrop_pack_ptr,
279 pmix12_bfrop_unpack_ptr,
280 pmix12_bfrop_std_copy,
281 pmix12_bfrop_print_ptr,
282 &mca_bfrops_v12_component.types);
283
284 PMIX_REGISTER_TYPE("PMIX_SCOPE", PMIX_SCOPE,
285 pmix12_bfrop_pack_scope,
286 pmix12_bfrop_unpack_scope,
287 pmix12_bfrop_std_copy,
288 pmix12_bfrop_print_scope,
289 &mca_bfrops_v12_component.types);
290
291 PMIX_REGISTER_TYPE("PMIX_DATA_RANGE", PMIX_DATA_RANGE,
292 pmix12_bfrop_pack_range,
293 pmix12_bfrop_unpack_range,
294 pmix12_bfrop_std_copy,
295 pmix12_bfrop_print_ptr,
296 &mca_bfrops_v12_component.types);
297
298 PMIX_REGISTER_TYPE("PMIX_COMMAND", PMIX_COMMAND,
299 pmix12_bfrop_pack_cmd,
300 pmix12_bfrop_unpack_cmd,
301 pmix12_bfrop_std_copy,
302 pmix12_bfrop_print_cmd,
303 &mca_bfrops_v12_component.types);
304
305 PMIX_REGISTER_TYPE("PMIX_INFO_DIRECTIVES", PMIX_INFO_DIRECTIVES,
306 pmix12_bfrop_pack_info_directives,
307 pmix12_bfrop_unpack_info_directives,
308 pmix12_bfrop_std_copy,
309 pmix12_bfrop_print_info_directives,
310 &mca_bfrops_v12_component.types);
311
312 PMIX_REGISTER_TYPE("PMIX_DATA_TYPE", PMIX_DATA_TYPE,
313 pmix12_bfrop_pack_datatype,
314 pmix12_bfrop_unpack_datatype,
315 pmix12_bfrop_std_copy,
316 pmix12_bfrop_print_datatype,
317 &mca_bfrops_v12_component.types);
318
319 PMIX_REGISTER_TYPE("PMIX_PROC_STATE", PMIX_PROC_STATE,
320 pmix12_bfrop_pack_proc_state,
321 pmix12_bfrop_unpack_proc_state,
322 pmix12_bfrop_std_copy,
323 pmix12_bfrop_print_proc_state,
324 &mca_bfrops_v12_component.types);
325
326 PMIX_REGISTER_TYPE("PMIX_PROC_INFO", PMIX_PROC_INFO,
327 pmix12_bfrop_pack_proc_info,
328 pmix12_bfrop_unpack_proc_info,
329 pmix12_bfrop_copy_proc_info,
330 pmix12_bfrop_print_proc_info,
331 &mca_bfrops_v12_component.types);
332
333 PMIX_REGISTER_TYPE("PMIX_DATA_ARRAY", PMIX_DATA_ARRAY,
334 pmix12_bfrop_pack_darray,
335 pmix12_bfrop_unpack_darray,
336 pmix12_bfrop_copy_darray,
337 pmix12_bfrop_print_darray,
338 &mca_bfrops_v12_component.types);
339
340 PMIX_REGISTER_TYPE("PMIX_PROC_RANK", PMIX_PROC_RANK,
341 pmix12_bfrop_pack_rank,
342 pmix12_bfrop_unpack_rank,
343 pmix12_bfrop_std_copy,
344 pmix12_bfrop_print_rank,
345 &mca_bfrops_v12_component.types);
346
347 PMIX_REGISTER_TYPE("PMIX_QUERY", PMIX_QUERY,
348 pmix12_bfrop_pack_query,
349 pmix12_bfrop_unpack_query,
350 pmix12_bfrop_copy_query,
351 pmix12_bfrop_print_query,
352 &mca_bfrops_v12_component.types);
353
354
355 PMIX_REGISTER_TYPE("PMIX_INFO_ARRAY", PMIX_INFO_ARRAY,
356 pmix12_bfrop_pack_array,
357 pmix12_bfrop_unpack_array,
358 pmix12_bfrop_copy_array,
359 pmix12_bfrop_print_array,
360 &mca_bfrops_v12_component.types);
361
362
363
364 return PMIX_SUCCESS;
365 }
366
367 static void finalize(void)
368 {
369 int n;
370 pmix_bfrop_type_info_t *info;
371
372 for (n=0; n < mca_bfrops_v12_component.types.size; n++) {
373 if (NULL != (info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item(&mca_bfrops_v12_component.types, n))) {
374 PMIX_RELEASE(info);
375 pmix_pointer_array_set_item(&mca_bfrops_v12_component.types, n, NULL);
376 }
377 }
378 }
379
380 static pmix_status_t register_type(const char *name, pmix_data_type_t type,
381 pmix_bfrop_pack_fn_t pack,
382 pmix_bfrop_unpack_fn_t unpack,
383 pmix_bfrop_copy_fn_t copy,
384 pmix_bfrop_print_fn_t print)
385 {
386 PMIX_REGISTER_TYPE(name, type,
387 pack, unpack,
388 copy, print,
389 &mca_bfrops_v12_component.types);
390 return PMIX_SUCCESS;
391 }
392
393 static const char* data_type_string(pmix_data_type_t type)
394 {
395 pmix_bfrop_type_info_t *info;
396
397 if (NULL == (info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item(&mca_bfrops_v12_component.types, type))) {
398 return NULL;
399 }
400 return info->odti_name;
401 }
402
403 int pmix12_v2_to_v1_datatype(pmix_data_type_t v2type)
404 {
405 int v1type;
406
407
408
409
410 switch(v2type) {
411 case 20:
412
413 v1type = 6;
414 break;
415
416 case 44:
417
418 v1type = 22;
419 break;
420
421 case 40:
422
423 v1type = 6;
424 break;
425
426 case 39:
427
428 v1type = 22;
429 break;
430
431 case 23:
432 case 24:
433 case 25:
434 case 26:
435 case 27:
436 case 28:
437 case 29:
438 case 30:
439
440 v1type = v2type + 1;
441 break;
442
443 default:
444 v1type = v2type;
445 }
446 return v1type;
447 }
448
449 pmix_status_t pmix12_bfrop_store_data_type(pmix_pointer_array_t *regtypes,
450 pmix_buffer_t *buffer,
451 pmix_data_type_t type)
452 {
453 int v1type;
454
455 v1type = pmix12_v2_to_v1_datatype(type);
456
457 return pmix12_bfrop_pack_datatype(regtypes, buffer, &v1type, 1, PMIX_INT);
458 }
459
460 pmix_data_type_t pmix12_v1_to_v2_datatype(int v1type)
461 {
462 pmix_data_type_t v2type;
463
464
465
466
467
468 switch(v1type) {
469 case 20:
470
471 v2type = PMIX_UNDEF;
472 break;
473
474 case 22:
475
476 v2type = PMIX_INFO_ARRAY;
477 break;
478
479 case 23:
480 case 24:
481 case 25:
482 case 26:
483 case 27:
484 case 28:
485 case 29:
486 case 30:
487 case 31:
488
489 v2type = v1type - 1;
490 break;
491
492 default:
493 v2type = v1type;
494 }
495 return v2type;
496 }
497
498 pmix_status_t pmix12_bfrop_get_data_type(pmix_pointer_array_t *regtypes,
499 pmix_buffer_t *buffer, pmix_data_type_t *type)
500 {
501 int32_t n=1;
502 int v1type;
503 pmix_status_t rc;
504
505 rc = pmix12_bfrop_unpack_datatype(regtypes, buffer, &v1type, &n, PMIX_INT);
506 if (UINT16_MAX < v1type) {
507 *type = 0;
508 return PMIX_ERR_UNKNOWN_DATA_TYPE;
509 }
510 if (PMIX_SUCCESS == rc) {
511 *type = pmix12_v1_to_v2_datatype(v1type);
512 }
513
514 return rc;
515 }
516
517 void pmix12_bfrop_value_load(pmix_value_t *v, const void *data,
518 pmix_data_type_t type)
519 {
520 pmix_byte_object_t *bo;
521
522 v->type = type;
523 if (NULL == data) {
524
525 memset(&v->data, 0, sizeof(v->data));
526 } else {
527 switch(type) {
528 case PMIX_UNDEF:
529 break;
530 case PMIX_BOOL:
531 memcpy(&(v->data.flag), data, 1);
532 break;
533 case PMIX_BYTE:
534 memcpy(&(v->data.byte), data, 1);
535 break;
536 case PMIX_STRING:
537 v->data.string = strdup(data);
538 break;
539 case PMIX_SIZE:
540 memcpy(&(v->data.size), data, sizeof(size_t));
541 break;
542 case PMIX_PID:
543 memcpy(&(v->data.pid), data, sizeof(pid_t));
544 break;
545 case PMIX_INT:
546 memcpy(&(v->data.integer), data, sizeof(int));
547 break;
548 case PMIX_INT8:
549 memcpy(&(v->data.int8), data, 1);
550 break;
551 case PMIX_INT16:
552 memcpy(&(v->data.int16), data, 2);
553 break;
554 case PMIX_INT32:
555 memcpy(&(v->data.int32), data, 4);
556 break;
557 case PMIX_INT64:
558 memcpy(&(v->data.int64), data, 8);
559 break;
560 case PMIX_UINT:
561 memcpy(&(v->data.uint), data, sizeof(int));
562 break;
563 case PMIX_UINT8:
564 memcpy(&(v->data.uint8), data, 1);
565 break;
566 case PMIX_UINT16:
567 memcpy(&(v->data.uint16), data, 2);
568 break;
569 case PMIX_UINT32:
570 memcpy(&(v->data.uint32), data, 4);
571 break;
572 case PMIX_UINT64:
573 memcpy(&(v->data.uint64), data, 8);
574 break;
575 case PMIX_FLOAT:
576 memcpy(&(v->data.fval), data, sizeof(float));
577 break;
578 case PMIX_DOUBLE:
579 memcpy(&(v->data.dval), data, sizeof(double));
580 break;
581 case PMIX_TIMEVAL:
582 memcpy(&(v->data.tv), data, sizeof(struct timeval));
583 break;
584 case PMIX_BYTE_OBJECT:
585 bo = (pmix_byte_object_t*)data;
586 v->data.bo.bytes = bo->bytes;
587 memcpy(&(v->data.bo.size), &bo->size, sizeof(size_t));
588 break;
589 case PMIX_TIME:
590 case PMIX_VALUE:
591 case PMIX_INFO_ARRAY:
592 case PMIX_APP:
593 case PMIX_INFO:
594 case PMIX_PDATA:
595 case PMIX_BUFFER:
596 case PMIX_KVAL:
597 case PMIX_MODEX:
598 case PMIX_PERSIST:
599 case PMIX_PROC:
600
601 break;
602 }
603 }
604 }
605
606 pmix_status_t pmix12_bfrop_value_unload(pmix_value_t *kv,
607 void **data,
608 size_t *sz)
609 {
610 pmix_status_t rc;
611
612 rc = PMIX_SUCCESS;
613 if (NULL == data ||
614 (NULL == *data && PMIX_STRING != kv->type && PMIX_BYTE_OBJECT != kv->type)) {
615 rc = PMIX_ERR_BAD_PARAM;
616 } else {
617 switch(kv->type) {
618 case PMIX_UNDEF:
619 rc = PMIX_ERR_UNKNOWN_DATA_TYPE;
620 break;
621 case PMIX_BOOL:
622 memcpy(*data, &(kv->data.flag), 1);
623 *sz = 1;
624 break;
625 case PMIX_BYTE:
626 memcpy(*data, &(kv->data.byte), 1);
627 *sz = 1;
628 break;
629 case PMIX_STRING:
630 if (NULL != kv->data.string) {
631 *data = strdup(kv->data.string);
632 *sz = strlen(kv->data.string);
633 }
634 break;
635 case PMIX_SIZE:
636 memcpy(*data, &(kv->data.size), sizeof(size_t));
637 *sz = sizeof(size_t);
638 break;
639 case PMIX_PID:
640 memcpy(*data, &(kv->data.pid), sizeof(pid_t));
641 *sz = sizeof(pid_t);
642 break;
643 case PMIX_INT:
644 memcpy(*data, &(kv->data.integer), sizeof(int));
645 *sz = sizeof(int);
646 break;
647 case PMIX_INT8:
648 memcpy(*data, &(kv->data.int8), 1);
649 *sz = 1;
650 break;
651 case PMIX_INT16:
652 memcpy(*data, &(kv->data.int16), 2);
653 *sz = 2;
654 break;
655 case PMIX_INT32:
656 memcpy(*data, &(kv->data.int32), 4);
657 *sz = 4;
658 break;
659 case PMIX_INT64:
660 memcpy(*data, &(kv->data.int64), 8);
661 *sz = 8;
662 break;
663 case PMIX_UINT:
664 memcpy(*data, &(kv->data.uint), sizeof(int));
665 *sz = sizeof(int);
666 break;
667 case PMIX_UINT8:
668 memcpy(*data, &(kv->data.uint8), 1);
669 *sz = 1;
670 break;
671 case PMIX_UINT16:
672 memcpy(*data, &(kv->data.uint16), 2);
673 *sz = 2;
674 break;
675 case PMIX_UINT32:
676 memcpy(*data, &(kv->data.uint32), 4);
677 *sz = 4;
678 break;
679 case PMIX_UINT64:
680 memcpy(*data, &(kv->data.uint64), 8);
681 *sz = 8;
682 break;
683 case PMIX_FLOAT:
684 memcpy(*data, &(kv->data.fval), sizeof(float));
685 *sz = sizeof(float);
686 break;
687 case PMIX_DOUBLE:
688 memcpy(*data, &(kv->data.dval), sizeof(double));
689 *sz = sizeof(double);
690 break;
691 case PMIX_TIMEVAL:
692 memcpy(*data, &(kv->data.tv), sizeof(struct timeval));
693 *sz = sizeof(struct timeval);
694 break;
695 case PMIX_BYTE_OBJECT:
696 if (NULL != kv->data.bo.bytes && 0 < kv->data.bo.size) {
697 *data = kv->data.bo.bytes;
698 *sz = kv->data.bo.size;
699 } else {
700 *data = NULL;
701 *sz = 0;
702 }
703 break;
704 case PMIX_TIME:
705 case PMIX_VALUE:
706 case PMIX_INFO_ARRAY:
707 case PMIX_APP:
708 case PMIX_INFO:
709 case PMIX_PDATA:
710 case PMIX_BUFFER:
711 case PMIX_KVAL:
712 case PMIX_MODEX:
713 case PMIX_PERSIST:
714 case PMIX_PROC:
715
716 rc = PMIX_ERROR;
717 break;
718 }
719 }
720 return rc;
721 }