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

📄 dss_peek.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/mca/errmgr/errmgr.h"#include "orte/dss/dss_internal.h"int orte_dss_peek(orte_buffer_t *buffer, orte_data_type_t *type,                  orte_std_cntr_t *num_vals){    int ret;    orte_buffer_t tmp;    orte_std_cntr_t n=1;    orte_data_type_t local_type;    /* check for errors */    if (buffer == NULL) {        ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);        return ORTE_ERR_BAD_PARAM;    }    /* Double check and ensure that there is data left in the buffer. */    if (buffer->unpack_ptr >= buffer->base_ptr + buffer->bytes_used) {        ORTE_ERROR_LOG(ORTE_ERR_UNPACK_READ_PAST_END_OF_BUFFER);        *type = ORTE_NULL;        *num_vals = 0;        return ORTE_ERR_UNPACK_READ_PAST_END_OF_BUFFER;    }        /* if this is NOT a fully described buffer, then that is as much as     * we can do - there is no way we can tell the caller what type is     * in the buffer since that info wasn't stored.     */    if (ORTE_DSS_BUFFER_FULLY_DESC != buffer->type) {        ORTE_ERROR_LOG(ORTE_ERR_UNKNOWN_DATA_TYPE);        *type = ORTE_UNDEF;        *num_vals = 0;        return ORTE_ERR_UNKNOWN_DATA_TYPE;    }    /* cheat: unpack from a copy of the buffer -- leaving all the       original pointers intact */    tmp = *buffer;    if (ORTE_SUCCESS != (ret = orte_dss_get_data_type(&tmp, &local_type))) {        ORTE_ERROR_LOG(ret);        *type = ORTE_NULL;        *num_vals = 0;        return ret;    }    if (ORTE_STD_CNTR != local_type) { /* if the length wasn't first, then error */        ORTE_ERROR_LOG(ORTE_ERR_UNPACK_FAILURE);        *type = ORTE_NULL;        *num_vals = 0;        return ORTE_ERR_UNPACK_FAILURE;    }    if (ORTE_SUCCESS != (ret = orte_dss_unpack_std_cntr(&tmp, num_vals, &n, ORTE_STD_CNTR))) {        ORTE_ERROR_LOG(ret);        *type = ORTE_NULL;        *num_vals = 0;        return ret;    }    if (ORTE_SUCCESS != (ret = orte_dss_get_data_type(&tmp, type))) {        ORTE_ERROR_LOG(ret);        *type = ORTE_NULL;        *num_vals = 0;    }    return ret;}int orte_dss_peek_type(orte_buffer_t *buffer, orte_data_type_t *type){    int ret;    orte_buffer_t tmp;    /* check for errors */    if (buffer == NULL) {        ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);        return ORTE_ERR_BAD_PARAM;    }    /* if this is NOT a fully described buffer, then there isn't anything     * we can do - there is no way we can tell the caller what type is     * in the buffer since that info wasn't stored.     */    if (ORTE_DSS_BUFFER_FULLY_DESC != buffer->type) {        ORTE_ERROR_LOG(ORTE_ERR_UNKNOWN_DATA_TYPE);        *type = ORTE_UNDEF;        return ORTE_ERR_UNKNOWN_DATA_TYPE;    }    /* Double check and ensure that there is data left in the buffer. */    if (buffer->unpack_ptr >= buffer->base_ptr + buffer->bytes_used) {        ORTE_ERROR_LOG(ORTE_ERR_UNPACK_READ_PAST_END_OF_BUFFER);        *type = ORTE_UNDEF;        return ORTE_ERR_UNPACK_READ_PAST_END_OF_BUFFER;    }    /* cheat: unpack from a copy of the buffer -- leaving all the    original pointers intact */    tmp = *buffer;    if (ORTE_SUCCESS != (ret = orte_dss_get_data_type(&tmp, type))) {        ORTE_ERROR_LOG(ret);        *type = ORTE_UNDEF;        return ret;    }    return ORTE_SUCCESS;}

⌨️ 快捷键说明

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