コード例 #1
0
pmix_status_t pmix_bfrop_get_data_type(pmix_buffer_t *buffer, pmix_data_type_t *type)
{
    int32_t n=1;
    return pmix_bfrop_unpack_datatype(buffer, type, &n, PMIX_DATA_TYPE);
}
コード例 #2
0
ファイル: unpack.c プロジェクト: bharatpotnuri/ompi
pmix_status_t pmix_bfrop_unpack_darray(pmix_buffer_t *buffer, void *dest,
                                       int32_t *num_vals, pmix_data_type_t type)
{
    pmix_data_array_t *ptr;
    int32_t i, n, m;
    pmix_status_t ret;
    size_t nbytes;

    pmix_output_verbose(20, pmix_globals.debug_output,
                        "pmix_bfrop_unpack: %d data arrays", *num_vals);

    ptr = (pmix_data_array_t *) dest;
    n = *num_vals;

    for (i = 0; i < n; ++i) {
        memset(&ptr[i], 0, sizeof(pmix_data_array_t));
        /* unpack the type */
        m=1;
        if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_datatype(buffer, &ptr[i].type, &m, PMIX_DATA_TYPE))) {
            return ret;
        }
        /* unpack the number of array elements */
        m=1;
        if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_sizet(buffer, &ptr[i].size, &m, PMIX_SIZE))) {
            return ret;
        }
        if (0 == ptr[i].size || PMIX_UNDEF == ptr[i].type) {
            /* nothing else to do */
            continue;
        }
        /* allocate storage for the array and unpack the array elements */
        m = ptr[i].size;
        switch(ptr[i].type) {
            case PMIX_BOOL:
                nbytes = sizeof(bool);
                break;
            case PMIX_BYTE:
            case PMIX_INT8:
            case PMIX_UINT8:
                nbytes = sizeof(int8_t);
                break;
            case PMIX_INT16:
            case PMIX_UINT16:
                nbytes = sizeof(int16_t);
                break;
            case PMIX_INT32:
            case PMIX_UINT32:
                nbytes = sizeof(int32_t);
                break;
            case PMIX_INT64:
            case PMIX_UINT64:
                nbytes = sizeof(int64_t);
                break;
            case PMIX_STRING:
                nbytes = sizeof(char*);
                break;
            case PMIX_SIZE:
                nbytes = sizeof(size_t);
                break;
            case PMIX_PID:
                nbytes = sizeof(pid_t);
                break;
            case PMIX_INT:
            case PMIX_UINT:
                nbytes = sizeof(int);
                break;
            case PMIX_FLOAT:
                nbytes = sizeof(float);
                break;
            case PMIX_DOUBLE:
                nbytes = sizeof(double);
                break;
            case PMIX_TIMEVAL:
                nbytes = sizeof(struct timeval);
                break;
            case PMIX_TIME:
                nbytes = sizeof(time_t);
                break;
            case PMIX_STATUS:
                nbytes = sizeof(pmix_status_t);
                break;
            case PMIX_INFO:
                nbytes = sizeof(pmix_info_t);
                break;
            case PMIX_PROC:
                nbytes = sizeof(pmix_proc_t);
                break;
            case PMIX_BYTE_OBJECT:
            case PMIX_COMPRESSED_STRING:
                nbytes = sizeof(pmix_byte_object_t);
                break;
            case PMIX_PERSIST:
                nbytes = sizeof(pmix_persistence_t);
                break;
            case PMIX_SCOPE:
                nbytes = sizeof(pmix_scope_t);
                break;
            case PMIX_DATA_RANGE:
                nbytes = sizeof(pmix_data_range_t);
                break;
            case PMIX_PROC_STATE:
                nbytes = sizeof(pmix_proc_state_t);
                break;
            case PMIX_PROC_INFO:
                nbytes = sizeof(pmix_proc_info_t);
                break;
            case PMIX_QUERY:
                nbytes = sizeof(pmix_query_t);
            default:
                return PMIX_ERR_NOT_SUPPORTED;
        }
        if (NULL == (ptr[i].array = malloc(m * nbytes))) {
            return PMIX_ERR_NOMEM;
        }
        if (PMIX_SUCCESS != (ret = pmix_bfrop_unpack_buffer(buffer, ptr[i].array, &m, ptr[i].type))) {
            return ret;
        }
    }
    return PMIX_SUCCESS;
}