Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 10:12:51

0001 /* -*- C -*-
0002  *
0003  * Copyright (c) 2004-2007 The Trustees of Indiana University and Indiana
0004  *                         University Research and Technology
0005  *                         Corporation.  All rights reserved.
0006  * Copyright (c) 2004-2006 The University of Tennessee and The University
0007  *                         of Tennessee Research Foundation.  All rights
0008  *                         reserved.
0009  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
0010  *                         University of Stuttgart.  All rights reserved.
0011  * Copyright (c) 2004-2005 The Regents of the University of California.
0012  *                         All rights reserved.
0013  * Copyright (c) 2012      Los Alamos National Security, Inc.  All rights reserved.
0014  * Copyright (c) 2014-2020 Intel, Inc.  All rights reserved.
0015  * Copyright (c) 2015-2020 Research Organization for Information Science
0016  *                         and Technology (RIST).  All rights reserved.
0017  * Copyright (c) 2019      Mellanox Technologies, Inc.
0018  *                         All rights reserved.
0019  * Copyright (c) 2021-2024 Nanook Consulting  All rights reserved.
0020  * $COPYRIGHT$
0021  *
0022  * Additional copyrights may follow
0023  *
0024  * $HEADER$
0025  *
0026  */
0027 #ifndef PMIX_BFROP_BASE_H_
0028 #define PMIX_BFROP_BASE_H_
0029 
0030 #include "src/include/pmix_config.h"
0031 
0032 #ifdef HAVE_SYS_TIME_H
0033 #    include <sys/time.h> /* for struct timeval */
0034 #endif
0035 #ifdef HAVE_STRING_H
0036 #    include <string.h>
0037 #endif
0038 
0039 #include "src/class/pmix_pointer_array.h"
0040 #include "src/include/pmix_globals.h"
0041 #include "src/mca/base/pmix_mca_base_framework.h"
0042 #include "src/mca/bfrops/bfrops.h"
0043 #include "src/mca/mca.h"
0044 
0045 BEGIN_C_DECLS
0046 
0047 /*
0048  * MCA Framework
0049  */
0050 PMIX_EXPORT extern pmix_mca_base_framework_t pmix_bfrops_base_framework;
0051 /**
0052  * BFROP select function
0053  *
0054  * Cycle across available components and construct the list
0055  * of active modules
0056  */
0057 PMIX_EXPORT pmix_status_t pmix_bfrop_base_select(void);
0058 
0059 /**
0060  * Track an active component / module
0061  */
0062 struct pmix_bfrops_base_active_module_t {
0063     pmix_list_item_t super;
0064     pmix_status_t pri;
0065     pmix_bfrops_module_t *module;
0066     pmix_bfrops_base_component_t *component;
0067 };
0068 typedef struct pmix_bfrops_base_active_module_t pmix_bfrops_base_active_module_t;
0069 PMIX_CLASS_DECLARATION(pmix_bfrops_base_active_module_t);
0070 
0071 /* framework globals */
0072 struct pmix_bfrops_globals_t {
0073     pmix_list_t actives;
0074     bool initialized;
0075     bool selected;
0076     size_t initial_size;
0077     size_t threshold_size;
0078     pmix_bfrop_buffer_type_t default_type;
0079 };
0080 typedef struct pmix_bfrops_globals_t pmix_bfrops_globals_t;
0081 
0082 PMIX_EXPORT extern pmix_bfrops_globals_t pmix_bfrops_globals;
0083 
0084 /*
0085  * The default starting chunk size
0086  */
0087 #define PMIX_BFROP_DEFAULT_INITIAL_SIZE 128
0088 /*
0089  * The default threshold size when we switch from doubling the
0090  * buffer size to additively increasing it
0091  */
0092 #define PMIX_BFROP_DEFAULT_THRESHOLD_SIZE 1024
0093 
0094 /*
0095  * Internal type corresponding to size_t.  Do not use this in
0096  * interface calls - use PMIX_SIZE instead.
0097  */
0098 #if SIZEOF_SIZE_T == 1
0099 #    define BFROP_TYPE_SIZE_T PMIX_UINT8
0100 #elif SIZEOF_SIZE_T == 2
0101 #    define BFROP_TYPE_SIZE_T PMIX_UINT16
0102 #elif SIZEOF_SIZE_T == 4
0103 #    define BFROP_TYPE_SIZE_T PMIX_UINT32
0104 #elif SIZEOF_SIZE_T == 8
0105 #    define BFROP_TYPE_SIZE_T PMIX_UINT64
0106 #else
0107 #    error Unsupported size_t size!
0108 #endif
0109 
0110 /*
0111  * Internal type corresponding to bool.  Do not use this in interface
0112  * calls - use PMIX_BOOL instead.
0113  */
0114 #if SIZEOF__BOOL == 1
0115 #    define BFROP_TYPE_BOOL PMIX_UINT8
0116 #elif SIZEOF__BOOL == 2
0117 #    define BFROP_TYPE_BOOL PMIX_UINT16
0118 #elif SIZEOF__BOOL == 4
0119 #    define BFROP_TYPE_BOOL PMIX_UINT32
0120 #elif SIZEOF__BOOL == 8
0121 #    define BFROP_TYPE_BOOL PMIX_UINT64
0122 #else
0123 #    error Unsupported bool size!
0124 #endif
0125 
0126 /*
0127  * Internal type corresponding to int and unsigned int.  Do not use
0128  * this in interface calls - use PMIX_INT / PMIX_UINT instead.
0129  */
0130 #if SIZEOF_INT == 1
0131 #    define BFROP_TYPE_INT  PMIX_INT8
0132 #    define BFROP_TYPE_UINT PMIX_UINT8
0133 #elif SIZEOF_INT == 2
0134 #    define BFROP_TYPE_INT  PMIX_INT16
0135 #    define BFROP_TYPE_UINT PMIX_UINT16
0136 #elif SIZEOF_INT == 4
0137 #    define BFROP_TYPE_INT  PMIX_INT32
0138 #    define BFROP_TYPE_UINT PMIX_UINT32
0139 #elif SIZEOF_INT == 8
0140 #    define BFROP_TYPE_INT  PMIX_INT64
0141 #    define BFROP_TYPE_UINT PMIX_UINT64
0142 #else
0143 #    error Unsupported INT size!
0144 #endif
0145 
0146 /*
0147  * Internal type corresponding to pid_t.  Do not use this in interface
0148  * calls - use PMIX_PID instead.
0149  */
0150 #if SIZEOF_PID_T == 1
0151 #    define BFROP_TYPE_PID_T PMIX_UINT8
0152 #elif SIZEOF_PID_T == 2
0153 #    define BFROP_TYPE_PID_T PMIX_UINT16
0154 #elif SIZEOF_PID_T == 4
0155 #    define BFROP_TYPE_PID_T PMIX_UINT32
0156 #elif SIZEOF_PID_T == 8
0157 #    define BFROP_TYPE_PID_T PMIX_UINT64
0158 #else
0159 #    error Unsupported pid_t size!
0160 #endif
0161 
0162 /* Unpack generic size macros */
0163 #define PMIX_BFROP_UNPACK_SIZE_MISMATCH(reg_types, unpack_type, remote_type, ret)                 \
0164     do {                                                                                          \
0165         switch (remote_type) {                                                                    \
0166         case PMIX_UINT8:                                                                          \
0167             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint8_t, remote_type);  \
0168             break;                                                                                \
0169         case PMIX_INT8:                                                                           \
0170             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int8_t, remote_type);   \
0171             break;                                                                                \
0172         case PMIX_UINT16:                                                                         \
0173             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint16_t, remote_type); \
0174             break;                                                                                \
0175         case PMIX_INT16:                                                                          \
0176             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int16_t, remote_type);  \
0177             break;                                                                                \
0178         case PMIX_UINT32:                                                                         \
0179             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint32_t, remote_type); \
0180             break;                                                                                \
0181         case PMIX_INT32:                                                                          \
0182             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int32_t, remote_type);  \
0183             break;                                                                                \
0184         case PMIX_UINT64:                                                                         \
0185             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, uint64_t, remote_type); \
0186             break;                                                                                \
0187         case PMIX_INT64:                                                                          \
0188             PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, int64_t, remote_type);  \
0189             break;                                                                                \
0190         default:                                                                                  \
0191             ret = PMIX_ERR_NOT_FOUND;                                                             \
0192         }                                                                                         \
0193     } while (0)
0194 
0195 #define PMIX_BFROPS_PACK_TYPE(r, b, s, n, t, arr)                                    \
0196     do {                                                                             \
0197         pmix_bfrop_type_info_t *__info;                                              \
0198         /* Lookup the pack function for this type and call it */                     \
0199         __info = (pmix_bfrop_type_info_t *) pmix_pointer_array_get_item((arr), (t)); \
0200         if (NULL == __info) {                                                        \
0201             (r) = PMIX_ERR_UNKNOWN_DATA_TYPE;                                        \
0202         } else {                                                                     \
0203             (r) = __info->odti_pack_fn(arr, b, s, n, t);                             \
0204         }                                                                            \
0205     } while (0)
0206 
0207 #define PMIX_BFROPS_UNPACK_TYPE(r, b, d, n, t, arr)                                  \
0208     do {                                                                             \
0209         pmix_bfrop_type_info_t *__info;                                              \
0210         /* Lookup the unpack function for this type and call it */                   \
0211         __info = (pmix_bfrop_type_info_t *) pmix_pointer_array_get_item((arr), (t)); \
0212         if (NULL == __info) {                                                        \
0213             (r) = PMIX_ERR_UNKNOWN_DATA_TYPE;                                        \
0214         } else {                                                                     \
0215             (r) = __info->odti_unpack_fn(arr, b, d, n, t);                           \
0216         }                                                                            \
0217     } while (0)
0218 
0219 /* NOTE: do not need to deal with endianness here, as the unpacking of
0220    the underling sender-side type will do that for us.  Repeat: the
0221    data in tmpbuf[] is already in host byte order. */
0222 #define PMIX_BFROP_UNPACK_SIZE_MISMATCH_FOUND(reg_types, unpack_type, tmptype, tmpbfroptype) \
0223     do {                                                                                     \
0224         int32_t i;                                                                           \
0225         tmptype *tmpbuf = (tmptype *) calloc(*num_vals, sizeof(tmptype));                    \
0226         PMIX_BFROPS_UNPACK_TYPE(ret, buffer, tmpbuf, num_vals, tmpbfroptype, reg_types);     \
0227         if (PMIX_ERR_UNKNOWN_DATA_TYPE != ret) {                                             \
0228             for (i = 0; i < *num_vals; ++i) {                                                \
0229                 ((unpack_type *) dest)[i] = (unpack_type)(tmpbuf[i]);                        \
0230             }                                                                                \
0231         }                                                                                    \
0232         free(tmpbuf);                                                                        \
0233     } while (0)
0234 
0235 /* for backwards compatibility */
0236 typedef struct pmix_info_array {
0237     size_t size;
0238     pmix_info_t *array;
0239 } pmix_info_array_t;
0240 
0241 typedef pmix_status_t (*pmix_bfrop_internal_pack_fn_t)(pmix_pointer_array_t *regtypes,
0242                                                        pmix_buffer_t *buffer, const void *src,
0243                                                        int32_t num_values, pmix_data_type_t type);
0244 
0245 typedef pmix_status_t (*pmix_bfrop_internal_unpack_fn_t)(pmix_pointer_array_t *regtypes,
0246                                                          pmix_buffer_t *buffer, void *dest,
0247                                                          int32_t *max_num_values,
0248                                                          pmix_data_type_t type);
0249 
0250 /**
0251  * Internal struct used for holding registered bfrop functions
0252  */
0253 typedef struct {
0254     pmix_object_t super;
0255     /* type identifier */
0256     pmix_data_type_t odti_type;
0257     /** Debugging string name */
0258     char *odti_name;
0259     /** Pack function */
0260     pmix_bfrop_internal_pack_fn_t odti_pack_fn;
0261     /** Unpack function */
0262     pmix_bfrop_internal_unpack_fn_t odti_unpack_fn;
0263     /** copy function */
0264     pmix_bfrop_copy_fn_t odti_copy_fn;
0265     /** prpmix_status_t function */
0266     pmix_bfrop_print_fn_t odti_print_fn;
0267 } pmix_bfrop_type_info_t;
0268 PMIX_EXPORT PMIX_CLASS_DECLARATION(pmix_bfrop_type_info_t);
0269 
0270 /* macro for registering data types - overwrite an existing
0271  * duplicate one based on type name */
0272 #define PMIX_REGISTER_TYPE(n, t, p, u, c, pr, arr)                    \
0273     do {                                                              \
0274         pmix_bfrop_type_info_t *_info;                                \
0275         _info = PMIX_NEW(pmix_bfrop_type_info_t);                     \
0276         _info->odti_name = strdup((n));                               \
0277         _info->odti_type = (t);                                       \
0278         _info->odti_pack_fn = (pmix_bfrop_internal_pack_fn_t)(p);     \
0279         _info->odti_unpack_fn = (pmix_bfrop_internal_unpack_fn_t)(u); \
0280         _info->odti_copy_fn = (pmix_bfrop_copy_fn_t)(c);              \
0281         _info->odti_print_fn = (pmix_bfrop_print_fn_t)(pr);           \
0282         pmix_pointer_array_set_item((arr), (t), _info);               \
0283     } while (0)
0284 
0285 /* API Stub functions */
0286 PMIX_EXPORT char *pmix_bfrops_stub_get_available_modules(void);
0287 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_assign_module(struct pmix_peer_t *peer,
0288                                                          const char *version);
0289 PMIX_EXPORT pmix_buffer_t *pmix_bfrops_stub_create_buffer(struct pmix_peer_t *pr);
0290 PMIX_EXPORT void pmix_bfrops_construct_buffer(struct pmix_peer_t *pr, pmix_buffer_t *buf);
0291 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_pack(struct pmix_peer_t *peer, pmix_buffer_t *buffer,
0292                                                 const void *src, int32_t num_values,
0293                                                 pmix_data_type_t type);
0294 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_unpack(struct pmix_peer_t *peer, pmix_buffer_t *buffer,
0295                                                   void *dest, int32_t *max_num_values,
0296                                                   pmix_data_type_t type);
0297 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_copy(struct pmix_peer_t *peer, void **dest, void *src,
0298                                                 pmix_data_type_t type);
0299 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_print(struct pmix_peer_t *peer, char **output,
0300                                                  char *prefix, void *src, pmix_data_type_t type);
0301 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_copy_payload(struct pmix_peer_t *peer,
0302                                                         pmix_buffer_t *dest, pmix_buffer_t *src);
0303 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_value_xfer(struct pmix_peer_t *peer, pmix_value_t *dest,
0304                                                       const pmix_value_t *src);
0305 PMIX_EXPORT void pmix_bfrops_stub_value_load(struct pmix_peer_t *peer, pmix_value_t *v, void *data,
0306                                              pmix_data_type_t type);
0307 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_value_unload(struct pmix_peer_t *peer, pmix_value_t *kv,
0308                                                         void **data, size_t *sz);
0309 PMIX_EXPORT pmix_value_cmp_t pmix_bfrops_stub_value_cmp(struct pmix_peer_t *peer, pmix_value_t *p1,
0310                                                         pmix_value_t *p2);
0311 PMIX_EXPORT pmix_status_t pmix_bfrops_stub_register_type(
0312     struct pmix_peer_t *peer, const char *name, pmix_data_type_t type, pmix_bfrop_pack_fn_t pack,
0313     pmix_bfrop_unpack_fn_t unpack, pmix_bfrop_copy_fn_t copy, pmix_bfrop_print_fn_t print);
0314 
0315 /* data type string function */
0316 PMIX_EXPORT const char *pmix_bfrops_base_data_type_string(pmix_pointer_array_t *regtypes,
0317                                                           pmix_data_type_t type);
0318 
0319 /*
0320  * "Standard" pack functions
0321  */
0322 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack(pmix_pointer_array_t *regtypes,
0323                                                 pmix_buffer_t *buffer, const void *src,
0324                                                 int num_vals, pmix_data_type_t type);
0325 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_buffer(pmix_pointer_array_t *regtypes,
0326                                                        pmix_buffer_t *buffer, const void *src,
0327                                                        int32_t num_vals, pmix_data_type_t type);
0328 
0329 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_bool(pmix_pointer_array_t *regtypes,
0330                                                      pmix_buffer_t *buffer, const void *src,
0331                                                      int32_t num_vals, pmix_data_type_t type);
0332 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int(pmix_pointer_array_t *regtypes,
0333                                                     pmix_buffer_t *buffer, const void *src,
0334                                                     int32_t num_vals, pmix_data_type_t type);
0335 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_sizet(pmix_pointer_array_t *regtypes,
0336                                                       pmix_buffer_t *buffer, const void *src,
0337                                                       int32_t num_vals, pmix_data_type_t type);
0338 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_byte(pmix_pointer_array_t *regtypes,
0339                                                      pmix_buffer_t *buffer, const void *src,
0340                                                      int32_t num_vals, pmix_data_type_t type);
0341 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_string(pmix_pointer_array_t *regtypes,
0342                                                        pmix_buffer_t *buffer, const void *src,
0343                                                        int32_t num_vals, pmix_data_type_t type);
0344 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pid(pmix_pointer_array_t *regtypes,
0345                                                     pmix_buffer_t *buffer, const void *src,
0346                                                     int32_t num_vals, pmix_data_type_t type);
0347 
0348 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int16(pmix_pointer_array_t *regtypes,
0349                                                       pmix_buffer_t *buffer, const void *src,
0350                                                       int32_t num_vals, pmix_data_type_t type);
0351 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int32(pmix_pointer_array_t *regtypes,
0352                                                       pmix_buffer_t *buffer, const void *src,
0353                                                       int32_t num_vals, pmix_data_type_t type);
0354 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_int64(pmix_pointer_array_t *regtypes,
0355                                                       pmix_buffer_t *buffer, const void *src,
0356                                                       int32_t num_vals, pmix_data_type_t type);
0357 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_string(pmix_pointer_array_t *regtypes,
0358                                                        pmix_buffer_t *buffer, const void *src,
0359                                                        int32_t num_vals, pmix_data_type_t type);
0360 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_float(pmix_pointer_array_t *regtypes,
0361                                                       pmix_buffer_t *buffer, const void *src,
0362                                                       int32_t num_vals, pmix_data_type_t type);
0363 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_double(pmix_pointer_array_t *regtypes,
0364                                                        pmix_buffer_t *buffer, const void *src,
0365                                                        int32_t num_vals, pmix_data_type_t type);
0366 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_timeval(pmix_pointer_array_t *regtypes,
0367                                                         pmix_buffer_t *buffer, const void *src,
0368                                                         int32_t num_vals, pmix_data_type_t type);
0369 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_time(pmix_pointer_array_t *regtypes,
0370                                                      pmix_buffer_t *buffer, const void *src,
0371                                                      int32_t num_vals, pmix_data_type_t type);
0372 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_status(pmix_pointer_array_t *regtypes,
0373                                                        pmix_buffer_t *buffer, const void *src,
0374                                                        int32_t num_vals, pmix_data_type_t type);
0375 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_buf(pmix_pointer_array_t *regtypes,
0376                                                     pmix_buffer_t *buffer, const void *src,
0377                                                     int32_t num_vals, pmix_data_type_t type);
0378 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_bo(pmix_pointer_array_t *regtypes,
0379                                                    pmix_buffer_t *buffer, const void *src,
0380                                                    int32_t num_vals, pmix_data_type_t type);
0381 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_proc(pmix_pointer_array_t *regtypes,
0382                                                      pmix_buffer_t *buffer, const void *src,
0383                                                      int32_t num_vals, pmix_data_type_t type);
0384 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_value(pmix_pointer_array_t *regtypes,
0385                                                       pmix_buffer_t *buffer, const void *src,
0386                                                       int32_t num_vals, pmix_data_type_t type);
0387 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_info(pmix_pointer_array_t *regtypes,
0388                                                      pmix_buffer_t *buffer, const void *src,
0389                                                      int32_t num_vals, pmix_data_type_t type);
0390 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pdata(pmix_pointer_array_t *regtypes,
0391                                                       pmix_buffer_t *buffer, const void *src,
0392                                                       int32_t num_vals, pmix_data_type_t type);
0393 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_app(pmix_pointer_array_t *regtypes,
0394                                                     pmix_buffer_t *buffer, const void *src,
0395                                                     int32_t num_vals, pmix_data_type_t type);
0396 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_kval(pmix_pointer_array_t *regtypes,
0397                                                      pmix_buffer_t *buffer, const void *src,
0398                                                      int32_t num_vals, pmix_data_type_t type);
0399 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_array(pmix_pointer_array_t *regtypes,
0400                                                       pmix_buffer_t *buffer, const void *src,
0401                                                       int32_t num_vals, pmix_data_type_t type);
0402 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_modex(pmix_buffer_t *buffer, const void *src,
0403                                                       int32_t num_vals, pmix_data_type_t type);
0404 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_persist(pmix_pointer_array_t *regtypes,
0405                                                         pmix_buffer_t *buffer, const void *src,
0406                                                         int32_t num_vals, pmix_data_type_t type);
0407 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_datatype(pmix_pointer_array_t *regtypes,
0408                                                          pmix_buffer_t *buffer, const void *src,
0409                                                          int32_t num_vals, pmix_data_type_t type);
0410 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_ptr(pmix_pointer_array_t *regtypes,
0411                                                     pmix_buffer_t *buffer, const void *src,
0412                                                     int32_t num_vals, pmix_data_type_t type);
0413 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_scope(pmix_pointer_array_t *regtypes,
0414                                                       pmix_buffer_t *buffer, const void *src,
0415                                                       int32_t num_vals, pmix_data_type_t type);
0416 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_range(pmix_pointer_array_t *regtypes,
0417                                                       pmix_buffer_t *buffer, const void *src,
0418                                                       int32_t num_vals, pmix_data_type_t type);
0419 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_cmd(pmix_pointer_array_t *regtypes,
0420                                                     pmix_buffer_t *buffer, const void *src,
0421                                                     int32_t num_vals, pmix_data_type_t type);
0422 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_info_directives(pmix_pointer_array_t *regtypes,
0423                                                                 pmix_buffer_t *buffer,
0424                                                                 const void *src, int32_t num_vals,
0425                                                                 pmix_data_type_t type);
0426 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pstate(pmix_pointer_array_t *regtypes,
0427                                                        pmix_buffer_t *buffer, const void *src,
0428                                                        int32_t num_vals, pmix_data_type_t type);
0429 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pinfo(pmix_pointer_array_t *regtypes,
0430                                                       pmix_buffer_t *buffer, const void *src,
0431                                                       int32_t num_vals, pmix_data_type_t type);
0432 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_darray(pmix_pointer_array_t *regtypes,
0433                                                        pmix_buffer_t *buffer, const void *src,
0434                                                        int32_t num_vals, pmix_data_type_t type);
0435 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_rank(pmix_pointer_array_t *regtypes,
0436                                                      pmix_buffer_t *buffer, const void *src,
0437                                                      int32_t num_vals, pmix_data_type_t type);
0438 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_query(pmix_pointer_array_t *regtypes,
0439                                                       pmix_buffer_t *buffer, const void *src,
0440                                                       int32_t num_vals, pmix_data_type_t type);
0441 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_val(pmix_pointer_array_t *regtypes,
0442                                                     pmix_buffer_t *buffer, pmix_value_t *p);
0443 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_alloc_directive(pmix_pointer_array_t *regtypes,
0444                                                                 pmix_buffer_t *buffer,
0445                                                                 const void *src, int32_t num_vals,
0446                                                                 pmix_data_type_t type);
0447 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_iof_channel(pmix_pointer_array_t *regtypes,
0448                                                             pmix_buffer_t *buffer, const void *src,
0449                                                             int32_t num_vals,
0450                                                             pmix_data_type_t type);
0451 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_envar(pmix_pointer_array_t *regtypes,
0452                                                       pmix_buffer_t *buffer, const void *src,
0453                                                       int32_t num_vals, pmix_data_type_t type);
0454 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_coord(pmix_pointer_array_t *regtypes,
0455                                                       pmix_buffer_t *buffer, const void *src,
0456                                                       int32_t num_vals, pmix_data_type_t type);
0457 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_regattr(pmix_pointer_array_t *regtypes,
0458                                                         pmix_buffer_t *buffer, const void *src,
0459                                                         int32_t num_vals, pmix_data_type_t type);
0460 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_regex(pmix_pointer_array_t *regtypes,
0461                                                       pmix_buffer_t *buffer, const void *src,
0462                                                       int32_t num_vals, pmix_data_type_t type);
0463 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_jobstate(pmix_pointer_array_t *regtypes,
0464                                                          pmix_buffer_t *buffer, const void *src,
0465                                                          int32_t num_vals, pmix_data_type_t type);
0466 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_linkstate(pmix_pointer_array_t *regtypes,
0467                                                           pmix_buffer_t *buffer, const void *src,
0468                                                           int32_t num_vals, pmix_data_type_t type);
0469 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_cpuset(pmix_pointer_array_t *regtypes,
0470                                                        pmix_buffer_t *buffer, const void *src,
0471                                                        int32_t num_vals, pmix_data_type_t type);
0472 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_geometry(pmix_pointer_array_t *regtypes,
0473                                                          pmix_buffer_t *buffer, const void *src,
0474                                                          int32_t num_vals, pmix_data_type_t type);
0475 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_devdist(pmix_pointer_array_t *regtypes,
0476                                                         pmix_buffer_t *buffer, const void *src,
0477                                                         int32_t num_vals, pmix_data_type_t type);
0478 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_endpoint(pmix_pointer_array_t *regtypes,
0479                                                          pmix_buffer_t *buffer, const void *src,
0480                                                          int32_t num_vals, pmix_data_type_t type);
0481 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_topology(pmix_pointer_array_t *regtypes,
0482                                                          pmix_buffer_t *buffer, const void *src,
0483                                                          int32_t num_vals, pmix_data_type_t type);
0484 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_devtype(pmix_pointer_array_t *regtypes,
0485                                                         pmix_buffer_t *buffer, const void *src,
0486                                                         int32_t num_vals, pmix_data_type_t type);
0487 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_locality(pmix_pointer_array_t *regtypes,
0488                                                          pmix_buffer_t *buffer, const void *src,
0489                                                          int32_t num_vals, pmix_data_type_t type);
0490 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_nspace(pmix_pointer_array_t *regtypes,
0491                                                        pmix_buffer_t *buffer, const void *src,
0492                                                        int32_t num_vals, pmix_data_type_t type);
0493 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_pstats(pmix_pointer_array_t *regtypes,
0494                                                        pmix_buffer_t *buffer, const void *src,
0495                                                        int32_t num_vals, pmix_data_type_t type);
0496 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_dkstats(pmix_pointer_array_t *regtypes,
0497                                                         pmix_buffer_t *buffer, const void *src,
0498                                                         int32_t num_vals, pmix_data_type_t type);
0499 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_netstats(pmix_pointer_array_t *regtypes,
0500                                                          pmix_buffer_t *buffer, const void *src,
0501                                                          int32_t num_vals, pmix_data_type_t type);
0502 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_ndstats(pmix_pointer_array_t *regtypes,
0503                                                         pmix_buffer_t *buffer, const void *src,
0504                                                         int32_t num_vals, pmix_data_type_t type);
0505 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_dbuf(pmix_pointer_array_t *regtypes,
0506                                                      pmix_buffer_t *buffer, const void *src,
0507                                                      int32_t num_vals, pmix_data_type_t type);
0508 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_smed(pmix_pointer_array_t *regtypes,
0509                                                      pmix_buffer_t *buffer, const void *src,
0510                                                      int32_t num_vals, pmix_data_type_t type);
0511 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_sacc(pmix_pointer_array_t *regtypes,
0512                                                      pmix_buffer_t *buffer, const void *src,
0513                                                      int32_t num_vals, pmix_data_type_t type);
0514 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_spers(pmix_pointer_array_t *regtypes,
0515                                                       pmix_buffer_t *buffer, const void *src,
0516                                                       int32_t num_vals, pmix_data_type_t type);
0517 PMIX_EXPORT pmix_status_t pmix_bfrops_base_pack_satyp(pmix_pointer_array_t *regtypes,
0518                                                       pmix_buffer_t *buffer, const void *src,
0519                                                       int32_t num_vals, pmix_data_type_t type);
0520 
0521 /*
0522  * "Standard" unpack functions
0523  */
0524 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack(pmix_pointer_array_t *regtypes,
0525                                                   pmix_buffer_t *buffer, void *dst,
0526                                                   int32_t *num_vals, pmix_data_type_t type);
0527 
0528 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_bool(pmix_pointer_array_t *regtypes,
0529                                                        pmix_buffer_t *buffer, void *dest,
0530                                                        int32_t *num_vals, pmix_data_type_t type);
0531 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_byte(pmix_pointer_array_t *regtypes,
0532                                                        pmix_buffer_t *buffer, void *dest,
0533                                                        int32_t *num_vals, pmix_data_type_t type);
0534 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_string(pmix_pointer_array_t *regtypes,
0535                                                          pmix_buffer_t *buffer, void *dest,
0536                                                          int32_t *num_vals, pmix_data_type_t type);
0537 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int(pmix_pointer_array_t *regtypes,
0538                                                       pmix_buffer_t *buffer, void *dest,
0539                                                       int32_t *num_vals, pmix_data_type_t type);
0540 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_sizet(pmix_pointer_array_t *regtypes,
0541                                                         pmix_buffer_t *buffer, void *dest,
0542                                                         int32_t *num_vals, pmix_data_type_t type);
0543 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pid(pmix_pointer_array_t *regtypes,
0544                                                       pmix_buffer_t *buffer, void *dest,
0545                                                       int32_t *num_vals, pmix_data_type_t type);
0546 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int16(pmix_pointer_array_t *regtypes,
0547                                                         pmix_buffer_t *buffer, void *dest,
0548                                                         int32_t *num_vals, pmix_data_type_t type);
0549 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int32(pmix_pointer_array_t *regtypes,
0550                                                         pmix_buffer_t *buffer, void *dest,
0551                                                         int32_t *num_vals, pmix_data_type_t type);
0552 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_datatype(pmix_pointer_array_t *regtypes,
0553                                                            pmix_buffer_t *buffer, void *dest,
0554                                                            int32_t *num_vals,
0555                                                            pmix_data_type_t type);
0556 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_int64(pmix_pointer_array_t *regtypes,
0557                                                         pmix_buffer_t *buffer, void *dest,
0558                                                         int32_t *num_vals, pmix_data_type_t type);
0559 
0560 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_float(pmix_pointer_array_t *regtypes,
0561                                                         pmix_buffer_t *buffer, void *dest,
0562                                                         int32_t *num_vals, pmix_data_type_t type);
0563 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_double(pmix_pointer_array_t *regtypes,
0564                                                          pmix_buffer_t *buffer, void *dest,
0565                                                          int32_t *num_vals, pmix_data_type_t type);
0566 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_timeval(pmix_pointer_array_t *regtypes,
0567                                                           pmix_buffer_t *buffer, void *dest,
0568                                                           int32_t *num_vals, pmix_data_type_t type);
0569 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_time(pmix_pointer_array_t *regtypes,
0570                                                        pmix_buffer_t *buffer, void *dest,
0571                                                        int32_t *num_vals, pmix_data_type_t type);
0572 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_status(pmix_pointer_array_t *regtypes,
0573                                                          pmix_buffer_t *buffer, void *dest,
0574                                                          int32_t *num_vals, pmix_data_type_t type);
0575 
0576 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_val(pmix_pointer_array_t *regtypes,
0577                                                       pmix_buffer_t *buffer, pmix_value_t *val);
0578 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_value(pmix_pointer_array_t *regtypes,
0579                                                         pmix_buffer_t *buffer, void *dest,
0580                                                         int32_t *num_vals, pmix_data_type_t type);
0581 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_info(pmix_pointer_array_t *regtypes,
0582                                                        pmix_buffer_t *buffer, void *dest,
0583                                                        int32_t *num_vals, pmix_data_type_t type);
0584 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pdata(pmix_pointer_array_t *regtypes,
0585                                                         pmix_buffer_t *buffer, void *dest,
0586                                                         int32_t *num_vals, pmix_data_type_t type);
0587 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_buf(pmix_pointer_array_t *regtypes,
0588                                                       pmix_buffer_t *buffer, void *dest,
0589                                                       int32_t *num_vals, pmix_data_type_t type);
0590 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_proc(pmix_pointer_array_t *regtypes,
0591                                                        pmix_buffer_t *buffer, void *dest,
0592                                                        int32_t *num_vals, pmix_data_type_t type);
0593 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_app(pmix_pointer_array_t *regtypes,
0594                                                       pmix_buffer_t *buffer, void *dest,
0595                                                       int32_t *num_vals, pmix_data_type_t type);
0596 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_kval(pmix_pointer_array_t *regtypes,
0597                                                        pmix_buffer_t *buffer, void *dest,
0598                                                        int32_t *num_vals, pmix_data_type_t type);
0599 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_modex(pmix_pointer_array_t *regtypes,
0600                                                         pmix_buffer_t *buffer, void *dest,
0601                                                         int32_t *num_vals, pmix_data_type_t type);
0602 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_persist(pmix_pointer_array_t *regtypes,
0603                                                           pmix_buffer_t *buffer, void *dest,
0604                                                           int32_t *num_vals, pmix_data_type_t type);
0605 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_bo(pmix_pointer_array_t *regtypes,
0606                                                      pmix_buffer_t *buffer, void *dest,
0607                                                      int32_t *num_vals, pmix_data_type_t type);
0608 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_ptr(pmix_pointer_array_t *regtypes,
0609                                                       pmix_buffer_t *buffer, void *dest,
0610                                                       int32_t *num_vals, pmix_data_type_t type);
0611 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_scope(pmix_pointer_array_t *regtypes,
0612                                                         pmix_buffer_t *buffer, void *dest,
0613                                                         int32_t *num_vals, pmix_data_type_t type);
0614 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_range(pmix_pointer_array_t *regtypes,
0615                                                         pmix_buffer_t *buffer, void *dest,
0616                                                         int32_t *num_vals, pmix_data_type_t type);
0617 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_cmd(pmix_pointer_array_t *regtypes,
0618                                                       pmix_buffer_t *buffer, void *dest,
0619                                                       int32_t *num_vals, pmix_data_type_t type);
0620 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_info_directives(pmix_pointer_array_t *regtypes,
0621                                                                   pmix_buffer_t *buffer, void *dest,
0622                                                                   int32_t *num_vals,
0623                                                                   pmix_data_type_t type);
0624 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_datatype(pmix_pointer_array_t *regtypes,
0625                                                            pmix_buffer_t *buffer, void *dest,
0626                                                            int32_t *num_vals,
0627                                                            pmix_data_type_t type);
0628 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pstate(pmix_pointer_array_t *regtypes,
0629                                                          pmix_buffer_t *buffer, void *dest,
0630                                                          int32_t *num_vals, pmix_data_type_t type);
0631 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pinfo(pmix_pointer_array_t *regtypes,
0632                                                         pmix_buffer_t *buffer, void *dest,
0633                                                         int32_t *num_vals, pmix_data_type_t type);
0634 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_darray(pmix_pointer_array_t *regtypes,
0635                                                          pmix_buffer_t *buffer, void *dest,
0636                                                          int32_t *num_vals, pmix_data_type_t type);
0637 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_rank(pmix_pointer_array_t *regtypes,
0638                                                        pmix_buffer_t *buffer, void *dest,
0639                                                        int32_t *num_vals, pmix_data_type_t type);
0640 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_query(pmix_pointer_array_t *regtypes,
0641                                                         pmix_buffer_t *buffer, void *dest,
0642                                                         int32_t *num_vals, pmix_data_type_t type);
0643 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_alloc_directive(pmix_pointer_array_t *regtypes,
0644                                                                   pmix_buffer_t *buffer, void *dest,
0645                                                                   int32_t *num_vals,
0646                                                                   pmix_data_type_t type);
0647 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_iof_channel(pmix_pointer_array_t *regtypes,
0648                                                               pmix_buffer_t *buffer, void *dest,
0649                                                               int32_t *num_vals,
0650                                                               pmix_data_type_t type);
0651 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_envar(pmix_pointer_array_t *regtypes,
0652                                                         pmix_buffer_t *buffer, void *dest,
0653                                                         int32_t *num_vals, pmix_data_type_t type);
0654 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_coord(pmix_pointer_array_t *regtypes,
0655                                                         pmix_buffer_t *buffer, void *dest,
0656                                                         int32_t *num_vals, pmix_data_type_t type);
0657 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_regattr(pmix_pointer_array_t *regtypes,
0658                                                           pmix_buffer_t *buffer, void *dest,
0659                                                           int32_t *num_vals, pmix_data_type_t type);
0660 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_regex(pmix_pointer_array_t *regtypes,
0661                                                         pmix_buffer_t *buffer, void *dest,
0662                                                         int32_t *num_vals, pmix_data_type_t type);
0663 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_jobstate(pmix_pointer_array_t *regtypes,
0664                                                            pmix_buffer_t *buffer, void *dest,
0665                                                            int32_t *num_vals,
0666                                                            pmix_data_type_t type);
0667 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_linkstate(pmix_pointer_array_t *regtypes,
0668                                                             pmix_buffer_t *buffer, void *dest,
0669                                                             int32_t *num_vals,
0670                                                             pmix_data_type_t type);
0671 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_cpuset(pmix_pointer_array_t *regtypes,
0672                                                          pmix_buffer_t *buffer, void *dest,
0673                                                          int32_t *num_vals, pmix_data_type_t type);
0674 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_geometry(pmix_pointer_array_t *regtypes,
0675                                                            pmix_buffer_t *buffer, void *dest,
0676                                                            int32_t *num_vals,
0677                                                            pmix_data_type_t type);
0678 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_devdist(pmix_pointer_array_t *regtypes,
0679                                                           pmix_buffer_t *buffer, void *dest,
0680                                                           int32_t *num_vals, pmix_data_type_t type);
0681 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_endpoint(pmix_pointer_array_t *regtypes,
0682                                                            pmix_buffer_t *buffer, void *dest,
0683                                                            int32_t *num_vals,
0684                                                            pmix_data_type_t type);
0685 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_topology(pmix_pointer_array_t *regtypes,
0686                                                            pmix_buffer_t *buffer, void *dest,
0687                                                            int32_t *num_vals,
0688                                                            pmix_data_type_t type);
0689 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_devtype(pmix_pointer_array_t *regtypes,
0690                                                           pmix_buffer_t *buffer, void *dest,
0691                                                           int32_t *num_vals, pmix_data_type_t type);
0692 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_locality(pmix_pointer_array_t *regtypes,
0693                                                            pmix_buffer_t *buffer, void *dest,
0694                                                            int32_t *num_vals,
0695                                                            pmix_data_type_t type);
0696 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_nspace(pmix_pointer_array_t *regtypes,
0697                                                          pmix_buffer_t *buffer, void *dest,
0698                                                          int32_t *num_vals, pmix_data_type_t type);
0699 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_pstats(pmix_pointer_array_t *regtypes,
0700                                                          pmix_buffer_t *buffer, void *dest,
0701                                                          int32_t *num_vals, pmix_data_type_t type);
0702 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_dkstats(pmix_pointer_array_t *regtypes,
0703                                                           pmix_buffer_t *buffer, void *dest,
0704                                                           int32_t *num_vals, pmix_data_type_t type);
0705 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_netstats(pmix_pointer_array_t *regtypes,
0706                                                            pmix_buffer_t *buffer, void *dest,
0707                                                            int32_t *num_vals,
0708                                                            pmix_data_type_t type);
0709 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_ndstats(pmix_pointer_array_t *regtypes,
0710                                                           pmix_buffer_t *buffer, void *dest,
0711                                                           int32_t *num_vals, pmix_data_type_t type);
0712 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_dbuf(pmix_pointer_array_t *regtypes,
0713                                                        pmix_buffer_t *buffer, void *dest,
0714                                                        int32_t *num_vals, pmix_data_type_t type);
0715 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_smed(pmix_pointer_array_t *regtypes,
0716                                                        pmix_buffer_t *buffer, void *dest,
0717                                                        int32_t *num_vals, pmix_data_type_t type);
0718 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_sacc(pmix_pointer_array_t *regtypes,
0719                                                        pmix_buffer_t *buffer, void *dest,
0720                                                        int32_t *num_vals, pmix_data_type_t type);
0721 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_spers(pmix_pointer_array_t *regtypes,
0722                                                         pmix_buffer_t *buffer, void *dest,
0723                                                         int32_t *num_vals, pmix_data_type_t type);
0724 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_satyp(pmix_pointer_array_t *regtypes,
0725                                                         pmix_buffer_t *buffer, void *dest,
0726                                                         int32_t *num_vals, pmix_data_type_t type);
0727 
0728 /**** DEPRECATED ****/
0729 PMIX_EXPORT pmix_status_t pmix_bfrops_base_unpack_array(pmix_pointer_array_t *regtypes,
0730                                                         pmix_buffer_t *buffer, void *dest,
0731                                                         int32_t *num_vals, pmix_data_type_t type);
0732 
0733 /*
0734  * "Standard" copy functions
0735  */
0736 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy(pmix_pointer_array_t *regtypes, void **dest,
0737                                                 void *src, pmix_data_type_t type);
0738 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_payload(pmix_buffer_t *dest, pmix_buffer_t *src);
0739 
0740 PMIX_EXPORT pmix_status_t pmix_bfrops_base_std_copy(void **dest, void *src, pmix_data_type_t type);
0741 
0742 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_string(char **dest, char *src,
0743                                                        pmix_data_type_t type);
0744 
0745 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_value(pmix_value_t **dest, pmix_value_t *src,
0746                                                       pmix_data_type_t type);
0747 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_proc(pmix_proc_t **dest, pmix_proc_t *src,
0748                                                      pmix_data_type_t type);
0749 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_app(pmix_app_t **dest, pmix_app_t *src,
0750                                                     pmix_data_type_t type);
0751 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_info(pmix_info_t **dest, pmix_info_t *src,
0752                                                      pmix_data_type_t type);
0753 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_buf(pmix_buffer_t **dest, pmix_buffer_t *src,
0754                                                     pmix_data_type_t type);
0755 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_kval(pmix_kval_t **dest, pmix_kval_t *src,
0756                                                      pmix_data_type_t type);
0757 PMIX_EXPORT pmix_status_t pmix_bfrop_base_copy_persist(pmix_persistence_t **dest,
0758                                                        pmix_persistence_t *src,
0759                                                        pmix_data_type_t type);
0760 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_bo(pmix_byte_object_t **dest,
0761                                                    pmix_byte_object_t *src, pmix_data_type_t type);
0762 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_pdata(pmix_pdata_t **dest, pmix_pdata_t *src,
0763                                                       pmix_data_type_t type);
0764 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_pinfo(pmix_proc_info_t **dest,
0765                                                       pmix_proc_info_t *src, pmix_data_type_t type);
0766 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_darray(pmix_data_array_t **dest,
0767                                                        pmix_data_array_t *src,
0768                                                        pmix_data_type_t type);
0769 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_query(pmix_query_t **dest, pmix_query_t *src,
0770                                                       pmix_data_type_t type);
0771 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_envar(pmix_envar_t **dest, pmix_envar_t *src,
0772                                                       pmix_data_type_t type);
0773 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_coord(pmix_coord_t **dest, pmix_coord_t *src,
0774                                                       pmix_data_type_t type);
0775 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_regattr(pmix_regattr_t **dest, pmix_regattr_t *src,
0776                                                         pmix_data_type_t type);
0777 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_regex(char **dest, char *src,
0778                                                       pmix_data_type_t type);
0779 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_cpuset(pmix_cpuset_t **dest, pmix_cpuset_t *src,
0780                                                        pmix_data_type_t type);
0781 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_geometry(pmix_geometry_t **dest,
0782                                                          pmix_geometry_t *src,
0783                                                          pmix_data_type_t type);
0784 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_devdist(pmix_device_distance_t **dest,
0785                                                         pmix_device_distance_t *src,
0786                                                         pmix_data_type_t type);
0787 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_endpoint(pmix_endpoint_t **dest,
0788                                                          pmix_endpoint_t *src,
0789                                                          pmix_data_type_t type);
0790 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_topology(pmix_topology_t **dest,
0791                                                          pmix_topology_t *src,
0792                                                          pmix_data_type_t type);
0793 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_nspace(pmix_nspace_t **dest, pmix_nspace_t *src,
0794                                                        pmix_data_type_t type);
0795 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_pstats(pmix_proc_stats_t **dest,
0796                                                        pmix_proc_stats_t *src,
0797                                                        pmix_data_type_t type);
0798 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_dkstats(pmix_disk_stats_t **dest,
0799                                                         pmix_disk_stats_t *src,
0800                                                         pmix_data_type_t type);
0801 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_netstats(pmix_net_stats_t **dest,
0802                                                          pmix_net_stats_t *src,
0803                                                          pmix_data_type_t type);
0804 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_ndstats(pmix_node_stats_t **dest,
0805                                                         pmix_node_stats_t *src,
0806                                                         pmix_data_type_t type);
0807 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_dbuf(pmix_data_buffer_t **dest,
0808                                                      pmix_data_buffer_t *src,
0809                                                      pmix_data_type_t type);
0810 
0811 /*
0812  * "Standard" print functions
0813  */
0814 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print(pmix_pointer_array_t *regtypes, char **output,
0815                                                  char *prefix, void *src, pmix_data_type_t type);
0816 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_bool(char **output, char *prefix, bool *src,
0817                                                       pmix_data_type_t type);
0818 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_byte(char **output, char *prefix, uint8_t *src,
0819                                                       pmix_data_type_t type);
0820 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_string(char **output, char *prefix, char *src,
0821                                                         pmix_data_type_t type);
0822 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_size(char **output, char *prefix, size_t *src,
0823                                                       pmix_data_type_t type);
0824 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pid(char **output, char *prefix, pid_t *src,
0825                                                      pmix_data_type_t type);
0826 
0827 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int(char **output, char *prefix, int *src,
0828                                                      pmix_data_type_t type);
0829 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int8(char **output, char *prefix, int8_t *src,
0830                                                       pmix_data_type_t type);
0831 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int16(char **output, char *prefix, int16_t *src,
0832                                                        pmix_data_type_t type);
0833 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int32(char **output, char *prefix, int32_t *src,
0834                                                        pmix_data_type_t type);
0835 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_int64(char **output, char *prefix, int64_t *src,
0836                                                        pmix_data_type_t type);
0837 
0838 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint(char **output, char *prefix, uint *src,
0839                                                       pmix_data_type_t type);
0840 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint8(char **output, char *prefix, uint8_t *src,
0841                                                        pmix_data_type_t type);
0842 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint16(char **output, char *prefix, uint16_t *src,
0843                                                         pmix_data_type_t type);
0844 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint32(char **output, char *prefix, uint32_t *src,
0845                                                         pmix_data_type_t type);
0846 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_uint64(char **output, char *prefix, uint64_t *src,
0847                                                         pmix_data_type_t type);
0848 
0849 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_float(char **output, char *prefix, float *src,
0850                                                        pmix_data_type_t type);
0851 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_double(char **output, char *prefix, double *src,
0852                                                         pmix_data_type_t type);
0853 
0854 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_timeval(char **output, char *prefix,
0855                                                          struct timeval *src,
0856                                                          pmix_data_type_t type);
0857 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_time(char **output, char *prefix, time_t *src,
0858                                                       pmix_data_type_t type);
0859 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_status(char **output, char *prefix,
0860                                                         pmix_status_t *src, pmix_data_type_t type);
0861 
0862 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_value(char **output, char *prefix,
0863                                                        pmix_value_t *src, pmix_data_type_t type);
0864 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_proc(char **output, char *prefix, pmix_proc_t *src,
0865                                                       pmix_data_type_t type);
0866 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_app(char **output, char *prefix, pmix_app_t *src,
0867                                                      pmix_data_type_t type);
0868 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_info(char **output, char *prefix, pmix_info_t *src,
0869                                                       pmix_data_type_t type);
0870 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_buf(char **output, char *prefix,
0871                                                      pmix_buffer_t *src, pmix_data_type_t type);
0872 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_kval(char **output, char *prefix, pmix_kval_t *src,
0873                                                       pmix_data_type_t type);
0874 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_persist(char **output, char *prefix,
0875                                                          pmix_persistence_t *src,
0876                                                          pmix_data_type_t type);
0877 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_bo(char **output, char *prefix,
0878                                                     pmix_byte_object_t *src, pmix_data_type_t type);
0879 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pdata(char **output, char *prefix,
0880                                                        pmix_pdata_t *src, pmix_data_type_t type);
0881 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_ptr(char **output, char *prefix, void *src,
0882                                                      pmix_data_type_t type);
0883 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_scope(char **output, char *prefix,
0884                                                        pmix_scope_t *src, pmix_data_type_t type);
0885 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_range(char **output, char *prefix,
0886                                                        pmix_data_range_t *src,
0887                                                        pmix_data_type_t type);
0888 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_cmd(char **output, char *prefix, pmix_cmd_t *src,
0889                                                      pmix_data_type_t type);
0890 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_info_directives(char **output, char *prefix,
0891                                                                  pmix_info_directives_t *src,
0892                                                                  pmix_data_type_t type);
0893 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_datatype(char **output, char *prefix,
0894                                                           pmix_data_type_t *src,
0895                                                           pmix_data_type_t type);
0896 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pstate(char **output, char *prefix,
0897                                                         pmix_proc_state_t *src,
0898                                                         pmix_data_type_t type);
0899 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pinfo(char **output, char *prefix,
0900                                                        pmix_proc_info_t *src,
0901                                                        pmix_data_type_t type);
0902 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_darray(char **output, char *prefix,
0903                                                         pmix_data_array_t *src,
0904                                                         pmix_data_type_t type);
0905 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_query(char **output, char *prefix,
0906                                                        pmix_query_t *src, pmix_data_type_t type);
0907 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_rank(char **output, char *prefix, pmix_rank_t *src,
0908                                                       pmix_data_type_t type);
0909 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_alloc_directive(char **output, char *prefix,
0910                                                                  pmix_alloc_directive_t *src,
0911                                                                  pmix_data_type_t type);
0912 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_iof_channel(char **output, char *prefix,
0913                                                              pmix_iof_channel_t *src,
0914                                                              pmix_data_type_t type);
0915 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_envar(char **output, char *prefix,
0916                                                        pmix_envar_t *src, pmix_data_type_t type);
0917 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_coord(char **output, char *prefix,
0918                                                        pmix_coord_t *src, pmix_data_type_t type);
0919 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_regattr(char **output, char *prefix,
0920                                                          pmix_regattr_t *src,
0921                                                          pmix_data_type_t type);
0922 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_regex(char **output, char *prefix, char *src,
0923                                                        pmix_data_type_t type);
0924 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_jobstate(char **output, char *prefix,
0925                                                           pmix_job_state_t *src,
0926                                                           pmix_data_type_t type);
0927 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_linkstate(char **output, char *prefix,
0928                                                            pmix_link_state_t *src,
0929                                                            pmix_data_type_t type);
0930 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_cpuset(char **output, char *prefix,
0931                                                         pmix_cpuset_t *src, pmix_data_type_t type);
0932 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_geometry(char **output, char *prefix,
0933                                                           pmix_geometry_t *src,
0934                                                           pmix_data_type_t type);
0935 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_devdist(char **output, char *prefix,
0936                                                          pmix_device_distance_t *src,
0937                                                          pmix_data_type_t type);
0938 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_endpoint(char **output, char *prefix,
0939                                                           pmix_endpoint_t *src,
0940                                                           pmix_data_type_t type);
0941 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_topology(char **output, char *prefix,
0942                                                           pmix_topology_t *src,
0943                                                           pmix_data_type_t type);
0944 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_devtype(char **output, char *prefix,
0945                                                          pmix_device_type_t *src,
0946                                                          pmix_data_type_t type);
0947 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_locality(char **output, char *prefix,
0948                                                           pmix_locality_t *src,
0949                                                           pmix_data_type_t type);
0950 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_nspace(char **output, char *prefix,
0951                                                         pmix_nspace_t *src, pmix_data_type_t type);
0952 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_pstats(char **output, char *prefix,
0953                                                         pmix_proc_stats_t *src,
0954                                                         pmix_data_type_t type);
0955 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_dkstats(char **output, char *prefix,
0956                                                          pmix_disk_stats_t *src,
0957                                                          pmix_data_type_t type);
0958 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_netstats(char **output, char *prefix,
0959                                                           pmix_net_stats_t *src,
0960                                                           pmix_data_type_t type);
0961 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_ndstats(char **output, char *prefix,
0962                                                          pmix_node_stats_t *src,
0963                                                          pmix_data_type_t type);
0964 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_dbuf(char **output, char *prefix,
0965                                                       pmix_data_buffer_t *src,
0966                                                       pmix_data_type_t type);
0967 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_smed(char **output, char *prefix,
0968                                                       pmix_storage_medium_t *src,
0969                                                       pmix_data_type_t type);
0970 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_sacc(char **output, char *prefix,
0971                                                       pmix_storage_accessibility_t *src,
0972                                                       pmix_data_type_t type);
0973 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_spers(char **output, char *prefix,
0974                                                        pmix_storage_persistence_t *src,
0975                                                        pmix_data_type_t type);
0976 PMIX_EXPORT pmix_status_t pmix_bfrops_base_print_satyp(char **output, char *prefix,
0977                                                        pmix_storage_access_type_t *src,
0978                                                        pmix_data_type_t type);
0979 
0980 /*
0981  * Common helper functions
0982  */
0983 
0984 PMIX_EXPORT char *pmix_bfrop_buffer_extend(pmix_buffer_t *bptr, size_t bytes_to_add);
0985 
0986 PMIX_EXPORT bool pmix_bfrop_too_small(pmix_buffer_t *buffer, size_t bytes_reqd);
0987 
0988 PMIX_EXPORT pmix_status_t pmix_bfrop_store_data_type(pmix_pointer_array_t *regtypes,
0989                                                      pmix_buffer_t *buffer, pmix_data_type_t type);
0990 
0991 PMIX_EXPORT pmix_status_t pmix_bfrop_get_data_type(pmix_pointer_array_t *regtypes,
0992                                                    pmix_buffer_t *buffer, pmix_data_type_t *type);
0993 
0994 PMIX_EXPORT pmix_status_t pmix_bfrops_base_copy_payload(pmix_buffer_t *dest, pmix_buffer_t *src);
0995 
0996 PMIX_EXPORT pmix_status_t pmix_bfrops_base_embed_payload(pmix_buffer_t *dest, pmix_byte_object_t *src);
0997 
0998 PMIX_EXPORT void pmix_bfrops_base_value_load(pmix_value_t *v, const void *data,
0999                                              pmix_data_type_t type);
1000 
1001 PMIX_EXPORT pmix_status_t pmix_bfrops_base_value_unload(pmix_value_t *kv, void **data, size_t *sz);
1002 
1003 PMIX_EXPORT pmix_status_t pmix_bfrops_base_value_xfer(pmix_value_t *p, const pmix_value_t *src);
1004 
1005 PMIX_EXPORT pmix_value_cmp_t pmix_bfrops_base_value_cmp(pmix_value_t *p, pmix_value_t *p1);
1006 
1007 PMIX_EXPORT void pmix_bfrops_base_value_destruct(pmix_value_t *v);
1008 
1009 PMIX_EXPORT void pmix_bfrops_base_darray_destruct(pmix_data_array_t *d);
1010 
1011 END_C_DECLS
1012 
1013 #endif