📄 dss_peek.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 + -