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

📄 dss_register.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-2005 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 "orte/orte_types.h"#include "orte/mca/errmgr/errmgr.h"#include "orte/mca/ns/ns.h"#include "orte/dss/dss.h"#include "orte/dss/dss_internal.h"int orte_dss_register(orte_dss_pack_fn_t pack_fn,                      orte_dss_unpack_fn_t unpack_fn,                      orte_dss_copy_fn_t copy_fn,                      orte_dss_compare_fn_t compare_fn,                      orte_dss_size_fn_t size_fn,                      orte_dss_print_fn_t print_fn,                      orte_dss_release_fn_t release_fn,                      bool structured,                      const char *name, orte_data_type_t *type){    int ret;    orte_dss_type_info_t *info, **ptr;    orte_std_cntr_t i;    orte_data_type_t j;    /* Check for bozo cases */    if (NULL == pack_fn || NULL == unpack_fn || NULL == copy_fn || NULL == compare_fn ||        NULL == size_fn || NULL == print_fn || NULL == name || NULL == type) {        ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);        return ORTE_ERR_BAD_PARAM;    }    /* check if this entry already exists - if so, error - we do NOT allow multiple type registrations */    ptr = (orte_dss_type_info_t**)(orte_dss_types->addr);    for (i=0, j=0; j < orte_dss_num_reg_types &&         i < orte_dss_types->size; i++) {        if (NULL != ptr[i]) {            j++;            if (0 == strcmp(ptr[i]->odti_name, name)) {                ORTE_ERROR_LOG(ORTE_ERR_DATA_TYPE_REDEF);                return ORTE_ERR_DATA_TYPE_REDEF;            }        }    }    /* if type is given (i.e., *type > 0), then just use it.     * otherwise, go and get a new type id from the name     * service     */    if (0 >= *type) {        if (ORTE_SUCCESS != (ret = orte_ns.define_data_type(name, type))) {            ORTE_ERROR_LOG(ret);            return ret;        }    }    /* Add a new entry to the table */    info = (orte_dss_type_info_t*) OBJ_NEW(orte_dss_type_info_t);    if (NULL == info) {        ORTE_ERROR_LOG(ORTE_ERR_OUT_OF_RESOURCE);        return ORTE_ERR_OUT_OF_RESOURCE;    }    info->odti_type = *type;    info->odti_name = strdup(name);    info->odti_pack_fn = pack_fn;    info->odti_unpack_fn = unpack_fn;    info->odti_copy_fn = copy_fn;    info->odti_compare_fn = compare_fn;    info->odti_size_fn = size_fn;    info->odti_print_fn = print_fn;    info->odti_release_fn = release_fn;    info->odti_structured = structured;    if (ORTE_SUCCESS != (ret = orte_pointer_array_set_item(orte_dss_types, *type, info))) {        ORTE_ERROR_LOG(ret);    }    /* All done */    return ret;}

⌨️ 快捷键说明

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