⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dss_copy.c

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 C
字号:
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana *                         University Research and Technology *                         Corporation.  All rights reserved. * Copyright (c) 2004-2006 The University of Tennessee and The University *                         of Tennessee Research Foundation.  All rights *                         reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, *                         University of Stuttgart.  All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. *                         All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow * * $HEADER$ */#include "orte_config.h"#include <sys/types.h>#if HAVE_NETINET_IN_H#include <netinet/in.h>#endif#include "orte/mca/errmgr/errmgr.h"#include "orte/dss/dss_internal.h"#include "opal/util/output.h"int orte_dss_copy(void **dest, void *src, orte_data_type_t type){    int rc;    orte_dss_type_info_t *info;    /* check for error */    if (NULL == dest) {        ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);        return ORTE_ERR_BAD_PARAM;    }    if (NULL == src && (ORTE_NULL != type && ORTE_STRING != type)) {        ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);        return ORTE_ERR_BAD_PARAM;    }   /* Lookup the copy function for this type and call it */    if (!(type < orte_dss_types->size) ||        (NULL == (info = (orte_dss_type_info_t*)orte_pointer_array_get_item(orte_dss_types, type)))) {        ORTE_ERROR_LOG(ORTE_ERR_UNKNOWN_DATA_TYPE);        return ORTE_ERR_UNKNOWN_DATA_TYPE;    }    if (ORTE_SUCCESS != (rc = info->odti_copy_fn(dest, src, type))) {        ORTE_ERROR_LOG(rc);    }    return rc;}/* * STANDARD COPY FUNCTION - WORKS FOR EVERYTHING NON-STRUCTURED */int orte_dss_std_copy(void **dest, void *src, orte_data_type_t type){    size_t datasize;    uint8_t *val;    switch(type) {        case ORTE_BOOL:            datasize = sizeof(bool);            break;        case ORTE_INT:        case ORTE_UINT:            datasize = sizeof(int);            break;        case ORTE_SIZE:            datasize = sizeof(size_t);            break;        case ORTE_PID:            datasize = sizeof(pid_t);            break;        case ORTE_BYTE:        case ORTE_INT8:        case ORTE_UINT8:            datasize = 1;            break;        case ORTE_INT16:        case ORTE_UINT16:            datasize = 2;            break;        case ORTE_INT32:        case ORTE_UINT32:            datasize = 4;            break;        case ORTE_INT64:        case ORTE_UINT64:            datasize = 8;            break;        case ORTE_STD_CNTR:            datasize = sizeof(orte_std_cntr_t);            break;        case ORTE_DATA_TYPE:            datasize = sizeof(orte_data_type_t);            break;        default:            ORTE_ERROR_LOG(ORTE_ERR_UNKNOWN_DATA_TYPE);            return ORTE_ERR_UNKNOWN_DATA_TYPE;    }    val = (uint8_t*)malloc(datasize);    if (NULL == val) {        ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);        return ORTE_ERR_OUT_OF_RESOURCE;    }    memcpy(val, src, datasize);    *dest = val;    return ORTE_SUCCESS;}/* COPY FUNCTIONS FOR NON-STANDARD SYSTEM TYPES *//* * NULL */int orte_dss_copy_null(char **dest, char *src, orte_data_type_t type){    char *val;    *dest = (char*)malloc(sizeof(char*));    if (NULL == *dest) {        ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);        return ORTE_ERR_OUT_OF_RESOURCE;    }    val = *dest;  /* save the address of the value */    /* set the dest to null */    *val = 0x00;    return ORTE_SUCCESS;}/* * STRING */int orte_dss_copy_string(char **dest, char *src, orte_data_type_t type){    if (NULL == src) {  /* got zero-length string/NULL pointer - store NULL */        *dest = NULL;    } else {        *dest = strdup(src);    }    return ORTE_SUCCESS;}/* COPY FUNCTIONS FOR GENERIC ORTE TYPES *//* * ORTE_DATA_VALUE */int orte_dss_copy_data_value(orte_data_value_t **dest, orte_data_value_t *src,                             orte_data_type_t type){    int rc;    /* create the new object */    *dest = OBJ_NEW(orte_data_value_t);    if (NULL == *dest) {        ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);        return ORTE_ERR_OUT_OF_RESOURCE;    }    (*dest)->type = src->type;    /* copy the payload with its associated copy function */    if (ORTE_SUCCESS != (rc = orte_dss.copy(&((*dest)->data), src->data, src->type))) {        ORTE_ERROR_LOG(rc);        OBJ_RELEASE(*dest);        return rc;    }    return ORTE_SUCCESS;}/* * ORTE_BYTE_OBJECT */int orte_dss_copy_byte_object(orte_byte_object_t **dest, orte_byte_object_t *src,                              orte_data_type_t type){    /* allocate space for the new object */    *dest = (orte_byte_object_t*)malloc(sizeof(orte_byte_object_t));    if (NULL == *dest) {        ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);        return ORTE_ERR_OUT_OF_RESOURCE;    }    (*dest)->size = src->size;    /* allocate the required space for the bytes */    (*dest)->bytes = (uint8_t*)malloc(src->size);    if (NULL == (*dest)->bytes) {        ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);        OBJ_RELEASE(*dest);        return ORTE_ERR_OUT_OF_RESOURCE;    }    /* copy the data across */    memcpy((*dest)->bytes, src->bytes, src->size);    return ORTE_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -