Add support for "double" to the DSS
This commit was SVN r32149.
Этот коммит содержится в:
родитель
e498e20d46
Коммит
b85471ac13
@ -183,6 +183,15 @@ int opal_dss_compare_float(float *value1, float *value2, opal_data_type_t type)
|
||||
return OPAL_EQUAL;
|
||||
}
|
||||
|
||||
int opal_dss_compare_double(double *value1, double *value2, opal_data_type_t type)
|
||||
{
|
||||
if (*value1 > *value2) return OPAL_VALUE1_GREATER;
|
||||
|
||||
if (*value2 > *value1) return OPAL_VALUE2_GREATER;
|
||||
|
||||
return OPAL_EQUAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* NON-NUMERIC SYSTEM TYPES
|
||||
*/
|
||||
|
@ -312,6 +312,9 @@ int opal_dss_pack_buffer_contents(opal_buffer_t *buffer, const void *src,
|
||||
int opal_dss_pack_float(opal_buffer_t *buffer, const void *src,
|
||||
int32_t num_vals, opal_data_type_t type);
|
||||
|
||||
int opal_dss_pack_double(opal_buffer_t *buffer, const void *src,
|
||||
int32_t num_vals, opal_data_type_t type);
|
||||
|
||||
int opal_dss_pack_timeval(opal_buffer_t *buffer, const void *src,
|
||||
int32_t num_vals, opal_data_type_t type);
|
||||
|
||||
@ -369,6 +372,9 @@ int opal_dss_unpack_buffer_contents(opal_buffer_t *buffer, void *dest,
|
||||
int opal_dss_unpack_float(opal_buffer_t *buffer, void *dest,
|
||||
int32_t *num_vals, opal_data_type_t type);
|
||||
|
||||
int opal_dss_unpack_double(opal_buffer_t *buffer, void *dest,
|
||||
int32_t *num_vals, opal_data_type_t type);
|
||||
|
||||
int opal_dss_unpack_timeval(opal_buffer_t *buffer, void *dest,
|
||||
int32_t *num_vals, opal_data_type_t type);
|
||||
|
||||
@ -445,6 +451,8 @@ int opal_dss_compare_buffer_contents(opal_buffer_t *value1, opal_buffer_t *value
|
||||
|
||||
int opal_dss_compare_float(float *value1, float *value2, opal_data_type_t type);
|
||||
|
||||
int opal_dss_compare_double(double *value1, double *value2, opal_data_type_t type);
|
||||
|
||||
int opal_dss_compare_timeval(struct timeval *value1, struct timeval *value2, opal_data_type_t type);
|
||||
|
||||
int opal_dss_compare_time(time_t *value1, time_t *value2, opal_data_type_t type);
|
||||
@ -482,6 +490,7 @@ int opal_dss_print_node_stat(char **output, char *prefix, opal_node_stats_t *src
|
||||
int opal_dss_print_value(char **output, char *prefix, opal_value_t *src, opal_data_type_t type);
|
||||
int opal_dss_print_buffer_contents(char **output, char *prefix, opal_buffer_t *src, opal_data_type_t type);
|
||||
int opal_dss_print_float(char **output, char *prefix, float *src, opal_data_type_t type);
|
||||
int opal_dss_print_double(char **output, char *prefix, double *src, opal_data_type_t type);
|
||||
int opal_dss_print_timeval(char **output, char *prefix, struct timeval *src, opal_data_type_t type);
|
||||
int opal_dss_print_time(char **output, char *prefix, time_t *src, opal_data_type_t type);
|
||||
|
||||
|
@ -545,6 +545,16 @@ int opal_dss_open(void)
|
||||
"OPAL_FLOAT", &tmp))) {
|
||||
return rc;
|
||||
}
|
||||
tmp = OPAL_DOUBLE;
|
||||
if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_double,
|
||||
opal_dss_unpack_double,
|
||||
(opal_dss_copy_fn_t)opal_dss_std_copy,
|
||||
(opal_dss_compare_fn_t)opal_dss_compare_double,
|
||||
(opal_dss_print_fn_t)opal_dss_print_double,
|
||||
OPAL_DSS_UNSTRUCTURED,
|
||||
"OPAL_DOUBLE", &tmp))) {
|
||||
return rc;
|
||||
}
|
||||
tmp = OPAL_TIMEVAL;
|
||||
if (OPAL_SUCCESS != (rc = opal_dss.register_type(opal_dss_pack_timeval,
|
||||
opal_dss_unpack_timeval,
|
||||
|
@ -348,6 +348,27 @@ int opal_dss_pack_float(opal_buffer_t *buffer, const void *src,
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
/* DOUBLE */
|
||||
int opal_dss_pack_double(opal_buffer_t *buffer, const void *src,
|
||||
int32_t num_vals, opal_data_type_t type)
|
||||
{
|
||||
int ret = OPAL_SUCCESS;
|
||||
int32_t i;
|
||||
double *ssrc = (double*)src;
|
||||
char *convert;
|
||||
|
||||
for (i = 0; i < num_vals; ++i) {
|
||||
asprintf(&convert, "%f", ssrc[i]);
|
||||
if (OPAL_SUCCESS != (ret = opal_dss_pack_string(buffer, &convert, 1, OPAL_STRING))) {
|
||||
free(convert);
|
||||
return ret;
|
||||
}
|
||||
free(convert);
|
||||
}
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
/* TIMEVAL */
|
||||
int opal_dss_pack_timeval(opal_buffer_t *buffer, const void *src,
|
||||
int32_t num_vals, opal_data_type_t type)
|
||||
@ -782,6 +803,11 @@ int opal_dss_pack_value(opal_buffer_t *buffer, const void *src,
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case OPAL_DOUBLE:
|
||||
if (OPAL_SUCCESS != (ret = opal_dss_pack_buffer(buffer, &ptr[i]->data.dval, 1, OPAL_DOUBLE))) {
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case OPAL_TIMEVAL:
|
||||
if (OPAL_SUCCESS != (ret = opal_dss_pack_buffer(buffer, &ptr[i]->data.tv, 1, OPAL_TIMEVAL))) {
|
||||
return ret;
|
||||
|
@ -370,6 +370,26 @@ int opal_dss_print_float(char **output, char *prefix,
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
int opal_dss_print_double(char **output, char *prefix,
|
||||
double *src, opal_data_type_t type)
|
||||
{
|
||||
char *prefx;
|
||||
|
||||
/* deal with NULL prefix */
|
||||
if (NULL == prefix) asprintf(&prefx, " ");
|
||||
else prefx = prefix;
|
||||
|
||||
/* if src is NULL, just print data type and return */
|
||||
if (NULL == src) {
|
||||
asprintf(output, "%sData type: OPAL_DOUBLE\tValue: NULL pointer", prefx);
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
asprintf(output, "%sData type: OPAL_DOUBLE\tValue: %f", prefx, *src);
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
int opal_dss_print_time(char **output, char *prefix,
|
||||
time_t *src, opal_data_type_t type)
|
||||
{
|
||||
@ -611,6 +631,10 @@ int opal_dss_print_value(char **output, char *prefix, opal_value_t *src, opal_da
|
||||
asprintf(output, "%sOPAL_VALUE: Data type: OPAL_FLOAT\tKey: %s\tValue: %f",
|
||||
prefx, src->key, src->data.fval);
|
||||
break;
|
||||
case OPAL_DOUBLE:
|
||||
asprintf(output, "%sOPAL_VALUE: Data type: OPAL_DOUBLE\tKey: %s\tValue: %f",
|
||||
prefx, src->key, src->data.dval);
|
||||
break;
|
||||
case OPAL_BYTE_OBJECT:
|
||||
asprintf(output, "%sOPAL_VALUE: Data type: OPAL_BYTE_OBJECT\tKey: %s\tData: %s\tSize: %lu",
|
||||
prefx, src->key, (NULL == src->data.bo.bytes) ? "NULL" : "NON-NULL", (unsigned long)src->data.bo.size);
|
||||
|
@ -74,21 +74,22 @@ typedef uint64_t opal_identifier_t;
|
||||
#define OPAL_UINT16 (opal_data_type_t) 13 /**< a 16-bit unsigned integer */
|
||||
#define OPAL_UINT32 (opal_data_type_t) 14 /**< a 32-bit unsigned integer */
|
||||
#define OPAL_UINT64 (opal_data_type_t) 15 /**< a 64-bit unsigned integer */
|
||||
/* simple floating point type */
|
||||
/* floating point types */
|
||||
#define OPAL_FLOAT (opal_data_type_t) 16
|
||||
#define OPAL_DOUBLE (opal_data_type_t) 17
|
||||
/* system types */
|
||||
#define OPAL_TIMEVAL (opal_data_type_t) 17
|
||||
#define OPAL_TIME (opal_data_type_t) 18
|
||||
#define OPAL_TIMEVAL (opal_data_type_t) 18
|
||||
#define OPAL_TIME (opal_data_type_t) 19
|
||||
/* OPAL types */
|
||||
#define OPAL_BYTE_OBJECT (opal_data_type_t) 19 /**< byte object structure */
|
||||
#define OPAL_DATA_TYPE (opal_data_type_t) 20 /**< data type */
|
||||
#define OPAL_NULL (opal_data_type_t) 21 /**< don't interpret data type */
|
||||
#define OPAL_PSTAT (opal_data_type_t) 22 /**< process statistics */
|
||||
#define OPAL_NODE_STAT (opal_data_type_t) 23 /**< node statistics */
|
||||
#define OPAL_HWLOC_TOPO (opal_data_type_t) 24 /**< hwloc topology */
|
||||
#define OPAL_VALUE (opal_data_type_t) 25 /**< opal value structure */
|
||||
#define OPAL_BUFFER (opal_data_type_t) 26 /**< pack the remaining contents of a buffer as an object */
|
||||
#define OPAL_PTR (opal_data_type_t) 27 /**< pointer to void* */
|
||||
#define OPAL_BYTE_OBJECT (opal_data_type_t) 20 /**< byte object structure */
|
||||
#define OPAL_DATA_TYPE (opal_data_type_t) 21 /**< data type */
|
||||
#define OPAL_NULL (opal_data_type_t) 22 /**< don't interpret data type */
|
||||
#define OPAL_PSTAT (opal_data_type_t) 23 /**< process statistics */
|
||||
#define OPAL_NODE_STAT (opal_data_type_t) 24 /**< node statistics */
|
||||
#define OPAL_HWLOC_TOPO (opal_data_type_t) 25 /**< hwloc topology */
|
||||
#define OPAL_VALUE (opal_data_type_t) 26 /**< opal value structure */
|
||||
#define OPAL_BUFFER (opal_data_type_t) 27 /**< pack the remaining contents of a buffer as an object */
|
||||
#define OPAL_PTR (opal_data_type_t) 28 /**< pointer to void* */
|
||||
|
||||
#define OPAL_DSS_ID_DYNAMIC (opal_data_type_t) 30
|
||||
|
||||
@ -120,6 +121,7 @@ typedef struct {
|
||||
uint64_t uint64;
|
||||
opal_byte_object_t bo;
|
||||
float fval;
|
||||
double dval;
|
||||
struct timeval tv;
|
||||
void *ptr; // never packed or passed anywhere
|
||||
} data;
|
||||
|
@ -425,6 +425,32 @@ int opal_dss_unpack_float(opal_buffer_t *buffer, void *dest,
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
int opal_dss_unpack_double(opal_buffer_t *buffer, void *dest,
|
||||
int32_t *num_vals, opal_data_type_t type)
|
||||
{
|
||||
int32_t i, n;
|
||||
double *desttmp = (double*) dest;
|
||||
int ret;
|
||||
char *convert;
|
||||
|
||||
OPAL_OUTPUT( ( opal_dss_verbose, "opal_dss_unpack_double * %d\n", (int)*num_vals ) );
|
||||
/* check to see if there's enough data in buffer */
|
||||
if (opal_dss_too_small(buffer, (*num_vals)*sizeof(double))) {
|
||||
return OPAL_ERR_UNPACK_READ_PAST_END_OF_BUFFER;
|
||||
}
|
||||
|
||||
/* unpack the data */
|
||||
for (i = 0; i < (*num_vals); ++i) {
|
||||
n=1;
|
||||
if (OPAL_SUCCESS != (ret = opal_dss_unpack_string(buffer, &convert, &n, OPAL_STRING))) {
|
||||
return ret;
|
||||
}
|
||||
desttmp[i] = strtod(convert, NULL);
|
||||
free(convert);
|
||||
}
|
||||
return OPAL_SUCCESS;
|
||||
}
|
||||
|
||||
int opal_dss_unpack_timeval(opal_buffer_t *buffer, void *dest,
|
||||
int32_t *num_vals, opal_data_type_t type)
|
||||
{
|
||||
@ -1024,6 +1050,11 @@ int opal_dss_unpack_value(opal_buffer_t *buffer, void *dest,
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case OPAL_DOUBLE:
|
||||
if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.dval, &m, OPAL_DOUBLE))) {
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
case OPAL_TIMEVAL:
|
||||
if (OPAL_SUCCESS != (ret = opal_dss_unpack_buffer(buffer, &ptr[i]->data.tv, &m, OPAL_TIMEVAL))) {
|
||||
return ret;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user