summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/H5D.c41
-rw-r--r--src/H5T.c2877
-rw-r--r--src/H5Tconv.c224
-rw-r--r--src/H5Tpkg.h20
-rw-r--r--src/H5Tprivate.h2
-rw-r--r--src/H5Tpublic.h10
6 files changed, 1673 insertions, 1501 deletions
diff --git a/src/H5D.c b/src/H5D.c
index 2c947c0..dac599c 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -832,10 +832,12 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
{
size_t nelmts ; /*number of elements */
uint8 *tconv_buf = NULL; /*data type conv buffer */
+ uint8 *bkg_buf = NULL; /*background buffer */
H5T_conv_t tconv_func = NULL; /*conversion function */
hid_t src_id = -1, dst_id = -1;/*temporary type atoms */
const H5P_conv_t *sconv_func = NULL; /*space conversion funcs*/
H5P_number_t numbering; /*element numbering info*/
+ void *cdata = NULL; /*type conversion data */
herr_t ret_value = FAIL;
FUNC_ENTER(H5D_read, FAIL);
@@ -863,7 +865,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
* Locate the type conversion function and data space conversion
* functions, and set up the element numbering information.
*/
- if (NULL == (tconv_func = H5T_find(dataset->type, mem_type))) {
+ if (NULL == (tconv_func = H5T_find(dataset->type, mem_type, &cdata))) {
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL,
"unable to convert between src and dest data types");
}
@@ -893,23 +895,31 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
size_t src_size = nelmts * H5T_get_size(dataset->type);
size_t dst_size = nelmts * H5T_get_size(mem_type);
tconv_buf = H5MM_xmalloc(MAX(src_size, dst_size));
+ bkg_buf = H5MM_xmalloc (dst_size);
}
#endif
/*
- * Gather the data from disk into the data type conversion buffer.
+ * Gather the data from disk into the data type conversion buffer. Also
+ * gather data from application to background buffer (this step is not
+ * needed for most conversions, but we leave that as an exercise for
+ * later ;-)
*/
if ((sconv_func->fgath)(dataset->ent.file, &(dataset->layout),
H5T_get_size (dataset->type), file_space,
&numbering, 0, nelmts,
tconv_buf/*out*/)!=nelmts) {
- HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "gather failed");
+ HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file gather failed");
+ }
+ if ((sconv_func->mgath)(buf, H5T_get_size (mem_type), mem_space,
+ &numbering, 0, nelmts, bkg_buf/*out*/)!=nelmts) {
+ HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "mem gather failed");
}
/*
* Perform data type conversion.
*/
- if ((tconv_func) (src_id, dst_id, nelmts, tconv_buf, NULL) < 0) {
+ if ((tconv_func) (src_id, dst_id, &cdata, nelmts, tconv_buf, bkg_buf)<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL,
"data type conversion failed");
}
@@ -919,7 +929,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
*/
if ((sconv_func->mscat)(tconv_buf, H5T_get_size (mem_type), mem_space,
&numbering, 0, nelmts, buf/*out*/)<0) {
- HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "scatter failed");
+ HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "scatter failed");
}
ret_value = SUCCEED;
@@ -927,6 +937,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
if (src_id >= 0) H5A_dec_ref(src_id);
if (dst_id >= 0) H5A_dec_ref(dst_id);
tconv_buf = H5MM_xfree(tconv_buf);
+ bkg_buf = H5MM_xfree (bkg_buf);
FUNC_LEAVE(ret_value);
}
@@ -954,10 +965,12 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
{
size_t nelmts;
uint8 *tconv_buf = NULL; /*data type conv buffer */
+ uint8 *bkg_buf = NULL; /*background buffer */
H5T_conv_t tconv_func = NULL; /*conversion function */
hid_t src_id = -1, dst_id = -1;/*temporary type atoms */
const H5P_conv_t *sconv_func = NULL; /*space conversion funcs*/
H5P_number_t numbering; /*element numbering info*/
+ void *cdata = NULL; /*type conversion data */
herr_t ret_value = FAIL;
FUNC_ENTER(H5D_write, FAIL);
@@ -985,7 +998,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
* Locate the type conversion function and data space conversion
* functions, and set up the element numbering information.
*/
- if (NULL == (tconv_func = H5T_find(mem_type, dataset->type))) {
+ if (NULL == (tconv_func = H5T_find(mem_type, dataset->type, &cdata))) {
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL,
"unable to convert between src and dest data types");
}
@@ -1015,22 +1028,31 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
size_t src_size = nelmts * H5T_get_size(mem_type);
size_t dst_size = nelmts * H5T_get_size(dataset->type);
tconv_buf = H5MM_xmalloc(MAX(src_size, dst_size));
+ bkg_buf = H5MM_xmalloc (dst_size);
}
#endif
/*
- * Gather data into the data type conversion buffer.
+ * Gather data from application buffer into the data type conversion
+ * buffer. Also gather data from the file into the background buffer
+ * (this step is not needed for most conversions, but we leave that as an
+ * exercise for later ;-)
*/
if ((sconv_func->mgath)(buf, H5T_get_size (mem_type), mem_space,
&numbering, 0, nelmts, tconv_buf/*out*/)!=nelmts) {
- HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "gather failed");
+ HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "mem gather failed");
+ }
+ if ((sconv_func->fgath)(dataset->ent.file, &(dataset->layout),
+ H5T_get_size (dataset->type), file_space,
+ &numbering, 0, nelmts, bkg_buf/*out*/)!=nelmts) {
+ HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "file gather failed");
}
/*
* Perform data type conversion.
*/
- if ((tconv_func) (src_id, dst_id, nelmts, tconv_buf, NULL) < 0) {
+ if ((tconv_func) (src_id, dst_id, &cdata, nelmts, tconv_buf, bkg_buf)<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL,
"data type conversion failed");
}
@@ -1049,5 +1071,6 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5P_t *mem_space,
if (src_id >= 0) H5A_dec_ref(src_id);
if (dst_id >= 0) H5A_dec_ref(dst_id);
tconv_buf = H5MM_xfree(tconv_buf);
+ bkg_buf = H5MM_xfree (bkg_buf);
FUNC_LEAVE(ret_value);
}
diff --git a/src/H5T.c b/src/H5T.c
index 4ecc200..87970bc 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -1,75 +1,75 @@
/****************************************************************************
-* NCSA HDF *
-* Software Development Group *
-* National Center for Supercomputing Applications *
-* University of Illinois at Urbana-Champaign *
-* 605 E. Springfield, Champaign IL 61820 *
-* *
-* For conditions of distribution and use, see the accompanying *
-* hdf/COPYING file. *
-* *
+* NCSA HDF *
+* Software Development Group *
+* National Center for Supercomputing Applications *
+* University of Illinois at Urbana-Champaign *
+* 605 E. Springfield, Champaign IL 61820 *
+* *
+* For conditions of distribution and use, see the accompanying *
+* hdf/COPYING file. *
+* *
****************************************************************************/
#ifdef RCSID
-static char RcsId[] = "@(#)$Revision$";
+static char RcsId[] = "@(#)$Revision$";
#endif
-#define H5T_PACKAGE /*suppress error about including H5Tpkg */
+#define H5T_PACKAGE /*suppress error about including H5Tpkg */
-#include <H5private.h> /*generic functions */
-#include <H5Aprivate.h> /*atom functions */
-#include <H5Eprivate.h> /*error handling */
-#include <H5Mprivate.h> /*meta data */
-#include <H5MMprivate.h> /*memory management */
-#include <H5Pprivate.h> /*data space */
-#include <H5Tpkg.h> /*data-type functions */
+#include <H5private.h> /*generic functions */
+#include <H5Aprivate.h> /*atom functions */
+#include <H5Eprivate.h> /*error handling */
+#include <H5Mprivate.h> /*meta data */
+#include <H5MMprivate.h> /*memory management */
+#include <H5Pprivate.h> /*data space */
+#include <H5Tpkg.h> /*data-type functions */
-#define PABLO_MASK H5T_mask
+#define PABLO_MASK H5T_mask
-#define H5T_COMPND_INC 64 /*typical max numb of members per struct */
+#define H5T_COMPND_INC 64 /*typical max numb of members per struct */
/* Interface initialization */
-static intn interface_initialize_g = FALSE;
+static intn interface_initialize_g = FALSE;
#define INTERFACE_INIT H5T_init_interface
-static void H5T_term_interface(void);
+static void H5T_term_interface(void);
/* Predefined types */
-hid_t H5T_NATIVE_CHAR_g = FAIL;
-hid_t H5T_NATIVE_UCHAR_g = FAIL;
-hid_t H5T_NATIVE_SHORT_g = FAIL;
-hid_t H5T_NATIVE_USHORT_g = FAIL;
-hid_t H5T_NATIVE_INT_g = FAIL;
-hid_t H5T_NATIVE_UINT_g = FAIL;
-hid_t H5T_NATIVE_LONG_g = FAIL;
-hid_t H5T_NATIVE_LLONG_g = FAIL;
-hid_t H5T_NATIVE_ULLONG_g = FAIL;
-hid_t H5T_NATIVE_HYPER_g = FAIL;
-hid_t H5T_NATIVE_UHYPER_g = FAIL;
-hid_t H5T_NATIVE_INT8_g = FAIL;
-hid_t H5T_NATIVE_UINT8_g = FAIL;
-hid_t H5T_NATIVE_INT16_g = FAIL;
-hid_t H5T_NATIVE_UINT16_g = FAIL;
-hid_t H5T_NATIVE_INT32_g = FAIL;
-hid_t H5T_NATIVE_UINT32_g = FAIL;
-hid_t H5T_NATIVE_INT64_g = FAIL;
-hid_t H5T_NATIVE_UINT64_g = FAIL;
-hid_t H5T_NATIVE_ULONG_g = FAIL;
-hid_t H5T_NATIVE_FLOAT_g = FAIL;
-hid_t H5T_NATIVE_DOUBLE_g = FAIL;
-hid_t H5T_NATIVE_TIME_g = FAIL;
-hid_t H5T_NATIVE_STRING_g = FAIL;
-hid_t H5T_NATIVE_BITFIELD_g = FAIL;
-hid_t H5T_NATIVE_OPAQUE_g = FAIL;
+hid_t H5T_NATIVE_CHAR_g = FAIL;
+hid_t H5T_NATIVE_UCHAR_g = FAIL;
+hid_t H5T_NATIVE_SHORT_g = FAIL;
+hid_t H5T_NATIVE_USHORT_g = FAIL;
+hid_t H5T_NATIVE_INT_g = FAIL;
+hid_t H5T_NATIVE_UINT_g = FAIL;
+hid_t H5T_NATIVE_LONG_g = FAIL;
+hid_t H5T_NATIVE_LLONG_g = FAIL;
+hid_t H5T_NATIVE_ULLONG_g = FAIL;
+hid_t H5T_NATIVE_HYPER_g = FAIL;
+hid_t H5T_NATIVE_UHYPER_g = FAIL;
+hid_t H5T_NATIVE_INT8_g = FAIL;
+hid_t H5T_NATIVE_UINT8_g = FAIL;
+hid_t H5T_NATIVE_INT16_g = FAIL;
+hid_t H5T_NATIVE_UINT16_g = FAIL;
+hid_t H5T_NATIVE_INT32_g = FAIL;
+hid_t H5T_NATIVE_UINT32_g = FAIL;
+hid_t H5T_NATIVE_INT64_g = FAIL;
+hid_t H5T_NATIVE_UINT64_g = FAIL;
+hid_t H5T_NATIVE_ULONG_g = FAIL;
+hid_t H5T_NATIVE_FLOAT_g = FAIL;
+hid_t H5T_NATIVE_DOUBLE_g = FAIL;
+hid_t H5T_NATIVE_TIME_g = FAIL;
+hid_t H5T_NATIVE_STRING_g = FAIL;
+hid_t H5T_NATIVE_BITFIELD_g = FAIL;
+hid_t H5T_NATIVE_OPAQUE_g = FAIL;
/* The path database */
-static intn H5T_npath_g = 0; /*num paths defined */
-static intn H5T_apath_g = 0; /*num slots allocated */
-static H5T_path_t *H5T_path_g = NULL; /*path array */
+static intn H5T_npath_g = 0; /*num paths defined */
+static intn H5T_apath_g = 0; /*num slots allocated */
+static H5T_path_t *H5T_path_g = NULL; /*path array */
/* The soft conversion function master list */
-static intn H5T_nsoft_g = 0; /*num soft funcs defined */
-static intn H5T_asoft_g = 0; /*num slots allocated */
-static H5T_soft_t *H5T_soft_g = NULL; /*master soft list */
+static intn H5T_nsoft_g = 0; /*num soft funcs defined */
+static intn H5T_asoft_g = 0; /*num slots allocated */
+static H5T_soft_t *H5T_soft_g = NULL; /*master soft list */
/*--------------------------------------------------------------------------
NAME
@@ -86,8 +86,8 @@ DESCRIPTION
herr_t
H5T_init_interface(void)
{
- H5T_t *dt = NULL;
- herr_t ret_value = SUCCEED;
+ H5T_t *dt = NULL;
+ herr_t ret_value = SUCCEED;
interface_initialize_g = TRUE;
FUNC_ENTER(H5T_init_interface, FAIL);
@@ -96,7 +96,7 @@ H5T_init_interface(void)
if ((ret_value = H5A_init_group(H5_DATATYPE, H5A_DATATYPEID_HASHSIZE,
H5T_RESERVED_ATOMS,
(herr_t (*)(void *)) H5T_close)) != FAIL) {
- ret_value = H5_add_exit(&H5T_term_interface);
+ ret_value = H5_add_exit(&H5T_term_interface);
}
/*
* Initialize pre-defined data types that depend on the architecture.
@@ -171,8 +171,8 @@ H5T_init_interface(void)
dt->u.atomic.lsb_pad = H5T_PAD_ZERO;
dt->u.atomic.msb_pad = H5T_PAD_ZERO;
if ((H5T_NATIVE_TIME_g = H5A_register(H5_DATATYPE, dt)) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "can't initialize H5T layer");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "can't initialize H5T layer");
}
/* STRING */
@@ -188,8 +188,8 @@ H5T_init_interface(void)
dt->u.atomic.u.s.cset = H5T_CSET_ASCII;
dt->u.atomic.u.s.pad = H5T_STR_NULL;
if ((H5T_NATIVE_STRING_g = H5A_register(H5_DATATYPE, dt)) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "can't initialize H5T layer");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "can't initialize H5T layer");
}
/* BITFIELD */
@@ -203,8 +203,8 @@ H5T_init_interface(void)
dt->u.atomic.lsb_pad = H5T_PAD_ZERO;
dt->u.atomic.msb_pad = H5T_PAD_ZERO;
if ((H5T_NATIVE_BITFIELD_g = H5A_register(H5_DATATYPE, dt)) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to initialize H5T layer");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to initialize H5T layer");
}
/* OPAQUE */
@@ -218,8 +218,8 @@ H5T_init_interface(void)
dt->u.atomic.lsb_pad = H5T_PAD_ZERO;
dt->u.atomic.msb_pad = H5T_PAD_ZERO;
if ((H5T_NATIVE_OPAQUE_g = H5A_register(H5_DATATYPE, dt)) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to initialize H5T layer");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to initialize H5T layer");
}
/*
@@ -236,12 +236,12 @@ H5T_init_interface(void)
* ending with the most specific.
*/
if (H5Tregister_soft(H5T_INTEGER, H5T_INTEGER, H5T_conv_order) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to register conversion function");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to register conversion function");
}
if (H5Tregister_soft(H5T_FLOAT, H5T_FLOAT, H5T_conv_order) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to register conversion function");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to register conversion function");
}
if (H5Tregister_soft (H5T_COMPOUND, H5T_COMPOUND, H5T_conv_struct)<0) {
HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL,
@@ -276,22 +276,22 @@ H5T_term_interface(void)
}
/*-------------------------------------------------------------------------
- * Function: H5Tcreate
+ * Function: H5Tcreate
*
- * Purpose: Create a new type and initialize it to reasonable values.
- * The type is a member of type class TYPE and is SIZE bytes.
+ * Purpose: Create a new type and initialize it to reasonable values.
+ * The type is a member of type class TYPE and is SIZE bytes.
*
- * Return: Success: A new type identifier.
+ * Return: Success: A new type identifier.
*
- * Failure: FAIL
+ * Failure: FAIL
*
* Errors:
- * ARGS BADVALUE Invalid size.
- * DATATYPE CANTINIT Can't create type.
- * DATATYPE CANTREGISTER Can't register data type atom.
+ * ARGS BADVALUE Invalid size.
+ * DATATYPE CANTINIT Can't create type.
+ * DATATYPE CANTREGISTER Can't register data type atom.
*
- * Programmer: Robb Matzke
- * Friday, December 5, 1997
+ * Programmer: Robb Matzke
+ * Friday, December 5, 1997
*
* Modifications:
*
@@ -300,40 +300,40 @@ H5T_term_interface(void)
hid_t
H5Tcreate(H5T_class_t type, size_t size)
{
- H5T_t *dt = NULL;
- hid_t ret_value = FAIL;
+ H5T_t *dt = NULL;
+ hid_t ret_value = FAIL;
FUNC_ENTER(H5Tcreate, FAIL);
/* check args */
if (size <= 0) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid size");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid size");
}
/* create the type */
if (NULL == (dt = H5T_create(type, size))) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't create type");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't create type");
}
/* Make it an atom */
if ((ret_value = H5A_register(H5_DATATYPE, dt)) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
- "can't register data type atom");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
+ "can't register data type atom");
}
FUNC_LEAVE(ret_value);
}
/*-------------------------------------------------------------------------
- * Function: H5Tcopy
+ * Function: H5Tcopy
*
- * Purpose: Copies a data type. The resulting data type is not locked.
- * The data type should be closed when no longer needed by
- * calling H5Tclose().
+ * Purpose: Copies a data type. The resulting data type is not locked.
+ * The data type should be closed when no longer needed by
+ * calling H5Tclose().
*
- * Return: Success: The ID of a new data type.
+ * Return: Success: The ID of a new data type.
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Tuesday, December 9, 1997
+ * Programmer: Robb Matzke
+ * Tuesday, December 9, 1997
*
* Modifications:
*
@@ -342,42 +342,42 @@ H5Tcreate(H5T_class_t type, size_t size)
hid_t
H5Tcopy(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_t *new_dt = NULL;
- hid_t ret_value = FAIL;
+ H5T_t *dt = NULL;
+ H5T_t *new_dt = NULL;
+ hid_t ret_value = FAIL;
FUNC_ENTER(H5Tcopy, FAIL);
H5ECLEAR;
/* check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ NULL == (dt = H5A_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
/* copy */
if (NULL == (new_dt = H5T_copy(dt))) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't copy");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't copy");
}
/* atomize result */
if ((ret_value = H5A_register(H5_DATATYPE, new_dt)) < 0) {
- H5T_close(new_dt);
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
- "can't register data type atom");
+ H5T_close(new_dt);
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
+ "can't register data type atom");
}
FUNC_LEAVE(ret_value);
}
/*-------------------------------------------------------------------------
- * Function: H5Tclose
+ * Function: H5Tclose
*
- * Purpose: Frees a data type and all associated memory.
+ * Purpose: Frees a data type and all associated memory.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Tuesday, December 9, 1997
+ * Programmer: Robb Matzke
+ * Tuesday, December 9, 1997
*
* Modifications:
*
@@ -386,39 +386,39 @@ H5Tcopy(hid_t type_id)
herr_t
H5Tclose(hid_t type_id)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tclose, FAIL);
H5ECLEAR;
/* check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ NULL == (dt = H5A_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "predefined data type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "predefined data type");
}
/* When the reference count reaches zero the resources are freed */
if (H5A_dec_ref(type_id) < 0) {
- HRETURN_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "problem freeing id");
+ HRETURN_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "problem freeing id");
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tequal
+ * Function: H5Tequal
*
- * Purpose: Determines if two data types are equal.
+ * Purpose: Determines if two data types are equal.
*
- * Return: Success: TRUE if equal, FALSE if unequal
+ * Return: Success: TRUE if equal, FALSE if unequal
*
- * Failure: FAIL
+ * Failure: FAIL
*
* Errors:
*
- * Programmer: Robb Matzke
- * Wednesday, December 10, 1997
+ * Programmer: Robb Matzke
+ * Wednesday, December 10, 1997
*
* Modifications:
*
@@ -427,18 +427,18 @@ H5Tclose(hid_t type_id)
hbool_t
H5Tequal(hid_t type1_id, hid_t type2_id)
{
- const H5T_t *dt1 = NULL;
- const H5T_t *dt2 = NULL;
- hbool_t ret_value = FAIL;
+ const H5T_t *dt1 = NULL;
+ const H5T_t *dt2 = NULL;
+ hbool_t ret_value = FAIL;
FUNC_ENTER(H5Tequal, FAIL);
/* check args */
if (H5_DATATYPE != H5A_group(type1_id) ||
- NULL == (dt1 = H5A_object(type1_id)) ||
- H5_DATATYPE != H5A_group(type2_id) ||
- NULL == (dt2 = H5A_object(type2_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ NULL == (dt1 = H5A_object(type1_id)) ||
+ H5_DATATYPE != H5A_group(type2_id) ||
+ NULL == (dt2 = H5A_object(type2_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
ret_value = (0 == H5T_cmp(dt1, dt2));
@@ -446,21 +446,21 @@ H5Tequal(hid_t type1_id, hid_t type2_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tlock
+ * Function: H5Tlock
*
- * Purpose: Locks a type, making it read only and non-destructable. This
- * is normally done by the library for predefined data types so
- * the application doesn't inadvertently change or delete a
- * predefined type.
+ * Purpose: Locks a type, making it read only and non-destructable. This
+ * is normally done by the library for predefined data types so
+ * the application doesn't inadvertently change or delete a
+ * predefined type.
*
- * Once a data type is locked it can never be unlocked.
+ * Once a data type is locked it can never be unlocked.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -469,31 +469,31 @@ H5Tequal(hid_t type1_id, hid_t type2_id)
herr_t
H5Tlock(hid_t type_id)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tlock, FAIL);
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ NULL == (dt = H5A_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
dt->locked = TRUE;
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_class
+ * Function: H5Tget_class
*
- * Purpose: Returns the data type class identifier for data type TYPE_ID.
+ * Purpose: Returns the data type class identifier for data type TYPE_ID.
*
- * Return: Success: One of the non-negative data type class
- * constants.
+ * Return: Success: One of the non-negative data type class
+ * constants.
*
- * Failure: H5T_NO_CLASS (-1, same as FAIL)
+ * Failure: H5T_NO_CLASS (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
*
* Modifications:
*
@@ -502,32 +502,32 @@ H5Tlock(hid_t type_id)
H5T_class_t
H5Tget_class(hid_t type_id)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tget_class, H5T_NO_CLASS);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NO_CLASS, "not a data type");
+ NULL == (dt = H5A_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NO_CLASS, "not a data type");
}
FUNC_LEAVE(dt->type);
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_size
+ * Function: H5Tget_size
*
- * Purpose: Determines the total size of a data type in bytes.
+ * Purpose: Determines the total size of a data type in bytes.
*
- * Return: Success: Size of the data type in bytes. The size of
- * data type is the size of an instance of that
- * data type.
+ * Return: Success: Size of the data type in bytes. The size of
+ * data type is the size of an instance of that
+ * data type.
*
- * Failure: 0 (valid data types are never zero size)
+ * Failure: 0 (valid data types are never zero size)
*
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
*
* Modifications:
*
@@ -536,16 +536,16 @@ H5Tget_class(hid_t type_id)
size_t
H5Tget_size(hid_t type_id)
{
- H5T_t *dt = NULL;
- size_t size;
+ H5T_t *dt = NULL;
+ size_t size;
FUNC_ENTER(H5Tget_size, 0);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a data type");
+ NULL == (dt = H5A_object(type_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a data type");
}
/* size */
size = H5T_get_size(dt);
@@ -554,28 +554,28 @@ H5Tget_size(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_size
+ * Function: H5Tset_size
*
- * Purpose: Sets the total size in bytes for an atomic data type (this
- * operation is not permitted on compound data types). If the
- * size is decreased so that the significant bits of the data
- * type extend beyond the edge of the new size, then the
- * `offset' property is decreased toward zero. If the `offset'
- * becomes zero and the significant bits of the data type still
- * hang over the edge of the new size, then the number of
- * significant bits is decreased.
+ * Purpose: Sets the total size in bytes for an atomic data type (this
+ * operation is not permitted on compound data types). If the
+ * size is decreased so that the significant bits of the data
+ * type extend beyond the edge of the new size, then the
+ * `offset' property is decreased toward zero. If the `offset'
+ * becomes zero and the significant bits of the data type still
+ * hang over the edge of the new size, then the number of
+ * significant bits is decreased.
*
- * Adjusting the size of an H5T_STRING automatically sets the
- * precision to 8*size.
+ * Adjusting the size of an H5T_STRING automatically sets the
+ * precision to 8*size.
*
- * All data types have a positive size.
+ * All data types have a positive size.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -584,74 +584,74 @@ H5Tget_size(hid_t type_id)
herr_t
H5Tset_size(hid_t type_id, size_t size)
{
- H5T_t *dt = NULL;
- size_t prec, offset;
+ H5T_t *dt = NULL;
+ size_t prec, offset;
FUNC_ENTER(H5Tset_size, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (size <= 0) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size must be positive");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size must be positive");
}
offset = dt->u.atomic.offset;
prec = dt->u.atomic.prec;
/* Decrement the offset and precision if necessary */
if (prec > 8 * size)
- offset = 0;
+ offset = 0;
else if (offset + prec > 8 * size)
- offset = 8 * size - prec;
+ offset = 8 * size - prec;
if (prec > 8 * size)
- prec = 8 * size;
+ prec = 8 * size;
/* Make sure that other values are still okay */
switch (dt->type) {
case H5T_INTEGER:
case H5T_TIME:
case H5T_BITFIELD:
- /* nothing to check */
- break;
+ /* nothing to check */
+ break;
case H5T_STRING:
- prec = 8 * size;
- offset = 0;
- break;
+ prec = 8 * size;
+ offset = 0;
+ break;
case H5T_FLOAT:
- /*
- * The sign, mantissa, and exponent fields should be adjusted first
- * when decreasing the size of a floating point type.
- */
- if (dt->u.atomic.u.f.sign >= prec ||
- dt->u.atomic.u.f.epos + dt->u.atomic.u.f.esize > prec ||
- dt->u.atomic.u.f.mpos + dt->u.atomic.u.f.msize > prec) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "adjust sign, mantissa, and exponent fields first");
- }
- break;
+ /*
+ * The sign, mantissa, and exponent fields should be adjusted first
+ * when decreasing the size of a floating point type.
+ */
+ if (dt->u.atomic.u.f.sign >= prec ||
+ dt->u.atomic.u.f.epos + dt->u.atomic.u.f.esize > prec ||
+ dt->u.atomic.u.f.mpos + dt->u.atomic.u.f.msize > prec) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "adjust sign, mantissa, and exponent fields first");
+ }
+ break;
case H5T_OPAQUE:
- /*
- * The significant bits of an opaque type are not allowed to change
- * implicitly.
- */
- if (prec != dt->u.atomic.prec) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "unable to change precision of an opaque type");
- }
- break;
+ /*
+ * The significant bits of an opaque type are not allowed to change
+ * implicitly.
+ */
+ if (prec != dt->u.atomic.prec) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "unable to change precision of an opaque type");
+ }
+ break;
default:
- assert("not implemented yet" && 0);
+ assert("not implemented yet" && 0);
}
/* Commit */
@@ -663,16 +663,16 @@ H5Tset_size(hid_t type_id, size_t size)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_order
+ * Function: H5Tget_order
*
- * Purpose: Returns the byte order of an atomic data type.
+ * Purpose: Returns the byte order of an atomic data type.
*
- * Return: Success: A byte order constant
+ * Return: Success: A byte order constant
*
- * Failure: H5T_ORDER_ERROR (-1, same as FAIL)
+ * Failure: H5T_ORDER_ERROR (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -681,18 +681,18 @@ H5Tset_size(hid_t type_id, size_t size)
H5T_order_t
H5Tget_order(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_order_t order;
+ H5T_t *dt = NULL;
+ H5T_order_t order;
FUNC_ENTER(H5Tget_order, H5T_ORDER_ERROR);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_ORDER_ERROR,
- "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_ORDER_ERROR,
+ "not an atomic data type");
}
/* order */
order = dt->u.atomic.order;
@@ -701,16 +701,16 @@ H5Tget_order(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_order
+ * Function: H5Tset_order
*
- * Purpose: Sets the byte order for an atomic data type.
+ * Purpose: Sets the byte order for an atomic data type.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -719,22 +719,22 @@ H5Tget_order(hid_t type_id)
herr_t
H5Tset_order(hid_t type_id, H5T_order_t order)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_order, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (order < 0 || order > H5T_ORDER_NONE) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal byte order");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal byte order");
}
/* order */
dt->u.atomic.order = order;
@@ -742,20 +742,20 @@ H5Tset_order(hid_t type_id, H5T_order_t order)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_precision
+ * Function: H5Tget_precision
*
- * Purpose: Gets the precision of an atomic data type. The precision is
- * the number of significant bits which, unless padding is
- * present, is 8 times larger than the value returned by
- * H5Tget_size().
+ * Purpose: Gets the precision of an atomic data type. The precision is
+ * the number of significant bits which, unless padding is
+ * present, is 8 times larger than the value returned by
+ * H5Tget_size().
*
- * Return: Success: Number of significant bits
+ * Return: Success: Number of significant bits
*
- * Failure: 0 (all atomic types have at least one
- * significant bit)
+ * Failure: 0 (all atomic types have at least one
+ * significant bit)
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -764,17 +764,17 @@ H5Tset_order(hid_t type_id, H5T_order_t order)
size_t
H5Tget_precision(hid_t type_id)
{
- H5T_t *dt = NULL;
- size_t prec;
+ H5T_t *dt = NULL;
+ size_t prec;
FUNC_ENTER(H5Tget_precision, 0);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not an atomic data type");
}
/* precision */
prec = dt->u.atomic.prec;
@@ -783,30 +783,30 @@ H5Tget_precision(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_precision
+ * Function: H5Tset_precision
*
- * Purpose: Sets the precision of an atomic data type. The precision is
- * the number of significant bits which, unless padding is
- * present, is 8 times larger than the value returned by
- * H5Tget_size().
+ * Purpose: Sets the precision of an atomic data type. The precision is
+ * the number of significant bits which, unless padding is
+ * present, is 8 times larger than the value returned by
+ * H5Tget_size().
*
- * If the precision is increased then the offset is decreased
- * and then the size is increased to insure that significant
- * bits do not "hang over" the edge of the data type.
+ * If the precision is increased then the offset is decreased
+ * and then the size is increased to insure that significant
+ * bits do not "hang over" the edge of the data type.
*
- * Changing the precision of an H5T_STRING automatically changes
- * the size as well. The precision must be a multiple of 8.
+ * Changing the precision of an H5T_STRING automatically changes
+ * the size as well. The precision must be a multiple of 8.
*
- * When decreasing the precision of a floating point type, set
- * the locations and sizes of the sign, mantissa, and exponent
- * fields first.
+ * When decreasing the precision of a floating point type, set
+ * the locations and sizes of the sign, mantissa, and exponent
+ * fields first.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -815,34 +815,34 @@ H5Tget_precision(hid_t type_id)
herr_t
H5Tset_precision(hid_t type_id, size_t prec)
{
- H5T_t *dt = NULL;
- size_t offset, size;
+ H5T_t *dt = NULL;
+ size_t offset, size;
FUNC_ENTER(H5Tset_prec, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (prec <= 0) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "precision must be positive");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "precision must be positive");
}
/* Adjust the offset and size */
offset = dt->u.atomic.offset;
size = dt->size;
if (prec > 8 * size)
- offset = 0;
+ offset = 0;
else if (offset + prec > 8 * size)
- offset = 8 * size - prec;
+ offset = 8 * size - prec;
if (prec > 8 * size)
- size = (prec + 7) / 8;
+ size = (prec + 7) / 8;
/* Check that things are still kosher */
switch (dt->type) {
@@ -850,33 +850,33 @@ H5Tset_precision(hid_t type_id, size_t prec)
case H5T_TIME:
case H5T_BITFIELD:
case H5T_OPAQUE:
- /* nothing to check */
- break;
+ /* nothing to check */
+ break;
case H5T_STRING:
- if (prec % 8) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "precision for this type must be a multiple of 8");
- }
- offset = 0;
- size = prec / 8;
- break;
+ if (prec % 8) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "precision for this type must be a multiple of 8");
+ }
+ offset = 0;
+ size = prec / 8;
+ break;
case H5T_FLOAT:
- /*
- * The sign, mantissa, and exponent fields should be adjusted first
- * when decreasing the precision of a floating point type.
- */
- if (dt->u.atomic.u.f.sign >= prec ||
- dt->u.atomic.u.f.epos + dt->u.atomic.u.f.esize > prec ||
- dt->u.atomic.u.f.mpos + dt->u.atomic.u.f.msize > prec) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "adjust sign, mantissa, and exponent fields first");
- }
- break;
+ /*
+ * The sign, mantissa, and exponent fields should be adjusted first
+ * when decreasing the precision of a floating point type.
+ */
+ if (dt->u.atomic.u.f.sign >= prec ||
+ dt->u.atomic.u.f.epos + dt->u.atomic.u.f.esize > prec ||
+ dt->u.atomic.u.f.mpos + dt->u.atomic.u.f.msize > prec) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "adjust sign, mantissa, and exponent fields first");
+ }
+ break;
default:
- assert("not implemented yet" && 0);
+ assert("not implemented yet" && 0);
}
/* Commit */
@@ -888,32 +888,32 @@ H5Tset_precision(hid_t type_id, size_t prec)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_offset
+ * Function: H5Tget_offset
*
- * Purpose: Retrieves the bit offset of the first significant bit. The
- * signficant bits of an atomic datum can be offset from the
- * beginning of the memory for that datum by an amount of
- * padding. The `offset' property specifies the number of bits
- * of padding that appear to the "right of" the value. That is,
- * if we have a 32-bit datum with 16-bits of precision having
- * the value 0x1122 then it will be layed out in memory as (from
- * small byte address toward larger byte addresses):
+ * Purpose: Retrieves the bit offset of the first significant bit. The
+ * signficant bits of an atomic datum can be offset from the
+ * beginning of the memory for that datum by an amount of
+ * padding. The `offset' property specifies the number of bits
+ * of padding that appear to the "right of" the value. That is,
+ * if we have a 32-bit datum with 16-bits of precision having
+ * the value 0x1122 then it will be layed out in memory as (from
+ * small byte address toward larger byte addresses):
*
- * Big Big Little Little
- * Endian Endian Endian Endian
- * offset=0 offset=16 offset=0 offset=16
+ * Big Big Little Little
+ * Endian Endian Endian Endian
+ * offset=0 offset=16 offset=0 offset=16
*
- * 0: [ pad] [0x11] [0x22] [ pad]
- * 1: [ pad] [0x22] [0x11] [ pad]
- * 2: [0x11] [ pad] [ pad] [0x22]
- * 3: [0x22] [ pad] [ pad] [0x11]
+ * 0: [ pad] [0x11] [0x22] [ pad]
+ * 1: [ pad] [0x22] [0x11] [ pad]
+ * 2: [0x11] [ pad] [ pad] [0x22]
+ * 3: [0x22] [ pad] [ pad] [0x11]
*
- * Return: Success: The offset
+ * Return: Success: The offset
*
- * Failure: 0
+ * Failure: 0
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -922,17 +922,17 @@ H5Tset_precision(hid_t type_id, size_t prec)
size_t
H5Tget_offset(hid_t type_id)
{
- H5T_t *dt = NULL;
- size_t offset;
+ H5T_t *dt = NULL;
+ size_t offset;
FUNC_ENTER(H5Tget_offset, 0);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not an atomic data type");
}
/* offset */
offset = dt->u.atomic.offset;
@@ -941,39 +941,39 @@ H5Tget_offset(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_offset
+ * Function: H5Tset_offset
*
- * Purpose: Sets the bit offset of the first significant bit. The
- * signficant bits of an atomic datum can be offset from the
- * beginning of the memory for that datum by an amount of
- * padding. The `offset' property specifies the number of bits
- * of padding that appear to the "right of" the value. That is,
- * if we have a 32-bit datum with 16-bits of precision having
- * the value 0x1122 then it will be layed out in memory as (from
- * small byte address toward larger byte addresses):
+ * Purpose: Sets the bit offset of the first significant bit. The
+ * signficant bits of an atomic datum can be offset from the
+ * beginning of the memory for that datum by an amount of
+ * padding. The `offset' property specifies the number of bits
+ * of padding that appear to the "right of" the value. That is,
+ * if we have a 32-bit datum with 16-bits of precision having
+ * the value 0x1122 then it will be layed out in memory as (from
+ * small byte address toward larger byte addresses):
*
- * Big Big Little Little
- * Endian Endian Endian Endian
- * offset=0 offset=16 offset=0 offset=16
+ * Big Big Little Little
+ * Endian Endian Endian Endian
+ * offset=0 offset=16 offset=0 offset=16
*
- * 0: [ pad] [0x11] [0x22] [ pad]
- * 1: [ pad] [0x22] [0x11] [ pad]
- * 2: [0x11] [ pad] [ pad] [0x22]
- * 3: [0x22] [ pad] [ pad] [0x11]
+ * 0: [ pad] [0x11] [0x22] [ pad]
+ * 1: [ pad] [0x22] [0x11] [ pad]
+ * 2: [0x11] [ pad] [ pad] [0x22]
+ * 3: [0x22] [ pad] [ pad] [0x11]
*
- * If the offset is incremented then the total size is
- * incremented also if necessary to prevent significant bits of
- * the value from hanging over the edge of the data type.
+ * If the offset is incremented then the total size is
+ * incremented also if necessary to prevent significant bits of
+ * the value from hanging over the edge of the data type.
*
- * The offset of an H5T_STRING cannot be set to anything but
- * zero.
+ * The offset of an H5T_STRING cannot be set to anything but
+ * zero.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -982,27 +982,27 @@ H5Tget_offset(hid_t type_id)
herr_t
H5Tset_offset(hid_t type_id, size_t offset)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_offset, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (H5T_STRING == dt->type && offset != 0) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "offset must be zero for this type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "offset must be zero for this type");
}
/* Adjust the size */
if (offset + dt->u.atomic.prec > 8 * dt->size) {
- dt->size = (offset + dt->u.atomic.prec + 7) / 8;
+ dt->size = (offset + dt->u.atomic.prec + 7) / 8;
}
/* Commit */
dt->u.atomic.offset = offset;
@@ -1011,18 +1011,18 @@ H5Tset_offset(hid_t type_id, size_t offset)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_pad
+ * Function: H5Tget_pad
*
- * Purpose: Gets the least significant pad type and the most significant
- * pad type and returns their values through the LSB and MSB
- * arguments, either of which may be the null pointer.
+ * Purpose: Gets the least significant pad type and the most significant
+ * pad type and returns their values through the LSB and MSB
+ * arguments, either of which may be the null pointer.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1031,37 +1031,37 @@ H5Tset_offset(hid_t type_id, size_t offset)
herr_t
H5Tget_pad(hid_t type_id, H5T_pad_t *lsb /*out */ , H5T_pad_t *msb /*out */ )
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tget_pad, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
}
/* Get values */
if (lsb)
- *lsb = dt->u.atomic.lsb_pad;
+ *lsb = dt->u.atomic.lsb_pad;
if (msb)
- *msb = dt->u.atomic.msb_pad;
+ *msb = dt->u.atomic.msb_pad;
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_pad
+ * Function: H5Tset_pad
*
- * Purpose: Sets the LSB and MSB pad types.
+ * Purpose: Sets the LSB and MSB pad types.
*
- * Return: Success:
+ * Return: Success:
*
- * Failure:
+ * Failure:
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1070,22 +1070,22 @@ H5Tget_pad(hid_t type_id, H5T_pad_t *lsb /*out */ , H5T_pad_t *msb /*out */ )
herr_t
H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_pad, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- !H5T_is_atomic(dt)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ !H5T_is_atomic(dt)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (lsb < 0 || lsb >= H5T_NPAD || msb < 0 || msb >= H5T_NPAD) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pad type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pad type");
}
dt->u.atomic.lsb_pad = lsb;
dt->u.atomic.msb_pad = msb;
@@ -1094,16 +1094,16 @@ H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_sign
+ * Function: H5Tget_sign
*
- * Purpose: Retrieves the sign type for an integer type.
+ * Purpose: Retrieves the sign type for an integer type.
*
- * Return: Success: The sign type.
+ * Return: Success: The sign type.
*
- * Failure: H5T_SGN_ERROR (-1, same as FAIL)
+ * Failure: H5T_SGN_ERROR (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1112,18 +1112,18 @@ H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
H5T_sign_t
H5Tget_sign(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_sign_t sign;
+ H5T_t *dt = NULL;
+ H5T_sign_t sign;
FUNC_ENTER(H5Tget_sign, H5T_SGN_ERROR);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_INTEGER != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_SGN_ERROR,
- "not an integer data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_INTEGER != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_SGN_ERROR,
+ "not an integer data type");
}
/* sign */
sign = dt->u.atomic.u.i.sign;
@@ -1132,16 +1132,16 @@ H5Tget_sign(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_sign
+ * Function: H5Tset_sign
*
- * Purpose: Sets the sign property for an integer.
+ * Purpose: Sets the sign property for an integer.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1150,22 +1150,22 @@ H5Tget_sign(hid_t type_id)
herr_t
H5Tset_sign(hid_t type_id, H5T_sign_t sign)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_sign, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_INTEGER != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an integer data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_INTEGER != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an integer data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (sign < 0 || sign >= H5T_NSGN) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal sign type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal sign type");
}
/* sign */
dt->u.atomic.u.i.sign = sign;
@@ -1173,22 +1173,22 @@ H5Tset_sign(hid_t type_id, H5T_sign_t sign)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_fields
+ * Function: H5Tget_fields
*
- * Purpose: Returns information about the locations of the various bit
- * fields of a floating point data type. The field positions
- * are bit positions in the significant region of the data type.
- * Bits are numbered with the least significant bit number zero.
+ * Purpose: Returns information about the locations of the various bit
+ * fields of a floating point data type. The field positions
+ * are bit positions in the significant region of the data type.
+ * Bits are numbered with the least significant bit number zero.
*
- * Any (or even all) of the arguments can be null pointers.
+ * Any (or even all) of the arguments can be null pointers.
*
- * Return: Success: SUCCEED, field locations and sizes are
- * returned through the arguments.
+ * Return: Success: SUCCEED, field locations and sizes are
+ * returned through the arguments.
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1196,53 +1196,53 @@ H5Tset_sign(hid_t type_id, H5T_sign_t sign)
*/
herr_t
H5Tget_fields(hid_t type_id, size_t *spos /*out */ ,
- size_t *epos /*out */ , size_t *esize /*out */ ,
- size_t *mpos /*out */ , size_t *msize /*out */ )
+ size_t *epos /*out */ , size_t *esize /*out */ ,
+ size_t *mpos /*out */ , size_t *msize /*out */ )
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tget_fields, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a floating-point data type");
}
/* Get values */
if (spos)
- *spos = dt->u.atomic.u.f.sign;
+ *spos = dt->u.atomic.u.f.sign;
if (epos)
- *epos = dt->u.atomic.u.f.epos;
+ *epos = dt->u.atomic.u.f.epos;
if (esize)
- *esize = dt->u.atomic.u.f.esize;
+ *esize = dt->u.atomic.u.f.esize;
if (mpos)
- *mpos = dt->u.atomic.u.f.mpos;
+ *mpos = dt->u.atomic.u.f.mpos;
if (msize)
- *msize = dt->u.atomic.u.f.msize;
+ *msize = dt->u.atomic.u.f.msize;
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_fields
+ * Function: H5Tset_fields
*
- * Purpose: Sets the locations and sizes of the various floating point
- * bit fields. The field positions are bit positions in the
- * significant region of the data type. Bits are numbered with
- * the least significant bit number zero.
+ * Purpose: Sets the locations and sizes of the various floating point
+ * bit fields. The field positions are bit positions in the
+ * significant region of the data type. Bits are numbered with
+ * the least significant bit number zero.
*
- * Fields are not allowed to extend beyond the number of bits of
- * precision, nor are they allowed to overlap with one another.
- *
- * Return: Success: SUCCEED
+ * Fields are not allowed to extend beyond the number of bits of
+ * precision, nor are they allowed to overlap with one another.
+ *
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1250,48 +1250,48 @@ H5Tget_fields(hid_t type_id, size_t *spos /*out */ ,
*/
herr_t
H5Tset_fields(hid_t type_id, size_t spos, size_t epos, size_t esize,
- size_t mpos, size_t msize)
+ size_t mpos, size_t msize)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_fields, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a floating-point data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (epos < 0 || epos + esize > dt->u.atomic.prec) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "exponent bit field size/location is invalid");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "exponent bit field size/location is invalid");
}
if (mpos < 0 || mpos + msize > dt->u.atomic.prec) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "mantissa bit field size/location is invalid");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "mantissa bit field size/location is invalid");
}
if (spos < 0 || spos >= dt->u.atomic.prec) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "sign location is not valid");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "sign location is not valid");
}
/* Check for overlap */
if (spos >= epos && spos < epos + esize) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "sign bit appears within exponent field");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "sign bit appears within exponent field");
}
if (spos >= mpos && spos < mpos + msize) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "sign bit appears within mantissa field");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "sign bit appears within mantissa field");
}
if ((mpos < epos && mpos + msize > epos) ||
- (epos < mpos && epos + esize > mpos)) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "exponent and mantissa fields overlap");
+ (epos < mpos && epos + esize > mpos)) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "exponent and mantissa fields overlap");
}
/* Commit */
dt->u.atomic.u.f.sign = spos;
@@ -1304,16 +1304,16 @@ H5Tset_fields(hid_t type_id, size_t spos, size_t epos, size_t esize,
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_ebias
+ * Function: H5Tget_ebias
*
- * Purpose: Retrieves the exponent bias of a floating-point type.
+ * Purpose: Retrieves the exponent bias of a floating-point type.
*
- * Return: Success: The bias
+ * Return: Success: The bias
*
- * Failure: 0
+ * Failure: 0
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1322,18 +1322,18 @@ H5Tset_fields(hid_t type_id, size_t spos, size_t epos, size_t esize,
size_t
H5Tget_ebias(hid_t type_id)
{
- H5T_t *dt = NULL;
- size_t ebias;
+ H5T_t *dt = NULL;
+ size_t ebias;
FUNC_ENTER(H5Tget_ebias, 0);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0,
+ "not a floating-point data type");
}
/* bias */
ebias = dt->u.atomic.u.f.ebias;
@@ -1342,16 +1342,16 @@ H5Tget_ebias(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_ebias
+ * Function: H5Tset_ebias
*
- * Purpose: Sets the exponent bias of a floating-point type.
+ * Purpose: Sets the exponent bias of a floating-point type.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1360,20 +1360,20 @@ H5Tget_ebias(hid_t type_id)
herr_t
H5Tset_ebias(hid_t type_id, size_t ebias)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_ebias, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a floating-point data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
dt->u.atomic.u.f.ebias = ebias;
@@ -1381,17 +1381,17 @@ H5Tset_ebias(hid_t type_id, size_t ebias)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_norm
+ * Function: H5Tget_norm
*
- * Purpose: Returns the mantisssa normalization of a floating-point data
- * type.
+ * Purpose: Returns the mantisssa normalization of a floating-point data
+ * type.
*
- * Return: Success: Normalization ID
+ * Return: Success: Normalization ID
*
- * Failure: H5T_NORM_ERROR (-1, same as FAIL)
+ * Failure: H5T_NORM_ERROR (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1400,18 +1400,18 @@ H5Tset_ebias(hid_t type_id, size_t ebias)
H5T_norm_t
H5Tget_norm(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_norm_t norm;
+ H5T_t *dt = NULL;
+ H5T_norm_t norm;
FUNC_ENTER(H5Tget_norm, H5T_NORM_ERROR);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NORM_ERROR,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NORM_ERROR,
+ "not a floating-point data type");
}
/* norm */
norm = dt->u.atomic.u.f.norm;
@@ -1420,17 +1420,17 @@ H5Tget_norm(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_norm
+ * Function: H5Tset_norm
*
- * Purpose: Sets the mantissa normalization method for a floating point
- * data type.
+ * Purpose: Sets the mantissa normalization method for a floating point
+ * data type.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1439,23 +1439,23 @@ H5Tget_norm(hid_t type_id)
herr_t
H5Tset_norm(hid_t type_id, H5T_norm_t norm)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_norm, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a floating-point data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (norm < 0 || norm > H5T_NORM_NONE) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal normalization");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal normalization");
}
/* norm */
dt->u.atomic.u.f.norm = norm;
@@ -1463,19 +1463,19 @@ H5Tset_norm(hid_t type_id, H5T_norm_t norm)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_inpad
+ * Function: H5Tget_inpad
*
- * Purpose: If any internal bits of a floating point type are unused
- * (that is, those significant bits which are not part of the
- * sign, exponent, or mantissa) then they will be filled
- * according to the value of this property.
+ * Purpose: If any internal bits of a floating point type are unused
+ * (that is, those significant bits which are not part of the
+ * sign, exponent, or mantissa) then they will be filled
+ * according to the value of this property.
*
- * Return: Success: The internal padding type.
+ * Return: Success: The internal padding type.
*
- * Failure: H5T_PAD_ERROR (-1, same as FAIL)
+ * Failure: H5T_PAD_ERROR (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1484,18 +1484,18 @@ H5Tset_norm(hid_t type_id, H5T_norm_t norm)
H5T_pad_t
H5Tget_inpad(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_pad_t pad;
+ H5T_t *dt = NULL;
+ H5T_pad_t pad;
FUNC_ENTER(H5Tget_inpad, H5T_PAD_ERROR);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_PAD_ERROR,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_PAD_ERROR,
+ "not a floating-point data type");
}
/* pad */
pad = dt->u.atomic.u.f.pad;
@@ -1504,19 +1504,19 @@ H5Tget_inpad(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_inpad
+ * Function: H5Tset_inpad
*
- * Purpose: If any internal bits of a floating point type are unused
- * (that is, those significant bits which are not part of the
- * sign, exponent, or mantissa) then they will be filled
- * according to the value of this property.
+ * Purpose: If any internal bits of a floating point type are unused
+ * (that is, those significant bits which are not part of the
+ * sign, exponent, or mantissa) then they will be filled
+ * according to the value of this property.
*
- * Return: Success:
+ * Return: Success:
*
- * Failure:
+ * Failure:
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1525,24 +1525,24 @@ H5Tget_inpad(hid_t type_id)
herr_t
H5Tset_inpad(hid_t type_id, H5T_pad_t pad)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_inpad, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_FLOAT != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
- "not a floating-point data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_FLOAT != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL,
+ "not a floating-point data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (pad < 0 || pad >= H5T_NPAD) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "illegal internal pad type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "illegal internal pad type");
}
/* pad */
dt->u.atomic.u.f.pad = pad;
@@ -1550,18 +1550,18 @@ H5Tset_inpad(hid_t type_id, H5T_pad_t pad)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_cset
+ * Function: H5Tget_cset
*
- * Purpose: HDF5 is able to distinguish between character sets of
- * different nationalities and to convert between them to the
- * extent possible.
- *
- * Return: Success: The character set of an H5T_STRING type.
+ * Purpose: HDF5 is able to distinguish between character sets of
+ * different nationalities and to convert between them to the
+ * extent possible.
+ *
+ * Return: Success: The character set of an H5T_STRING type.
*
- * Failure: H5T_CSET_ERROR (-1, same as FAIL)
+ * Failure: H5T_CSET_ERROR (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1570,18 +1570,18 @@ H5Tset_inpad(hid_t type_id, H5T_pad_t pad)
H5T_cset_t
H5Tget_cset(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_cset_t cset;
+ H5T_t *dt = NULL;
+ H5T_cset_t cset;
FUNC_ENTER(H5Tget_cset, H5T_CSET_ERROR);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_STRING != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_CSET_ERROR,
- "not a string data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_STRING != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_CSET_ERROR,
+ "not a string data type");
}
/* result */
cset = dt->u.atomic.u.s.cset;
@@ -1590,18 +1590,18 @@ H5Tget_cset(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_cset
+ * Function: H5Tset_cset
*
- * Purpose: HDF5 is able to distinguish between character sets of
- * different nationalities and to convert between them to the
- * extent possible.
+ * Purpose: HDF5 is able to distinguish between character sets of
+ * different nationalities and to convert between them to the
+ * extent possible.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1610,23 +1610,23 @@ H5Tget_cset(hid_t type_id)
herr_t
H5Tset_cset(hid_t type_id, H5T_cset_t cset)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_cset, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_STRING != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a string data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_STRING != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a string data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (cset < 0 || cset >= H5T_NCSET) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "illegal character set type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "illegal character set type");
}
/* set */
dt->u.atomic.u.s.cset = cset;
@@ -1634,19 +1634,19 @@ H5Tset_cset(hid_t type_id, H5T_cset_t cset)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_strpad
+ * Function: H5Tget_strpad
*
- * Purpose: The method used to store character strings differs with the
- * programming language: C usually null terminates strings while
- * Fortran left-justifies and space-pads strings. This property
- * defines the storage mechanism for the string.
- *
- * Return: Success: The character set of an H5T_STRING type.
+ * Purpose: The method used to store character strings differs with the
+ * programming language: C usually null terminates strings while
+ * Fortran left-justifies and space-pads strings. This property
+ * defines the storage mechanism for the string.
+ *
+ * Return: Success: The character set of an H5T_STRING type.
*
- * Failure: H5T_STR_ERROR (-1, same as FAIL)
+ * Failure: H5T_STR_ERROR (-1, same as FAIL)
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1655,18 +1655,18 @@ H5Tset_cset(hid_t type_id, H5T_cset_t cset)
H5T_str_t
H5Tget_strpad(hid_t type_id)
{
- H5T_t *dt = NULL;
- H5T_str_t strpad;
+ H5T_t *dt = NULL;
+ H5T_str_t strpad;
FUNC_ENTER(H5Tget_strpad, H5T_STR_ERROR);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_STRING != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_STR_ERROR,
- "not a string data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_STRING != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_STR_ERROR,
+ "not a string data type");
}
/* result */
strpad = dt->u.atomic.u.s.pad;
@@ -1675,19 +1675,19 @@ H5Tget_strpad(hid_t type_id)
}
/*-------------------------------------------------------------------------
- * Function: H5Tset_strpad
+ * Function: H5Tset_strpad
*
- * Purpose: The method used to store character strings differs with the
- * programming language: C usually null terminates strings while
- * Fortran left-justifies and space-pads strings. This property
- * defines the storage mechanism for the string.
+ * Purpose: The method used to store character strings differs with the
+ * programming language: C usually null terminates strings while
+ * Fortran left-justifies and space-pads strings. This property
+ * defines the storage mechanism for the string.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -1696,22 +1696,22 @@ H5Tget_strpad(hid_t type_id)
herr_t
H5Tset_strpad(hid_t type_id, H5T_str_t strpad)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tset_strpad, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_STRING != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a string data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_STRING != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a string data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
}
if (strpad < 0 || strpad >= H5T_NSTR) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal string pad type");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal string pad type");
}
/* set */
dt->u.atomic.u.s.pad = strpad;
@@ -1719,19 +1719,19 @@ H5Tset_strpad(hid_t type_id, H5T_str_t strpad)
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_nmembers
+ * Function: H5Tget_nmembers
*
- * Purpose: Determines how many members compound data type TYPE_ID has.
+ * Purpose: Determines how many members compound data type TYPE_ID has.
*
- * Return: Success: Number of members defined in a compound data
- * type.
+ * Return: Success: Number of members defined in a compound data
+ * type.
*
- * Failure: FAIL
+ * Failure: FAIL
*
* Errors:
*
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
*
* Modifications:
*
@@ -1741,77 +1741,77 @@ intn
H5Tget_nmembers(hid_t type_id)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tget_num_members, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_COMPOUND != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_COMPOUND != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
}
FUNC_LEAVE(dt->u.compnd.nmembs);
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_member_name
+ * Function: H5Tget_member_name
*
- * Purpose: Returns the name of a member of a compound data type.
- * Members are stored in no particular order with numbers 0
- * through N-1 where N is the value returned by
- * H5Tget_nmembers().
+ * Purpose: Returns the name of a member of a compound data type.
+ * Members are stored in no particular order with numbers 0
+ * through N-1 where N is the value returned by
+ * H5Tget_nmembers().
*
- * Return: Success: Ptr to a string allocated with malloc(). The
- * caller is responsible for freeing the string.
+ * Return: Success: Ptr to a string allocated with malloc(). The
+ * caller is responsible for freeing the string.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
-char *
+char *
H5Tget_member_name(hid_t type_id, int membno)
{
- H5T_t *dt = NULL;
- char *s = NULL;
+ H5T_t *dt = NULL;
+ char *s = NULL;
FUNC_ENTER(H5Tget_member_name, NULL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_COMPOUND != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a compound data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_COMPOUND != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a compound data type");
}
if (membno < 0 || membno >= dt->u.compnd.nmembs) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid member number");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid member number");
}
s = H5MM_xstrdup(dt->u.compnd.memb[membno].name);
FUNC_LEAVE(s);
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_member_offset
+ * Function: H5Tget_member_offset
*
- * Purpose: Returns the byte offset of the beginning of a member with
- * respect to the beginning of the compound data type datum.
+ * Purpose: Returns the byte offset of the beginning of a member with
+ * respect to the beginning of the compound data type datum.
*
- * Return: Success: Byte offset.
+ * Return: Success: Byte offset.
*
- * Failure: Zero. Zero is a valid offset, but this
- * function will fail only if a call to
- * H5Tget_member_dims() fails with the same
- * arguments.
+ * Failure: Zero. Zero is a valid offset, but this
+ * function will fail only if a call to
+ * H5Tget_member_dims() fails with the same
+ * arguments.
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1820,39 +1820,39 @@ H5Tget_member_name(hid_t type_id, int membno)
size_t
H5Tget_member_offset(hid_t type_id, int membno)
{
- H5T_t *dt = NULL;
- size_t offset = 0;
+ H5T_t *dt = NULL;
+ size_t offset = 0;
FUNC_ENTER(H5Tget_member_offset, 0);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_COMPOUND != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a compound data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_COMPOUND != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a compound data type");
}
if (membno < 0 || membno >= dt->u.compnd.nmembs) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid member number");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid member number");
}
offset = dt->u.compnd.memb[membno].offset;
FUNC_LEAVE(offset);
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_member_dims
+ * Function: H5Tget_member_dims
*
- * Purpose: Returns the dimensionality of the member. The dimensions and
- * permuation vector are returned through arguments DIMS and
- * PERM, both arrays of at least four elements. Either (or even
- * both) may be null pointers.
+ * Purpose: Returns the dimensionality of the member. The dimensions and
+ * permuation vector are returned through arguments DIMS and
+ * PERM, both arrays of at least four elements. Either (or even
+ * both) may be null pointers.
*
- * Return: Success: A value between zero and four, inclusive.
+ * Return: Success: A value between zero and four, inclusive.
*
- * Failure: -1
+ * Failure: -1
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1860,49 +1860,49 @@ H5Tget_member_offset(hid_t type_id, int membno)
*/
int
H5Tget_member_dims(hid_t type_id, int membno,
- int dims[] /*out */ , int perm[] /*out */ )
+ int dims[] /*out */ , int perm[] /*out */ )
{
- H5T_t *dt = NULL;
- intn ndims, i;
+ H5T_t *dt = NULL;
+ intn ndims, i;
FUNC_ENTER(H5Tget_member_dims, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_COMPOUND != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_COMPOUND != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
}
if (membno < 0 || membno >= dt->u.compnd.nmembs) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid member number");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid member number");
}
ndims = dt->u.compnd.memb[membno].ndims;
for (i = 0; i < ndims; i++) {
- if (dims[i])
- dims[i] = dt->u.compnd.memb[membno].dim[i];
- if (perm[i])
- perm[i] = dt->u.compnd.memb[membno].perm[i];
+ if (dims[i])
+ dims[i] = dt->u.compnd.memb[membno].dim[i];
+ if (perm[i])
+ perm[i] = dt->u.compnd.memb[membno].perm[i];
}
FUNC_LEAVE(ndims);
}
/*-------------------------------------------------------------------------
- * Function: H5Tget_member_type
+ * Function: H5Tget_member_type
*
- * Purpose: Returns the data type of the specified member. The caller
- * should invoke H5Tclose() to release resources associated with
- * the type.
+ * Purpose: Returns the data type of the specified member. The caller
+ * should invoke H5Tclose() to release resources associated with
+ * the type.
*
- * Return: Success: An OID of a copy of the member data type;
- * modifying the returned data type does not
- * modify the member type.
+ * Return: Success: An OID of a copy of the member data type;
+ * modifying the returned data type does not
+ * modify the member type.
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -1911,57 +1911,57 @@ H5Tget_member_dims(hid_t type_id, int membno,
hid_t
H5Tget_member_type(hid_t type_id, int membno)
{
- H5T_t *dt = NULL, *memb_dt = NULL;
- hid_t memb_type_id;
+ H5T_t *dt = NULL, *memb_dt = NULL;
+ hid_t memb_type_id;
FUNC_ENTER(H5Tget_member_type, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_COMPOUND != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_COMPOUND != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
}
if (membno < 0 || membno >= dt->u.compnd.nmembs) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid member number");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid member number");
}
/* Copy data type into an atom */
if (NULL == (memb_dt = H5T_copy(&(dt->u.compnd.memb[membno].type)))) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to copy member data type");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to copy member data type");
}
if ((memb_type_id = H5A_register(H5_DATATYPE, memb_dt)) < 0) {
- H5T_close(memb_dt);
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
- "can't register data type atom");
+ H5T_close(memb_dt);
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
+ "can't register data type atom");
}
FUNC_LEAVE(memb_type_id);
}
/*-------------------------------------------------------------------------
- * Function: H5Tinsert
+ * Function: H5Tinsert
*
- * Purpose: Adds another member to the compound data type PARENT_ID. The
- * new member has a NAME which must be unique within the
- * compound data type. The OFFSET argument defines the start of
- * the member in an instance of the compound data type, and
- * MEMBER_ID is the type of the new member.
+ * Purpose: Adds another member to the compound data type PARENT_ID. The
+ * new member has a NAME which must be unique within the
+ * compound data type. The OFFSET argument defines the start of
+ * the member in an instance of the compound data type, and
+ * MEMBER_ID is the type of the new member.
*
- * Note: All members of a compound data type must be atomic; a
- * compound data type cannot have a member which is a compound
- * data type.
+ * Note: All members of a compound data type must be atomic; a
+ * compound data type cannot have a member which is a compound
+ * data type.
*
- * Return: Success: SUCCEED, the PARENT_ID compound data type is
- * modified to include a copy of the member type
- * MEMBER_ID.
+ * Return: Success: SUCCEED, the PARENT_ID compound data type is
+ * modified to include a copy of the member type
+ * MEMBER_ID.
*
- * Failure: FAIL
+ * Failure: FAIL
*
* Errors:
*
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
*
* Modifications:
*
@@ -1970,47 +1970,47 @@ H5Tget_member_type(hid_t type_id, int membno)
herr_t
H5Tinsert(hid_t parent_id, const char *name, off_t offset, hid_t member_id)
{
- H5T_t *parent = NULL; /*the compound parent data type */
- H5T_t *member = NULL; /*the atomic member type */
+ H5T_t *parent = NULL; /*the compound parent data type */
+ H5T_t *member = NULL; /*the atomic member type */
FUNC_ENTER(H5Tinsert, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(parent_id) ||
- NULL == (parent = H5A_object(parent_id)) ||
- H5T_COMPOUND != parent->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
+ NULL == (parent = H5A_object(parent_id)) ||
+ H5T_COMPOUND != parent->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
}
if (parent->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "parent type read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "parent type read-only");
}
if (!name || !*name) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no member name");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no member name");
}
if (H5_DATATYPE != H5A_group(member_id) ||
- NULL == (member = H5A_object(member_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ NULL == (member = H5A_object(member_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
if (H5T_insert(parent, name, offset, member) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL,
- "can't insert member");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL,
+ "can't insert member");
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tpack
+ * Function: H5Tpack
*
- * Purpose: Recursively removes padding from within a compound data type
- * to make it more efficient (space-wise) to store that data.
+ * Purpose: Recursively removes padding from within a compound data type
+ * to make it more efficient (space-wise) to store that data.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -2019,47 +2019,47 @@ H5Tinsert(hid_t parent_id, const char *name, off_t offset, hid_t member_id)
herr_t
H5Tpack(hid_t type_id)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5Tpack, FAIL);
H5ECLEAR;
/* Check args */
if (H5_DATATYPE != H5A_group(type_id) ||
- NULL == (dt = H5A_object(type_id)) ||
- H5T_COMPOUND != dt->type) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
+ NULL == (dt = H5A_object(type_id)) ||
+ H5T_COMPOUND != dt->type) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound data type");
}
if (dt->locked) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "data type is read-only");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "data type is read-only");
}
if (H5T_pack(dt) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to pack compound data type");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to pack compound data type");
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tregister_hard
+ * Function: H5Tregister_hard
*
- * Purpose: Register a hard conversion function for a data type
- * conversion path. The path is specified by the source and
- * destination data types SRC_ID and DST_ID. A conversion path
- * can only have one hard function, so FUNC replaces any
- * previous hard function.
+ * Purpose: Register a hard conversion function for a data type
+ * conversion path. The path is specified by the source and
+ * destination data types SRC_ID and DST_ID. A conversion path
+ * can only have one hard function, so FUNC replaces any
+ * previous hard function.
*
- * If FUNC is the null pointer then any hard function registered
- * for this path is removed from this path. The soft functions
- * are then used when determining which conversion function is
- * appropriate for this path.
+ * If FUNC is the null pointer then any hard function registered
+ * for this path is removed from this path. The soft functions
+ * are then used when determining which conversion function is
+ * appropriate for this path.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Friday, January 9, 1998
+ * Programmer: Robb Matzke
+ * Friday, January 9, 1998
*
* Modifications:
*
@@ -2068,23 +2068,23 @@ H5Tpack(hid_t type_id)
herr_t
H5Tregister_hard(hid_t src_id, hid_t dst_id, H5T_conv_t func)
{
- H5T_t *src = NULL;
- H5T_t *dst = NULL;
- H5T_path_t *path = NULL;
+ H5T_t *src = NULL;
+ H5T_t *dst = NULL;
+ H5T_path_t *path = NULL;
FUNC_ENTER(H5Tregister_hard, FAIL);
/* Check args */
if (H5_DATATYPE != H5A_group(src_id) ||
- NULL == (src = H5A_object(src_id)) ||
- H5_DATATYPE != H5A_group(dst_id) ||
- NULL == (dst = H5A_object(dst_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+ NULL == (src = H5A_object(src_id)) ||
+ H5_DATATYPE != H5A_group(dst_id) ||
+ NULL == (dst = H5A_object(dst_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
/* Locate or create a new conversion path */
if (NULL == (path = H5T_path_find(src, dst, TRUE))) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to locate/allocate conversion path");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to locate/allocate conversion path");
}
/* Initialize the hard function */
path->hard = func;
@@ -2092,18 +2092,18 @@ H5Tregister_hard(hid_t src_id, hid_t dst_id, H5T_conv_t func)
}
/*-------------------------------------------------------------------------
- * Function: H5Tregister_soft
+ * Function: H5Tregister_soft
*
- * Purpose: Registers a soft conversion function by adding it to the end
- * of the master soft list and replacing the soft function in
- * all applicable existing conversion paths.
+ * Purpose: Registers a soft conversion function by adding it to the end
+ * of the master soft list and replacing the soft function in
+ * all applicable existing conversion paths.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Tuesday, January 13, 1998
+ * Programmer: Robb Matzke
+ * Tuesday, January 13, 1998
*
* Modifications:
*
@@ -2112,25 +2112,26 @@ H5Tregister_hard(hid_t src_id, hid_t dst_id, H5T_conv_t func)
herr_t
H5Tregister_soft(H5T_class_t src_cls, H5T_class_t dst_cls, H5T_conv_t func)
{
- intn i;
- hid_t src_id, dst_id;
+ intn i;
+ hid_t src_id, dst_id;
FUNC_ENTER(H5Tregister_soft, FAIL);
/* Check args */
if (src_cls < 0 || src_cls >= H5T_NCLASSES ||
- dst_cls < 0 || dst_cls >= H5T_NCLASSES) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "illegal source or destination data type class");
+ dst_cls < 0 || dst_cls >= H5T_NCLASSES) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "illegal source or destination data type class");
}
if (!func) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "no soft conversion function specified");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
+ "no soft conversion function specified");
}
/* Add function to end of master list */
if (H5T_nsoft_g >= H5T_asoft_g) {
- H5T_asoft_g = MAX(32, 2 * H5T_asoft_g);
- H5T_soft_g = H5MM_xrealloc(H5T_soft_g, H5T_asoft_g * sizeof(H5T_soft_t));
+ H5T_asoft_g = MAX(32, 2 * H5T_asoft_g);
+ H5T_soft_g = H5MM_xrealloc(H5T_soft_g,
+ H5T_asoft_g * sizeof(H5T_soft_t));
}
H5T_soft_g[H5T_nsoft_g].src = src_cls;
H5T_soft_g[H5T_nsoft_g].dst = dst_cls;
@@ -2139,45 +2140,49 @@ H5Tregister_soft(H5T_class_t src_cls, H5T_class_t dst_cls, H5T_conv_t func)
/* Replace soft functions of all appropriate paths */
for (i = 0; i < H5T_npath_g; i++) {
- H5T_path_t *path = H5T_path_g + i;
-
- /*
- * Type conversion functions are app-level, so we need to convert the
- * data type temporarily to an object id before we query the functions
- * capabilities.
- */
- if (path->src->type != src_cls || path->dst->type != dst_cls)
- continue;
- if ((src_id = H5A_register(H5_DATATYPE, H5T_copy(path->src))) < 0 ||
- (dst_id = H5A_register(H5_DATATYPE, H5T_copy(path->dst))) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
- "unable to register data types for conv query");
- }
- if ((func) (src_id, dst_id, 0, NULL, NULL) >= 0) {
- path->soft = func;
- }
- H5A_dec_ref(src_id);
- H5A_dec_ref(dst_id);
- H5ECLEAR;
+ H5T_path_t *path = H5T_path_g + i;
+ void *cdata = NULL;
+
+ /*
+ * Type conversion functions are app-level, so we need to convert the
+ * data type temporarily to an object id before we query the functions
+ * capabilities.
+ */
+ if (path->src->type != src_cls || path->dst->type != dst_cls) {
+ continue;
+ }
+ if ((src_id = H5A_register(H5_DATATYPE, H5T_copy(path->src))) < 0 ||
+ (dst_id = H5A_register(H5_DATATYPE, H5T_copy(path->dst))) < 0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
+ "unable to register data types for conv query");
+ }
+ if ((func) (src_id, dst_id, &cdata, 0, NULL, NULL) >= 0) {
+ path->soft = func;
+ H5MM_xfree (path->cdata);
+ path->cdata = cdata;
+ }
+ H5A_dec_ref(src_id);
+ H5A_dec_ref(dst_id);
+ H5ECLEAR;
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5Tunregister
+ * Function: H5Tunregister
*
- * Purpose: Removes FUNC from all conversion paths. If FUNC is
- * registered as the soft conversion function of a path then it
- * is replaced with some other soft conversion function from the
- * master soft list if one applies.
+ * Purpose: Removes FUNC from all conversion paths. If FUNC is
+ * registered as the soft conversion function of a path then it
+ * is replaced with some other soft conversion function from the
+ * master soft list if one applies.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Tuesday, January 13, 1998
+ * Programmer: Robb Matzke
+ * Tuesday, January 13, 1998
*
* Modifications:
*
@@ -2186,101 +2191,117 @@ H5Tregister_soft(H5T_class_t src_cls, H5T_class_t dst_cls, H5T_conv_t func)
herr_t
H5Tunregister(H5T_conv_t func)
{
- intn i, j;
- H5T_path_t *path = NULL;
- hid_t src_id, dst_id;
+ intn i, j;
+ H5T_path_t *path = NULL;
+ hid_t src_id, dst_id;
FUNC_ENTER(H5Tunregister, FAIL);
/* Check args */
if (!func) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no conversion function");
+ HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no conversion function");
}
/* Remove function from master soft list */
- for (i = H5T_nsoft_g - 1; i >= 0; --i) {
- if (H5T_soft_g[i].func == func) {
- HDmemmove(H5T_soft_g + i, H5T_soft_g + i + 1,
- (H5T_nsoft_g - (i + 1)) * sizeof(H5T_soft_t));
- --H5T_nsoft_g;
- }
+ for (i=H5T_nsoft_g-1; i>=0; --i) {
+ if (H5T_soft_g[i].func == func) {
+ HDmemmove(H5T_soft_g+i, H5T_soft_g+i+1,
+ (H5T_nsoft_g - (i+1)) * sizeof(H5T_soft_t));
+ --H5T_nsoft_g;
+ }
}
/* Remove function from all conversion paths */
- for (i = 0; i < H5T_npath_g; i++) {
- path = H5T_path_g + i;
-
- /* Reset hard function */
- if (path->hard == func) {
- path->hard = NULL;
- }
- /* Reset soft function */
- if (path->soft == func) {
- path->soft = NULL;
- for (j = H5T_nsoft_g - 1; j >= 0 && !path->soft; --j) {
- if (path->src->type != H5T_soft_g[j].src ||
- path->dst->type != H5T_soft_g[j].dst) {
- continue;
- }
- /*
- * Conversion functions are app-level, so temporarily create
- * object id's for the data types.
- */
- if ((src_id = H5A_register(H5_DATATYPE,
+ for (i=0; i<H5T_npath_g; i++) {
+ path = H5T_path_g + i;
+
+ /* Reset hard function */
+ if (path->hard == func) {
+ path->hard = NULL;
+ }
+
+ /* Reset soft function */
+ if (path->soft == func) {
+ path->soft = NULL;
+ path->cdata = H5MM_xfree (path->cdata);
+
+ for (j=H5T_nsoft_g-1; j>=0 && !path->soft; --j) {
+ void *cdata = NULL;
+
+ if (path->src->type != H5T_soft_g[j].src ||
+ path->dst->type != H5T_soft_g[j].dst) {
+ continue;
+ }
+ /*
+ * Conversion functions are app-level, so temporarily create
+ * object id's for the data types.
+ */
+ if ((src_id = H5A_register(H5_DATATYPE,
H5T_copy(path->src))) < 0 ||
- (dst_id = H5A_register(H5_DATATYPE,
+ (dst_id = H5A_register(H5_DATATYPE,
H5T_copy(path->dst))) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
- "unable to register conv types for query");
- }
- if ((H5T_soft_g[j].func) (src_id, dst_id, 0, NULL, NULL) >= 0) {
- path->soft = H5T_soft_g[j].func;
- }
- H5A_dec_ref(src_id);
- H5A_dec_ref(dst_id);
- H5ECLEAR;
- }
- }
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL,
+ "unable to register conv types for query");
+ }
+ if ((H5T_soft_g[j].func)(src_id, dst_id, &cdata, 0,
+ NULL, NULL) >= 0) {
+ path->soft = H5T_soft_g[j].func;
+ path->cdata = cdata;
+ }
+ H5A_dec_ref(src_id);
+ H5A_dec_ref(dst_id);
+ H5ECLEAR;
+ }
+ }
}
FUNC_LEAVE(SUCCEED);
}
-
+
/*-------------------------------------------------------------------------
- * Function: H5Tfind
+ * Function: H5Tfind
*
- * Purpose: Finds a conversion function that can handle a conversion from
- * type SRC_ID to type DST_ID.
+ * Purpose: Finds a conversion function that can handle a conversion from
+ * type SRC_ID to type DST_ID. The PCDATA argument is a pointer
+ * to a pointer to type conversion data which was created and
+ * initialized by the soft type conversion function of this path
+ * when the conversion function was installed on the path.
*
- * Return: Success: A pointer to a suitable conversion function.
+ * Return: Success: A pointer to a suitable conversion function.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * Tuesday, January 13, 1998
+ * Programmer: Robb Matzke
+ * Tuesday, January 13, 1998
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
H5T_conv_t
-H5Tfind(hid_t src_id, hid_t dst_id)
+H5Tfind(hid_t src_id, hid_t dst_id, void **pcdata)
{
- H5T_conv_t ret_value = NULL;
- H5T_t *src = NULL, *dst = NULL;
+ H5T_conv_t ret_value = NULL;
+ H5T_t *src = NULL, *dst = NULL;
FUNC_ENTER(H5Tfind, NULL);
/* Check args */
if (H5_DATATYPE != H5A_group(src_id) ||
- NULL == (src = H5A_object(src_id)) ||
- H5_DATATYPE != H5A_group(dst_id) ||
- NULL == (dst = H5A_object(dst_id))) {
- HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type");
+ NULL == (src = H5A_object(src_id)) ||
+ H5_DATATYPE != H5A_group(dst_id) ||
+ NULL == (dst = H5A_object(dst_id))) {
+ HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type");
+ }
+ if (!pcdata) {
+ HRETURN_ERROR (H5E_ARGS, H5E_BADVALUE, NULL,
+ "no address to receive cdata pointer");
}
+
/* Find it */
- if (NULL == (ret_value = H5T_find(src, dst))) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL,
- "conversion function not found");
+ *pcdata = NULL;
+ if (NULL == (ret_value = H5T_find(src, dst, pcdata))) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL,
+ "conversion function not found");
}
FUNC_LEAVE(ret_value);
}
@@ -2289,29 +2310,29 @@ H5Tfind(hid_t src_id, hid_t dst_id)
* API functions are above; library-private functions are below...
*-------------------------------------------------------------------------
*/
-
+
/*-------------------------------------------------------------------------
- * Function: H5T_create
+ * Function: H5T_create
*
- * Purpose: Creates a new data type and initializes it to reasonable
- * values. The new data type is SIZE bytes and an instance of
- * the class TYPE.
+ * Purpose: Creates a new data type and initializes it to reasonable
+ * values. The new data type is SIZE bytes and an instance of
+ * the class TYPE.
*
- * Return: Success: Pointer to the new type.
+ * Return: Success: Pointer to the new type.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * Friday, December 5, 1997
+ * Programmer: Robb Matzke
+ * Friday, December 5, 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
-H5T_t *
+H5T_t *
H5T_create(H5T_class_t type, size_t size)
{
- H5T_t *dt = NULL;
+ H5T_t *dt = NULL;
FUNC_ENTER(H5T_create, NULL);
@@ -2324,17 +2345,17 @@ H5T_create(H5T_class_t type, size_t size)
case H5T_STRING:
case H5T_BITFIELD:
case H5T_OPAQUE:
- HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL,
- "type class is not appropriate - use H5Tcopy()");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL,
+ "type class is not appropriate - use H5Tcopy()");
case H5T_COMPOUND:
- dt = H5MM_xcalloc(1, sizeof(H5T_t));
- dt->type = type;
- break;
+ dt = H5MM_xcalloc(1, sizeof(H5T_t));
+ dt->type = type;
+ break;
default:
- HRETURN_ERROR(H5E_INTERNAL, H5E_UNSUPPORTED, NULL,
- "unknown data type class");
+ HRETURN_ERROR(H5E_INTERNAL, H5E_UNSUPPORTED, NULL,
+ "unknown data type class");
}
dt->size = size;
@@ -2342,28 +2363,28 @@ H5T_create(H5T_class_t type, size_t size)
}
/*-------------------------------------------------------------------------
- * Function: H5T_copy
+ * Function: H5T_copy
*
- * Purpose: Copies datatype OLD_DT. The resulting data type is not
- * locked.
+ * Purpose: Copies datatype OLD_DT. The resulting data type is not
+ * locked.
*
- * Return: Success: Pointer to a new copy of the OLD_DT argument.
+ * Return: Success: Pointer to a new copy of the OLD_DT argument.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * Thursday, December 4, 1997
+ * Programmer: Robb Matzke
+ * Thursday, December 4, 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
-H5T_t *
+H5T_t *
H5T_copy(const H5T_t *old_dt)
{
- H5T_t *new_dt = NULL;
- intn i;
- char *s;
+ H5T_t *new_dt = NULL;
+ intn i;
+ char *s;
FUNC_ENTER(H5T_copy, NULL);
@@ -2376,29 +2397,29 @@ H5T_copy(const H5T_t *old_dt)
new_dt->locked = FALSE;
if (H5T_COMPOUND == new_dt->type) {
- new_dt->u.compnd.memb = H5MM_xmalloc(new_dt->u.compnd.nmembs *
- sizeof(H5T_member_t));
- HDmemcpy(new_dt->u.compnd.memb, old_dt->u.compnd.memb,
- new_dt->u.compnd.nmembs * sizeof(H5T_member_t));
- for (i = 0; i < new_dt->u.compnd.nmembs; i++) {
- s = new_dt->u.compnd.memb[i].name;
- new_dt->u.compnd.memb[i].name = H5MM_xstrdup(s);
- }
+ new_dt->u.compnd.memb = H5MM_xmalloc(new_dt->u.compnd.nmembs *
+ sizeof(H5T_member_t));
+ HDmemcpy(new_dt->u.compnd.memb, old_dt->u.compnd.memb,
+ new_dt->u.compnd.nmembs * sizeof(H5T_member_t));
+ for (i = 0; i < new_dt->u.compnd.nmembs; i++) {
+ s = new_dt->u.compnd.memb[i].name;
+ new_dt->u.compnd.memb[i].name = H5MM_xstrdup(s);
+ }
}
FUNC_LEAVE(new_dt);
}
/*-------------------------------------------------------------------------
- * Function: H5T_close
+ * Function: H5T_close
*
- * Purpose: Frees a data type and all associated memory.
+ * Purpose: Frees a data type and all associated memory.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
*
* Modifications:
*
@@ -2407,7 +2428,7 @@ H5T_copy(const H5T_t *old_dt)
herr_t
H5T_close(H5T_t *dt)
{
- intn i;
+ intn i;
FUNC_ENTER(H5T_close, FAIL);
@@ -2415,29 +2436,29 @@ H5T_close(H5T_t *dt)
assert(!dt->locked);
if (dt && H5T_COMPOUND == dt->type) {
- for (i = 0; i < dt->u.compnd.nmembs; i++) {
- H5MM_xfree(dt->u.compnd.memb[i].name);
- }
- H5MM_xfree(dt->u.compnd.memb);
- H5MM_xfree(dt);
+ for (i = 0; i < dt->u.compnd.nmembs; i++) {
+ H5MM_xfree(dt->u.compnd.memb[i].name);
+ }
+ H5MM_xfree(dt->u.compnd.memb);
+ H5MM_xfree(dt);
} else if (dt) {
- H5MM_xfree(dt);
+ H5MM_xfree(dt);
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5T_is_atomic
+ * Function: H5T_is_atomic
*
- * Purpose: Determines if a data type is an atomic type.
+ * Purpose: Determines if a data type is an atomic type.
*
- * Return: Success: TRUE, FALSE
+ * Return: Success: TRUE, FALSE
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -2454,18 +2475,18 @@ H5T_is_atomic(const H5T_t *dt)
}
/*-------------------------------------------------------------------------
- * Function: H5T_get_size
+ * Function: H5T_get_size
*
- * Purpose: Determines the total size of a data type in bytes.
+ * Purpose: Determines the total size of a data type in bytes.
*
- * Return: Success: Size of the data type in bytes. The size of
- * the data type is the size of an instance of
- * that data type.
+ * Return: Success: Size of the data type in bytes. The size of
+ * the data type is the size of an instance of
+ * that data type.
*
- * Failure: 0 (valid data types are never zero size)
+ * Failure: 0 (valid data types are never zero size)
*
- * Programmer: Robb Matzke
- * Tuesday, December 9, 1997
+ * Programmer: Robb Matzke
+ * Tuesday, December 9, 1997
*
* Modifications:
*
@@ -2483,19 +2504,19 @@ H5T_get_size(const H5T_t *dt)
}
/*-------------------------------------------------------------------------
- * Function: H5T_insert
+ * Function: H5T_insert
*
- * Purpose: Adds a new MEMBER to the compound data type PARENT. The new
- * member will have a NAME that is unique within PARENT and an
- * instance of PARENT will have the member begin at byte offset
- * OFFSET from the beginning.
+ * Purpose: Adds a new MEMBER to the compound data type PARENT. The new
+ * member will have a NAME that is unique within PARENT and an
+ * instance of PARENT will have the member begin at byte offset
+ * OFFSET from the beginning.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Monday, December 8, 1997
+ * Programmer: Robb Matzke
+ * Monday, December 8, 1997
*
* Modifications:
*
@@ -2504,8 +2525,8 @@ H5T_get_size(const H5T_t *dt)
herr_t
H5T_insert(H5T_t *parent, const char *name, off_t offset, const H5T_t *member)
{
- intn i;
- H5T_t *tmp = NULL;
+ intn i;
+ H5T_t *tmp = NULL;
FUNC_ENTER(H5T_insert, FAIL);
@@ -2517,36 +2538,36 @@ H5T_insert(H5T_t *parent, const char *name, off_t offset, const H5T_t *member)
/* Does NAME already exist in PARENT? */
for (i = 0; i < parent->u.compnd.nmembs; i++) {
- if (!HDstrcmp(parent->u.compnd.memb[i].name, name)) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL,
- "member name is not unique");
- }
+ if (!HDstrcmp(parent->u.compnd.memb[i].name, name)) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL,
+ "member name is not unique");
+ }
}
/* Does the new member overlap any existing member ? */
for (i = 0; i < parent->u.compnd.nmembs; i++) {
- if ((offset < parent->u.compnd.memb[i].offset &&
- offset + member->size > parent->u.compnd.memb[i].offset) ||
- (parent->u.compnd.memb[i].offset < offset &&
- parent->u.compnd.memb[i].offset +
- parent->u.compnd.memb[i].type.size > offset)) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL,
- "member overlaps with another member");
- }
+ if ((offset < parent->u.compnd.memb[i].offset &&
+ offset + member->size > parent->u.compnd.memb[i].offset) ||
+ (parent->u.compnd.memb[i].offset < offset &&
+ parent->u.compnd.memb[i].offset +
+ parent->u.compnd.memb[i].type.size > offset)) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL,
+ "member overlaps with another member");
+ }
}
/* Increase member array if necessary */
if (parent->u.compnd.nmembs >= parent->u.compnd.nalloc) {
- parent->u.compnd.nalloc += H5T_COMPND_INC;
- parent->u.compnd.memb = H5MM_xrealloc(parent->u.compnd.memb,
- (parent->u.compnd.nalloc *
- sizeof(H5T_member_t)));
+ parent->u.compnd.nalloc += H5T_COMPND_INC;
+ parent->u.compnd.memb = H5MM_xrealloc(parent->u.compnd.memb,
+ (parent->u.compnd.nalloc *
+ sizeof(H5T_member_t)));
}
/* Add member to end of member array */
i = parent->u.compnd.nmembs;
parent->u.compnd.memb[i].name = H5MM_xstrdup(name);
parent->u.compnd.memb[i].offset = offset;
- parent->u.compnd.memb[i].ndims = 0; /*defaults to scalar */
+ parent->u.compnd.memb[i].ndims = 0; /*defaults to scalar */
tmp = H5T_copy(member);
parent->u.compnd.memb[i].type = *tmp;
@@ -2557,17 +2578,17 @@ H5T_insert(H5T_t *parent, const char *name, off_t offset, const H5T_t *member)
}
/*-------------------------------------------------------------------------
- * Function: H5T_pack
+ * Function: H5T_pack
*
- * Purpose: Recursively packs a compound data type by removing padding
- * bytes. This is done in place (that is, destructively).
+ * Purpose: Recursively packs a compound data type by removing padding
+ * bytes. This is done in place (that is, destructively).
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -2576,8 +2597,8 @@ H5T_insert(H5T_t *parent, const char *name, off_t offset, const H5T_t *member)
herr_t
H5T_pack(H5T_t *dt)
{
- int i;
- size_t offset;
+ int i;
+ size_t offset;
FUNC_ENTER(H5T_pack, FAIL);
@@ -2585,40 +2606,40 @@ H5T_pack(H5T_t *dt)
assert(!dt->locked);
if (H5T_COMPOUND == dt->type) {
- /* Recursively pack the members */
- for (i = 0; i < dt->u.compnd.nmembs; i++) {
- if (H5T_pack(&(dt->u.compnd.memb[i].type)) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
- "unable to pack part of a compound data type");
- }
- }
-
- /* Remove padding between members */
- H5T_sort_by_offset(dt);
- for (i = 0, offset = 0; i < dt->u.compnd.nmembs; i++) {
- dt->u.compnd.memb[i].offset = offset;
- offset += dt->u.compnd.memb[i].type.size;
- }
-
- /* Change total size */
- dt->size = MAX(1, offset);
+ /* Recursively pack the members */
+ for (i = 0; i < dt->u.compnd.nmembs; i++) {
+ if (H5T_pack(&(dt->u.compnd.memb[i].type)) < 0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
+ "unable to pack part of a compound data type");
+ }
+ }
+
+ /* Remove padding between members */
+ H5T_sort_by_offset(dt);
+ for (i = 0, offset = 0; i < dt->u.compnd.nmembs; i++) {
+ dt->u.compnd.memb[i].offset = offset;
+ offset += dt->u.compnd.memb[i].type.size;
+ }
+
+ /* Change total size */
+ dt->size = MAX(1, offset);
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
- * Function: H5T_sort_by_offset
+ * Function: H5T_sort_by_offset
*
- * Purpose: Sorts the members of a compound data type by their offsets.
- * This even works for locked data types since it doesn't change
- * the value of the type.
+ * Purpose: Sorts the members of a compound data type by their offsets.
+ * This even works for locked data types since it doesn't change
+ * the value of the type.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -2627,8 +2648,8 @@ H5T_pack(H5T_t *dt)
herr_t
H5T_sort_by_offset(H5T_t *dt)
{
- int i, j, nmembs;
- hbool_t swapped;
+ int i, j, nmembs;
+ hbool_t swapped;
FUNC_ENTER(H5T_sort_by_offset, FAIL);
@@ -2639,20 +2660,20 @@ H5T_sort_by_offset(H5T_t *dt)
/* Use a bubble sort because we can short circuit */
nmembs = dt->u.compnd.nmembs;
for (i=nmembs-1, swapped=TRUE; i>0 && swapped; --i) {
- for (j=0, swapped=FALSE; j<i; j++) {
- if (dt->u.compnd.memb[j].offset > dt->u.compnd.memb[j+1].offset) {
- H5T_member_t tmp = dt->u.compnd.memb[j];
- dt->u.compnd.memb[j] = dt->u.compnd.memb[j+1];
- dt->u.compnd.memb[j+1] = tmp;
- swapped = 1;
- }
- }
+ for (j=0, swapped=FALSE; j<i; j++) {
+ if (dt->u.compnd.memb[j].offset > dt->u.compnd.memb[j+1].offset) {
+ H5T_member_t tmp = dt->u.compnd.memb[j];
+ dt->u.compnd.memb[j] = dt->u.compnd.memb[j+1];
+ dt->u.compnd.memb[j+1] = tmp;
+ swapped = 1;
+ }
+ }
}
#ifndef NDEBUG
/* I never trust a sort :-) */
for (i = 0; i < dt->u.compnd.nmembs - 1; i++) {
- assert(dt->u.compnd.memb[i].offset < dt->u.compnd.memb[i + 1].offset);
+ assert(dt->u.compnd.memb[i].offset < dt->u.compnd.memb[i + 1].offset);
}
#endif
@@ -2660,18 +2681,18 @@ H5T_sort_by_offset(H5T_t *dt)
}
/*-------------------------------------------------------------------------
- * Function: H5T_cmp
+ * Function: H5T_cmp
*
- * Purpose: Compares two data types.
+ * Purpose: Compares two data types.
*
- * Return: Success: 0 if DT1 and DT2 are equal.
- * <0 if DT1 is less than DT2.
- * >0 if DT1 is greater than DT2.
+ * Return: Success: 0 if DT1 and DT2 are equal.
+ * <0 if DT1 is less than DT2.
+ * >0 if DT1 is greater than DT2.
*
- * Failure: 0, never fails
+ * Failure: 0, never fails
*
- * Programmer: Robb Matzke
- * Wednesday, December 10, 1997
+ * Programmer: Robb Matzke
+ * Wednesday, December 10, 1997
*
* Modifications:
*
@@ -2680,10 +2701,10 @@ H5T_sort_by_offset(H5T_t *dt)
intn
H5T_cmp(const H5T_t *dt1, const H5T_t *dt2)
{
- intn *idx1 = NULL, *idx2 = NULL;
- intn ret_value = 0;
- intn i, j, tmp;
- hbool_t swapped;
+ intn *idx1 = NULL, *idx2 = NULL;
+ intn ret_value = 0;
+ intn i, j, tmp;
+ hbool_t swapped;
FUNC_ENTER(H5T_equal, 0);
@@ -2692,230 +2713,210 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2)
assert(dt2);
/* the easy case */
- if (dt1 == dt2)
- HGOTO_DONE(0);
+ if (dt1 == dt2) HGOTO_DONE(0);
/* compare */
- if (dt1->type < dt2->type)
- HGOTO_DONE(-1);
- if (dt1->type > dt2->type)
- HGOTO_DONE(1);
+ if (dt1->type < dt2->type) HGOTO_DONE(-1);
+ if (dt1->type > dt2->type) HGOTO_DONE(1);
- if (dt1->size < dt2->size)
- HGOTO_DONE(-1);
- if (dt1->size > dt2->size)
- HGOTO_DONE(1);
+ if (dt1->size < dt2->size) HGOTO_DONE(-1);
+ if (dt1->size > dt2->size) HGOTO_DONE(1);
if (H5T_COMPOUND == dt1->type) {
- /*
- * Compound data types...
- */
- if (dt1->u.compnd.nmembs < dt2->u.compnd.nmembs)
- HGOTO_DONE(-1);
- if (dt1->u.compnd.nmembs > dt2->u.compnd.nmembs)
- HGOTO_DONE(1);
-
- /* Build an index for each type so the names are sorted */
- idx1 = H5MM_xmalloc(dt1->u.compnd.nmembs * sizeof(intn));
- idx2 = H5MM_xmalloc(dt1->u.compnd.nmembs * sizeof(intn));
- for (i = 0; i < dt1->u.compnd.nmembs; i++)
- idx1[i] = idx2[i] = i;
- for (i = dt1->u.compnd.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i) {
- for (j = 0, swapped = FALSE; j < i; j++) {
- if (HDstrcmp(dt1->u.compnd.memb[idx1[j]].name,
- dt1->u.compnd.memb[idx1[j + 1]].name) > 0) {
- tmp = idx1[j];
- idx1[j] = idx1[j + 1];
- idx1[j + 1] = tmp;
- swapped = TRUE;
- }
- }
- }
- for (i = dt1->u.compnd.nmembs - 1, swapped = TRUE; swapped && i >= 0; --i) {
- for (j = 0, swapped = FALSE; j < i; j++) {
- if (HDstrcmp(dt2->u.compnd.memb[idx2[j]].name,
- dt2->u.compnd.memb[idx2[j + 1]].name) > 0) {
- tmp = idx2[j];
- idx2[j] = idx2[j + 1];
- idx2[j + 1] = tmp;
- swapped = TRUE;
- }
- }
- }
+ /*
+ * Compound data types...
+ */
+ if (dt1->u.compnd.nmembs < dt2->u.compnd.nmembs) HGOTO_DONE(-1);
+ if (dt1->u.compnd.nmembs > dt2->u.compnd.nmembs) HGOTO_DONE(1);
+
+ /* Build an index for each type so the names are sorted */
+ idx1 = H5MM_xmalloc(dt1->u.compnd.nmembs * sizeof(intn));
+ idx2 = H5MM_xmalloc(dt1->u.compnd.nmembs * sizeof(intn));
+ for (i=0; i<dt1->u.compnd.nmembs; i++) idx1[i] = idx2[i] = i;
+ for (i=dt1->u.compnd.nmembs-1, swapped=TRUE; swapped && i>=0; --i) {
+ for (j=0, swapped=FALSE; j<i; j++) {
+ if (HDstrcmp(dt1->u.compnd.memb[idx1[j]].name,
+ dt1->u.compnd.memb[idx1[j+1]].name) > 0) {
+ tmp = idx1[j];
+ idx1[j] = idx1[j+1];
+ idx1[j+1] = tmp;
+ swapped = TRUE;
+ }
+ }
+ }
+ for (i=dt2->u.compnd.nmembs-1, swapped=TRUE; swapped && i>=0; --i) {
+ for (j=0, swapped=FALSE; j<i; j++) {
+ if (HDstrcmp(dt2->u.compnd.memb[idx2[j]].name,
+ dt2->u.compnd.memb[idx2[j+1]].name) > 0) {
+ tmp = idx2[j];
+ idx2[j] = idx2[j+1];
+ idx2[j+1] = tmp;
+ swapped = TRUE;
+ }
+ }
+ }
#ifndef NDEBUG
- /* I don't quite trust the code above yet :-) --RPM */
- for (i = 0; i < dt1->u.compnd.nmembs; i++) {
- assert(HDstrcmp(dt1->u.compnd.memb[idx1[i]].name,
- dt1->u.compnd.memb[idx1[i + 1]].name));
- assert(HDstrcmp(dt2->u.compnd.memb[idx2[i]].name,
- dt2->u.compnd.memb[idx2[i + 1]].name));
- }
+ /* I don't quite trust the code above yet :-) --RPM */
+ for (i=0; i<dt1->u.compnd.nmembs-1; i++) {
+ assert(HDstrcmp(dt1->u.compnd.memb[idx1[i]].name,
+ dt1->u.compnd.memb[idx1[i + 1]].name));
+ assert(HDstrcmp(dt2->u.compnd.memb[idx2[i]].name,
+ dt2->u.compnd.memb[idx2[i + 1]].name));
+ }
#endif
- /* Compare the members */
- for (i = 0; i < dt1->u.compnd.nmembs; i++) {
- tmp = HDstrcmp(dt1->u.compnd.memb[idx1[i]].name,
- dt2->u.compnd.memb[idx2[i]].name);
- if (tmp < 0)
- HGOTO_DONE(-1);
- if (tmp > 0)
- HGOTO_DONE(1);
-
- if (dt1->u.compnd.memb[idx1[i]].offset <
- dt2->u.compnd.memb[idx2[i]].offset)
- HGOTO_DONE(-1);
- if (dt1->u.compnd.memb[idx1[i]].offset >
- dt2->u.compnd.memb[idx2[i]].offset)
- HGOTO_DONE(1);
-
- if (dt1->u.compnd.memb[idx1[i]].ndims <
- dt2->u.compnd.memb[idx2[i]].ndims)
- HGOTO_DONE(-1);
- if (dt1->u.compnd.memb[idx1[i]].ndims >
- dt2->u.compnd.memb[idx2[i]].ndims)
- HGOTO_DONE(1);
-
- for (j = 0; j < dt1->u.compnd.memb[idx1[i]].ndims; j++) {
- if (dt1->u.compnd.memb[idx1[i]].dim[j] <
- dt2->u.compnd.memb[idx2[i]].dim[j])
- HGOTO_DONE(-1);
- if (dt1->u.compnd.memb[idx1[i]].dim[j] >
- dt2->u.compnd.memb[idx2[i]].dim[j])
- HGOTO_DONE(1);
- }
-
- for (j = 0; j < dt1->u.compnd.memb[idx1[i]].ndims; j++) {
- if (dt1->u.compnd.memb[idx1[i]].perm[j] <
- dt2->u.compnd.memb[idx2[i]].perm[j])
- HGOTO_DONE(-1);
- if (dt1->u.compnd.memb[idx1[i]].perm[j] >
- dt2->u.compnd.memb[idx2[i]].perm[j])
- HGOTO_DONE(1);
- }
-
- tmp = H5T_cmp(&(dt1->u.compnd.memb[idx1[i]].type),
- &(dt2->u.compnd.memb[idx2[i]].type));
- if (tmp < 0)
- HGOTO_DONE(-1);
- if (tmp > 0)
- HGOTO_DONE(1);
- }
+ /* Compare the members */
+ for (i=0; i<dt1->u.compnd.nmembs; i++) {
+ tmp = HDstrcmp(dt1->u.compnd.memb[idx1[i]].name,
+ dt2->u.compnd.memb[idx2[i]].name);
+ if (tmp < 0) HGOTO_DONE(-1);
+ if (tmp > 0) HGOTO_DONE(1);
+
+ if (dt1->u.compnd.memb[idx1[i]].offset <
+ dt2->u.compnd.memb[idx2[i]].offset) HGOTO_DONE(-1);
+ if (dt1->u.compnd.memb[idx1[i]].offset >
+ dt2->u.compnd.memb[idx2[i]].offset) HGOTO_DONE(1);
+
+ if (dt1->u.compnd.memb[idx1[i]].ndims <
+ dt2->u.compnd.memb[idx2[i]].ndims) HGOTO_DONE(-1);
+ if (dt1->u.compnd.memb[idx1[i]].ndims >
+ dt2->u.compnd.memb[idx2[i]].ndims) HGOTO_DONE(1);
+
+ for (j=0; j<dt1->u.compnd.memb[idx1[i]].ndims; j++) {
+ if (dt1->u.compnd.memb[idx1[i]].dim[j] <
+ dt2->u.compnd.memb[idx2[i]].dim[j]) HGOTO_DONE(-1);
+ if (dt1->u.compnd.memb[idx1[i]].dim[j] >
+ dt2->u.compnd.memb[idx2[i]].dim[j]) HGOTO_DONE(1);
+ }
+
+ for (j=0; j<dt1->u.compnd.memb[idx1[i]].ndims; j++) {
+ if (dt1->u.compnd.memb[idx1[i]].perm[j] <
+ dt2->u.compnd.memb[idx2[i]].perm[j]) HGOTO_DONE(-1);
+ if (dt1->u.compnd.memb[idx1[i]].perm[j] >
+ dt2->u.compnd.memb[idx2[i]].perm[j]) HGOTO_DONE(1);
+ }
+
+ tmp = H5T_cmp(&(dt1->u.compnd.memb[idx1[i]].type),
+ &(dt2->u.compnd.memb[idx2[i]].type));
+ if (tmp < 0) HGOTO_DONE(-1);
+ if (tmp > 0) HGOTO_DONE(1);
+ }
} else {
- /*
- * Atomic data types...
- */
- if (dt1->u.atomic.order < dt2->u.atomic.order)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.order > dt2->u.atomic.order)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.prec < dt2->u.atomic.prec)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.prec > dt2->u.atomic.prec)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.offset < dt2->u.atomic.offset)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.offset > dt2->u.atomic.offset)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.lsb_pad < dt2->u.atomic.lsb_pad)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.lsb_pad > dt2->u.atomic.lsb_pad)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.msb_pad < dt2->u.atomic.msb_pad)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.msb_pad > dt2->u.atomic.msb_pad)
- HGOTO_DONE(1);
-
- switch (dt1->type) {
- case H5T_INTEGER:
- if (dt1->u.atomic.u.i.sign < dt2->u.atomic.u.i.sign)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.i.sign > dt2->u.atomic.u.i.sign)
- HGOTO_DONE(1);
- break;
-
- case H5T_FLOAT:
- if (dt1->u.atomic.u.f.sign < dt2->u.atomic.u.f.sign)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.sign > dt2->u.atomic.u.f.sign)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.epos < dt2->u.atomic.u.f.epos)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.epos > dt2->u.atomic.u.f.epos)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.esize <
- dt2->u.atomic.u.f.esize)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.esize >
- dt2->u.atomic.u.f.esize)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.ebias <
- dt2->u.atomic.u.f.ebias)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.ebias >
- dt2->u.atomic.u.f.ebias)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.mpos < dt2->u.atomic.u.f.mpos)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.mpos > dt2->u.atomic.u.f.mpos)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.msize <
- dt2->u.atomic.u.f.msize)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.msize >
- dt2->u.atomic.u.f.msize)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.norm < dt2->u.atomic.u.f.norm)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.norm > dt2->u.atomic.u.f.norm)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.f.pad < dt2->u.atomic.u.f.pad)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.f.pad > dt2->u.atomic.u.f.pad)
- HGOTO_DONE(1);
-
- break;
-
- case H5T_TIME:
- /*void */
- break;
-
- case H5T_STRING:
- if (dt1->u.atomic.u.s.cset < dt1->u.atomic.u.s.cset)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.s.cset > dt1->u.atomic.u.s.cset)
- HGOTO_DONE(1);
-
- if (dt1->u.atomic.u.s.pad < dt1->u.atomic.u.s.pad)
- HGOTO_DONE(-1);
- if (dt1->u.atomic.u.s.pad > dt1->u.atomic.u.s.pad)
- HGOTO_DONE(1);
-
- break;
-
- case H5T_BITFIELD:
- /*void */
- break;
-
- case H5T_OPAQUE:
- /*void */
- break;
-
- default:
- assert("not implemented yet" && 0);
- }
+ /*
+ * Atomic data types...
+ */
+ if (dt1->u.atomic.order < dt2->u.atomic.order) HGOTO_DONE(-1);
+ if (dt1->u.atomic.order > dt2->u.atomic.order) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.prec < dt2->u.atomic.prec) HGOTO_DONE(-1);
+ if (dt1->u.atomic.prec > dt2->u.atomic.prec) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.offset < dt2->u.atomic.offset) HGOTO_DONE(-1);
+ if (dt1->u.atomic.offset > dt2->u.atomic.offset) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.lsb_pad < dt2->u.atomic.lsb_pad) HGOTO_DONE(-1);
+ if (dt1->u.atomic.lsb_pad > dt2->u.atomic.lsb_pad) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.msb_pad < dt2->u.atomic.msb_pad) HGOTO_DONE(-1);
+ if (dt1->u.atomic.msb_pad > dt2->u.atomic.msb_pad) HGOTO_DONE(1);
+
+ switch (dt1->type) {
+ case H5T_INTEGER:
+ if (dt1->u.atomic.u.i.sign < dt2->u.atomic.u.i.sign) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.i.sign > dt2->u.atomic.u.i.sign) {
+ HGOTO_DONE(1);
+ }
+ break;
+
+ case H5T_FLOAT:
+ if (dt1->u.atomic.u.f.sign < dt2->u.atomic.u.f.sign) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.f.sign > dt2->u.atomic.u.f.sign) {
+ HGOTO_DONE(1);
+ }
+
+ if (dt1->u.atomic.u.f.epos < dt2->u.atomic.u.f.epos) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.f.epos > dt2->u.atomic.u.f.epos) {
+ HGOTO_DONE(1);
+ }
+
+ if (dt1->u.atomic.u.f.esize <
+ dt2->u.atomic.u.f.esize) HGOTO_DONE(-1);
+ if (dt1->u.atomic.u.f.esize >
+ dt2->u.atomic.u.f.esize) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.u.f.ebias <
+ dt2->u.atomic.u.f.ebias) HGOTO_DONE(-1);
+ if (dt1->u.atomic.u.f.ebias >
+ dt2->u.atomic.u.f.ebias) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.u.f.mpos < dt2->u.atomic.u.f.mpos) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.f.mpos > dt2->u.atomic.u.f.mpos) {
+ HGOTO_DONE(1);
+ }
+
+ if (dt1->u.atomic.u.f.msize <
+ dt2->u.atomic.u.f.msize) HGOTO_DONE(-1);
+ if (dt1->u.atomic.u.f.msize >
+ dt2->u.atomic.u.f.msize) HGOTO_DONE(1);
+
+ if (dt1->u.atomic.u.f.norm < dt2->u.atomic.u.f.norm) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.f.norm > dt2->u.atomic.u.f.norm) {
+ HGOTO_DONE(1);
+ }
+
+ if (dt1->u.atomic.u.f.pad < dt2->u.atomic.u.f.pad) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.f.pad > dt2->u.atomic.u.f.pad) {
+ HGOTO_DONE(1);
+ }
+
+ break;
+
+ case H5T_TIME:
+ /*void */
+ break;
+
+ case H5T_STRING:
+ if (dt1->u.atomic.u.s.cset < dt1->u.atomic.u.s.cset) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.s.cset > dt1->u.atomic.u.s.cset) {
+ HGOTO_DONE(1);
+ }
+
+ if (dt1->u.atomic.u.s.pad < dt1->u.atomic.u.s.pad) {
+ HGOTO_DONE(-1);
+ }
+ if (dt1->u.atomic.u.s.pad > dt1->u.atomic.u.s.pad) {
+ HGOTO_DONE(1);
+ }
+
+ break;
+
+ case H5T_BITFIELD:
+ /*void */
+ break;
+
+ case H5T_OPAQUE:
+ /*void */
+ break;
+
+ default:
+ assert("not implemented yet" && 0);
+ }
}
done:
@@ -2924,85 +2925,91 @@ H5T_cmp(const H5T_t *dt1, const H5T_t *dt2)
FUNC_LEAVE(ret_value);
}
-
+
/*-------------------------------------------------------------------------
- * Function: H5T_find
+ * Function: H5T_find
*
- * Purpose: Finds a conversion function for the specified path.
+ * Purpose: Finds a conversion function for the specified path.
*
- * Return: Success: A pointer to an appropriate conversion
- * function.
+ * Return: Success: A pointer to an appropriate conversion
+ * function. The PCDATA argument is initialized
+ * to point to type conversion data which should
+ * be passed to the type conversion function.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * Wednesday, January 14, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 14, 1998
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
H5T_conv_t
-H5T_find(const H5T_t *src, const H5T_t *dst)
+H5T_find(const H5T_t *src, const H5T_t *dst, void **pcdata)
{
- H5T_path_t *path = NULL;
- H5T_conv_t ret_value = NULL;
+ H5T_path_t *path = NULL;
+ H5T_conv_t ret_value = NULL;
FUNC_ENTER(H5T_find, NULL);
/* Check args */
assert(src);
assert(dst);
+ assert (pcdata);
/* No-op case */
- if (0 == H5T_cmp(src, dst))
- HRETURN(H5T_conv_noop);
+ if (0 == H5T_cmp(src, dst)) HRETURN(H5T_conv_noop);
/* Find it */
if (NULL == (path = H5T_path_find(src, dst, TRUE))) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL,
- "unable to create conversion path");
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL,
+ "unable to create conversion path");
}
- ret_value = path->hard;
- if (!ret_value)
- ret_value = path->soft;
- if (!ret_value) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL,
- "no conversion function for that path");
+ if (path->hard) {
+ ret_value = path->hard;
+ *pcdata = NULL;
+ } else if (path->soft) {
+ ret_value = path->soft;
+ *pcdata = path->cdata;
+ } else {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL,
+ "no conversion function for that path");
}
+
FUNC_LEAVE(ret_value);
}
-
+
/*-------------------------------------------------------------------------
- * Function: H5T_path_find
+ * Function: H5T_path_find
*
- * Purpose: Finds the path which converts type SRC_ID to type DST_ID. If
- * the path isn't found and CREATE is non-zero then a new path
- * is created.
+ * Purpose: Finds the path which converts type SRC_ID to type DST_ID. If
+ * the path isn't found and CREATE is non-zero then a new path
+ * is created.
*
- * Return: Success: Pointer to the path, valid until the path
- * database is modified.
+ * Return: Success: Pointer to the path, valid until the path
+ * database is modified.
*
- * Failure: NULL
+ * Failure: NULL
*
- * Programmer: Robb Matzke
- * Tuesday, January 13, 1998
+ * Programmer: Robb Matzke
+ * Tuesday, January 13, 1998
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
-H5T_path_t *
+H5T_path_t *
H5T_path_find(const H5T_t *src, const H5T_t *dst, hbool_t create)
{
- intn lt = 0; /*left edge (inclusive) */
- intn rt = H5T_npath_g; /*right edge (exclusive) */
- intn md = 0; /*middle */
- intn cmp = -1; /*comparison result */
- H5T_path_t *path = NULL; /*path found */
- int i;
- hid_t src_id, dst_id;
+ intn lt = 0; /*left edge (inclusive) */
+ intn rt = H5T_npath_g; /*right edge (exclusive) */
+ intn md = 0; /*middle */
+ intn cmp = -1; /*comparison result */
+ H5T_path_t *path = NULL; /*path found */
+ int i;
+ hid_t src_id, dst_id;
FUNC_ENTER(H5T_path_find, NULL);
@@ -3012,74 +3019,76 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, hbool_t create)
/* Binary search */
while (lt < rt) {
- md = (lt + rt) / 2;
+ md = (lt + rt) / 2;
- cmp = H5T_cmp(src, H5T_path_g[md].src);
- if (0 == cmp)
- cmp = H5T_cmp(dst, H5T_path_g[md].dst);
+ cmp = H5T_cmp(src, H5T_path_g[md].src);
+ if (0 == cmp) cmp = H5T_cmp(dst, H5T_path_g[md].dst);
- if (cmp < 0) {
- rt = md;
- } else if (cmp > 0) {
- lt = md + 1;
- } else {
- HRETURN(H5T_path_g + md);
- }
+ if (cmp < 0) {
+ rt = md;
+ } else if (cmp > 0) {
+ lt = md + 1;
+ } else {
+ HRETURN(H5T_path_g + md);
+ }
}
/* Insert */
if (create) {
- if (H5T_npath_g >= H5T_apath_g) {
- H5T_apath_g = MAX(64, 2 * H5T_apath_g);
- H5T_path_g = H5MM_xrealloc(H5T_path_g,
- H5T_apath_g * sizeof(H5T_path_t));
- }
- if (cmp > 0)
- md++;
-
- /* make room */
- HDmemmove(H5T_path_g + md + 1, H5T_path_g + md,
- (H5T_npath_g - md) * sizeof(H5T_path_t));
- H5T_npath_g++;
-
- /* insert */
- path = H5T_path_g + md;
- HDmemset(path, 0, sizeof(H5T_path_t));
- path->src = H5T_copy(src);
- path->dst = H5T_copy(dst);
-
- /* Locate soft function */
- for (i = H5T_nsoft_g - 1; i >= 0 && !path->soft; --i) {
- if (src->type != H5T_soft_g[i].src || dst->type != H5T_soft_g[i].dst) {
- continue;
- }
- if ((src_id=H5A_register(H5_DATATYPE, H5T_copy(path->src))) < 0 ||
- (dst_id=H5A_register(H5_DATATYPE, H5T_copy(path->dst))) < 0) {
- HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL,
- "unable to register conv types for query");
- }
- if ((H5T_soft_g[i].func) (src_id, dst_id, 0, NULL, NULL) >= 0) {
- path->soft = H5T_soft_g[i].func;
- }
- H5A_dec_ref(src_id);
- H5A_dec_ref(dst_id);
- H5ECLEAR;
- }
+ if (H5T_npath_g >= H5T_apath_g) {
+ H5T_apath_g = MAX(64, 2 * H5T_apath_g);
+ H5T_path_g = H5MM_xrealloc(H5T_path_g,
+ H5T_apath_g * sizeof(H5T_path_t));
+ }
+ if (cmp > 0) md++;
+
+ /* make room */
+ HDmemmove(H5T_path_g + md + 1, H5T_path_g + md,
+ (H5T_npath_g - md) * sizeof(H5T_path_t));
+ H5T_npath_g++;
+
+ /* insert */
+ path = H5T_path_g + md;
+ HDmemset(path, 0, sizeof(H5T_path_t));
+ path->src = H5T_copy(src);
+ path->dst = H5T_copy(dst);
+
+ /* Locate soft function */
+ for (i=H5T_nsoft_g-1; i>=0 && !path->soft; --i) {
+ void *cdata = NULL;
+ if (src->type!=H5T_soft_g[i].src ||
+ dst->type!=H5T_soft_g[i].dst) {
+ continue;
+ }
+ if ((src_id=H5A_register(H5_DATATYPE, H5T_copy(path->src))) < 0 ||
+ (dst_id=H5A_register(H5_DATATYPE, H5T_copy(path->dst))) < 0) {
+ HRETURN_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL,
+ "unable to register conv types for query");
+ }
+ if ((H5T_soft_g[i].func) (src_id, dst_id, &cdata, 0,
+ NULL, NULL) >= 0) {
+ path->soft = H5T_soft_g[i].func;
+ path->cdata = cdata;
+ }
+ H5A_dec_ref(src_id);
+ H5A_dec_ref(dst_id);
+ H5ECLEAR;
+ }
}
FUNC_LEAVE(path);
}
/*-------------------------------------------------------------------------
- * Function: H5T_debug
+ * Function: H5T_debug
*
- * Purpose: Prints information about a data type.
+ * Purpose: Prints information about a data type.
*
- * Return: Success: SUCCEED
+ * Return: Success: SUCCEED
*
- * Failure: FAIL
+ * Failure: FAIL
*
- * Programmer: Robb Matzke
- * Wednesday, January 7, 1998
+ * Programmer: Robb Matzke
+ * Wednesday, January 7, 1998
*
* Modifications:
*
@@ -3088,9 +3097,9 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, hbool_t create)
herr_t
H5T_debug(H5T_t *dt, FILE * stream)
{
- const char *s = "";
- int i, j;
- uint64 tmp;
+ const char *s = "";
+ int i, j;
+ uint64 tmp;
FUNC_ENTER(H5T_debug, FAIL);
@@ -3100,134 +3109,134 @@ H5T_debug(H5T_t *dt, FILE * stream)
switch (dt->type) {
case H5T_INTEGER:
- s = "int";
- break;
+ s = "int";
+ break;
case H5T_FLOAT:
- s = "float";
- break;
+ s = "float";
+ break;
case H5T_TIME:
- s = "time";
- break;
+ s = "time";
+ break;
case H5T_STRING:
- s = "str";
- break;
+ s = "str";
+ break;
case H5T_BITFIELD:
- s = "bits";
- break;
+ s = "bits";
+ break;
case H5T_OPAQUE:
- s = "opaque";
- break;
+ s = "opaque";
+ break;
case H5T_COMPOUND:
- s = "struct";
- break;
+ s = "struct";
+ break;
default:
- s = "";
- break;
+ s = "";
+ break;
}
fprintf(stream, "%s%s {nbytes=%d",
- s, dt->locked ? "[!]" : "", dt->size);
+ s, dt->locked ? "[!]" : "", dt->size);
if (H5T_is_atomic(dt)) {
- switch (dt->u.atomic.order) {
- case H5T_ORDER_BE:
- s = "BE";
- break;
- case H5T_ORDER_LE:
- s = "LE";
- break;
- case H5T_ORDER_VAX:
- s = "VAX";
- break;
- case H5T_ORDER_NONE:
- s = "NONE";
- break;
- default:
- s = "order?";
- break;
- }
- fprintf(stream, ", %s", s);
-
- if (dt->u.atomic.offset) {
- fprintf(stream, ", offset=%lu",
- (unsigned long) (dt->u.atomic.offset));
- }
- if (dt->u.atomic.prec != 8 * dt->size) {
- fprintf(stream, ", prec=%lu",
- (unsigned long) (dt->u.atomic.prec));
- }
- switch (dt->type) {
- case H5T_INTEGER:
- switch (dt->u.atomic.u.i.sign) {
- case H5T_SGN_NONE:
- s = "unsigned";
- break;
- case H5T_SGN_2:
- s = NULL;
- break;
- default:
- s = "sign?";
- break;
- }
- if (s)
- fprintf(stream, ", %s", s);
- break;
-
- case H5T_FLOAT:
- switch (dt->u.atomic.u.f.norm) {
- case H5T_NORM_IMPLIED:
- s = "implied";
- break;
- case H5T_NORM_MSBSET:
- s = "msbset";
- break;
- case H5T_NORM_NONE:
- s = "no-norm";
- break;
- default:
- s = "norm?";
- break;
- }
- fprintf(stream, ", sign=%lu+1",
- (unsigned long) (dt->u.atomic.u.f.sign));
- fprintf(stream, ", mant=%lu+%lu (%s)",
- (unsigned long) (dt->u.atomic.u.f.mpos),
- (unsigned long) (dt->u.atomic.u.f.msize), s);
- fprintf(stream, ", exp=%lu+%lu",
- (unsigned long) (dt->u.atomic.u.f.epos),
- (unsigned long) (dt->u.atomic.u.f.esize));
- tmp = dt->u.atomic.u.f.ebias >> 32;
- if (tmp) {
- uintn hi = tmp;
- uintn lo = dt->u.atomic.u.f.ebias & 0xffffffff;
- fprintf(stream, " bias=0x%08x%08x", hi, lo);
- } else {
- uintn lo = dt->u.atomic.u.f.ebias & 0xffffffff;
- fprintf(stream, " bias=0x%08x", lo);
- }
- break;
-
- default:
- /* No additional info */
- break;
- }
+ switch (dt->u.atomic.order) {
+ case H5T_ORDER_BE:
+ s = "BE";
+ break;
+ case H5T_ORDER_LE:
+ s = "LE";
+ break;
+ case H5T_ORDER_VAX:
+ s = "VAX";
+ break;
+ case H5T_ORDER_NONE:
+ s = "NONE";
+ break;
+ default:
+ s = "order?";
+ break;
+ }
+ fprintf(stream, ", %s", s);
+
+ if (dt->u.atomic.offset) {
+ fprintf(stream, ", offset=%lu",
+ (unsigned long) (dt->u.atomic.offset));
+ }
+ if (dt->u.atomic.prec != 8 * dt->size) {
+ fprintf(stream, ", prec=%lu",
+ (unsigned long) (dt->u.atomic.prec));
+ }
+ switch (dt->type) {
+ case H5T_INTEGER:
+ switch (dt->u.atomic.u.i.sign) {
+ case H5T_SGN_NONE:
+ s = "unsigned";
+ break;
+ case H5T_SGN_2:
+ s = NULL;
+ break;
+ default:
+ s = "sign?";
+ break;
+ }
+ if (s)
+ fprintf(stream, ", %s", s);
+ break;
+
+ case H5T_FLOAT:
+ switch (dt->u.atomic.u.f.norm) {
+ case H5T_NORM_IMPLIED:
+ s = "implied";
+ break;
+ case H5T_NORM_MSBSET:
+ s = "msbset";
+ break;
+ case H5T_NORM_NONE:
+ s = "no-norm";
+ break;
+ default:
+ s = "norm?";
+ break;
+ }
+ fprintf(stream, ", sign=%lu+1",
+ (unsigned long) (dt->u.atomic.u.f.sign));
+ fprintf(stream, ", mant=%lu+%lu (%s)",
+ (unsigned long) (dt->u.atomic.u.f.mpos),
+ (unsigned long) (dt->u.atomic.u.f.msize), s);
+ fprintf(stream, ", exp=%lu+%lu",
+ (unsigned long) (dt->u.atomic.u.f.epos),
+ (unsigned long) (dt->u.atomic.u.f.esize));
+ tmp = dt->u.atomic.u.f.ebias >> 32;
+ if (tmp) {
+ uintn hi = tmp;
+ uintn lo = dt->u.atomic.u.f.ebias & 0xffffffff;
+ fprintf(stream, " bias=0x%08x%08x", hi, lo);
+ } else {
+ uintn lo = dt->u.atomic.u.f.ebias & 0xffffffff;
+ fprintf(stream, " bias=0x%08x", lo);
+ }
+ break;
+
+ default:
+ /* No additional info */
+ break;
+ }
} else {
- for (i = 0; i < dt->u.compnd.nmembs; i++) {
- fprintf(stream, "\n\"%s\" @%lu",
- dt->u.compnd.memb[i].name,
- (unsigned long) (dt->u.compnd.memb[i].offset));
- if (dt->u.compnd.memb[i].ndims) {
- fprintf(stream, "[");
- for (j = 0; j < dt->u.compnd.memb[i].ndims; j++) {
- fprintf(stream, "%s%d", j ? ", " : "",
- dt->u.compnd.memb[i].dim[j]);
- }
- fprintf(stream, "]");
- }
- fprintf(stream, " ");
- H5T_debug(&(dt->u.compnd.memb[i].type), stream);
- }
- fprintf(stream, "\n");
+ for (i = 0; i < dt->u.compnd.nmembs; i++) {
+ fprintf(stream, "\n\"%s\" @%lu",
+ dt->u.compnd.memb[i].name,
+ (unsigned long) (dt->u.compnd.memb[i].offset));
+ if (dt->u.compnd.memb[i].ndims) {
+ fprintf(stream, "[");
+ for (j = 0; j < dt->u.compnd.memb[i].ndims; j++) {
+ fprintf(stream, "%s%d", j ? ", " : "",
+ dt->u.compnd.memb[i].dim[j]);
+ }
+ fprintf(stream, "]");
+ }
+ fprintf(stream, " ");
+ H5T_debug(&(dt->u.compnd.memb[i].type), stream);
+ }
+ fprintf(stream, "\n");
}
fprintf(stream, "}");
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index ff612ba..48d45ef 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -36,8 +36,8 @@ static intn interface_initialize_g = FALSE;
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_noop(hid_t src_id, hid_t dst_id, size_t nelmts,
- void *buf, const void *background)
+H5T_conv_noop(hid_t src_id, hid_t dst_id, void **pcdata, size_t nelmts,
+ void *buf, void *background)
{
FUNC_ENTER(H5T_conv_noop, FAIL);
FUNC_LEAVE(SUCCEED);
@@ -63,8 +63,8 @@ H5T_conv_noop(hid_t src_id, hid_t dst_id, size_t nelmts,
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_order(hid_t src_id, hid_t dst_id, size_t nelmts,
- void *_buf, const void *background)
+H5T_conv_order(hid_t src_id, hid_t dst_id, void **pcdata, size_t nelmts,
+ void *_buf, void *background)
{
uint8 *buf = (uint8 *) _buf;
uint8 tmp;
@@ -81,10 +81,6 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, size_t nelmts,
NULL == (dst = H5A_object(dst_id))) {
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
- if (background) {
- HRETURN_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL,
- "background values not supported in this conv path");
- }
if (!buf) {
/* Capability query */
@@ -123,6 +119,7 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, size_t nelmts,
}
HRETURN(SUCCEED);
}
+
/* The conversion */
md = src->size / 2;
for (i = 0; i < nelmts; i++, buf += src->size) {
@@ -166,15 +163,26 @@ H5T_conv_order(hid_t src_id, hid_t dst_id, size_t nelmts,
*-------------------------------------------------------------------------
*/
herr_t
-H5T_conv_struct(hid_t src_id, hid_t dst_id, size_t nelmts,
- void *_buf, const void *background)
+H5T_conv_struct(hid_t src_id, hid_t dst_id, void **_pcdata, size_t nelmts,
+ void *_buf, void *_bkg)
{
+ H5T_conv_struct_t **pcdata = (H5T_conv_struct_t **)_pcdata;
uint8 *buf = (uint8 *)_buf; /*cast for pointer arithmetic */
+ uint8 *bkg = (uint8 *)_bkg; /*background pointer arithmetic */
H5T_t *src = NULL; /*source data type */
H5T_t *dst = NULL; /*destination data type */
- intn *dst2src_map = NULL; /*maps dst member to src member */
- intn i;
-
+ H5T_t *type = NULL; /*temporary type pointer */
+ hid_t tid; /*temporary type ID */
+ intn *src2dst = NULL; /*maps src member to dst member */
+ H5T_member_t *src_memb = NULL; /*source struct member descript.*/
+ H5T_member_t *dst_memb = NULL; /*destination struct memb desc. */
+ H5T_conv_t tconv_func = NULL; /*member data type conv. func. */
+ size_t offset; /*byte offset wrt struct */
+ size_t src_delta, dst_delta; /*source & destination stride */
+ intn elmtno, i, j; /*counters */
+ void *memb_cdata = NULL; /*member conversion data */
+ herr_t ret_value = FAIL;
+
FUNC_ENTER (H5T_conv_struct, FAIL);
/* Check args */
@@ -184,64 +192,186 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, size_t nelmts,
NULL == (dst = H5A_object(dst_id))) {
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
- if (background) {
- HRETURN_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL,
- "background values not supported in this conv path");
- }
/* Capability query? */
if (!buf) {
assert (H5T_COMPOUND==src->type);
assert (H5T_COMPOUND==dst->type);
- HRETURN (SUCCEED);
- }
- /*
- * Build a mapping from destination member number to source member number
- */
- H5T_sort_by_offset (src);
- H5T_sort_by_offset (dst);
- dst2src_map = H5MM_xmalloc (dst->u.compnd.nmembs * sizeof(intn));
- for (i=0; i<src->u.compnd.nmembs; i++) {
- }
+#ifndef LATER
+ /*
+ * Struct members must be scalar for now.
+ */
+ for (i=0; i<src->u.compnd.nmembs; i++) {
+ assert (0==src->u.compnd.memb[i].ndims);
+ }
+ for (i=0; i<dst->u.compnd.nmembs; i++) {
+ assert (0==dst->u.compnd.memb[i].ndims);
+ }
+#endif
+ /*
+ * Okay, we've determined that this conversion function applies to
+ * the data types supplied as arguments. Now we build information
+ * which is expensive to calculate but is constant for all
+ * conversions from SRC_ID to DST_ID. Notice: the thing marked with
+ * `!' really is `dst' and not `src' because we're only interested in
+ * the members of the source type that are also in the destination
+ * type.
+ */
+ assert (pcdata);
+ *pcdata = H5MM_xcalloc (1, sizeof(H5T_conv_struct_t));
+ src2dst = H5MM_xmalloc (src->u.compnd.nmembs * sizeof(intn));
+ (*pcdata)->src2dst = src2dst;
+ (*pcdata)->src_memb_id = H5MM_xmalloc (/*!*/dst->u.compnd.nmembs *
+ sizeof(hid_t));
+ (*pcdata)->dst_memb_id = H5MM_xmalloc (dst->u.compnd.nmembs *
+ sizeof(hid_t));
+ /*
+ * Insure that members are sorted.
+ */
+ H5T_sort_by_offset (src);
+ H5T_sort_by_offset (dst);
- /*
- * For each source member which will be present in the destination,
- * convert the member to the destination type unless it is larger than
- * the source type. Then move the member to the left-most unoccupied
- * position in the buffer. This makes the data point as small as
- * possible with all the free space on the right side.
- */
- for (i=0; i<src->u.compnd.nmembs; i++) {
- }
+ /*
+ * Build a mapping from source member number to destination member
+ * number. If some source member is not a destination member then that
+ * mapping element will be negative. Also create atoms for each
+ * source and destination member data type so we can look up the
+ * member data type conversion functions later.
+ */
+ for (i=0; i<src->u.compnd.nmembs; i++) {
+ src2dst[i] = -1;
+ for (j=0; j<dst->u.compnd.nmembs; j++) {
+ if (!HDstrcmp (src->u.compnd.memb[i].name,
+ dst->u.compnd.memb[j].name)) {
+ src2dst[i] = j;
+ break;
+ }
+ }
+ if (src2dst[i]>=0) {
+ type = &(src->u.compnd.memb[i].type);
+ tid = H5A_register (H5_DATATYPE, type);
+ assert (tid>=0);
+ (*pcdata)->src_memb_id[i] = tid;
+ type = &(dst->u.compnd.memb[src2dst[i]].type);
+ tid = H5A_register (H5_DATATYPE, type);
+ assert (tid>=0);
+ (*pcdata)->dst_memb_id[i] = tid;
+ }
+ }
+
+
+ HRETURN (SUCCEED);
+ }
/*
- * For each source member which will be present in the destination,
- * convert the member to the destination type if it is larger than the
- * source type (that is, has not been converted yet). Then copy the
- * member to the destination offset in the background buffer.
+ * Here comes the real conversion...
*/
- for (i=src->u.compnd.nmembs-1; i>=0; --i) {
- }
+ assert (pcdata && *pcdata);
+ assert ((*pcdata)->src2dst);
+ assert ((*pcdata)->src_memb_id);
+ assert ((*pcdata)->dst_memb_id);
-
/*
- * Copy the background buffer back into the in-place conversion buffer.
+ * Insure that members are sorted.
*/
- HDmemcpy (buf, background, dst->size);
+ H5T_sort_by_offset (src);
+ H5T_sort_by_offset (dst);
+ src2dst = (*pcdata)->src2dst;
+ /*
+ * Direction of conversion.
+ */
+ if (dst->size <= src->size) {
+ src_delta = src->size;
+ dst_delta = dst->size;
+ } else {
+ src_delta = -(src->size);
+ dst_delta = -(dst->size);
+ buf += (nelmts-1) * src->size;
+ bkg += (nelmts-1) * dst->size;
+ }
+ for (elmtno=0; elmtno<nelmts; elmtno++) {
+ /*
+ * For each source member which will be present in the destination,
+ * convert the member to the destination type unless it is larger than
+ * the source type. Then move the member to the left-most unoccupied
+ * position in the buffer. This makes the data point as small as
+ * possible with all the free space on the right side.
+ */
+ for (i=0, offset=0; i<src->u.compnd.nmembs; i++) {
+ if (src2dst[i]<0) continue;
+ src_memb = src->u.compnd.memb + i;
+ dst_memb = dst->u.compnd.memb + src2dst[i];
+
+ if (dst_memb->type.size <= src_memb->type.size) {
+ tconv_func = H5T_find (&(dst_memb->type), &(src_memb->type),
+ &memb_cdata);
+ if (!tconv_func) {
+ HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
+ "unable to convert member data type");
+ }
+ (tconv_func)((*pcdata)->src_memb_id[i],
+ (*pcdata)->dst_memb_id[i], &memb_cdata, 1,
+ buf + src_memb->offset, bkg + dst_memb->offset);
+ HDmemmove (buf + offset, buf + src_memb->offset,
+ dst_memb->type.size);
+ offset += dst_memb->type.size;
+ } else {
+ HDmemmove (buf + offset, buf + src_memb->offset,
+ src_memb->type.size);
+ offset += src_memb->type.size;
+ }
+ }
+ /*
+ * For each source member which will be present in the destination,
+ * convert the member to the destination type if it is larger than the
+ * source type (that is, has not been converted yet). Then copy the
+ * member to the destination offset in the background buffer.
+ */
+ for (i=src->u.compnd.nmembs-1; i>=0; --i) {
+ if (src2dst[i]<0) continue;
+ src_memb = src->u.compnd.memb + i;
+ dst_memb = dst->u.compnd.memb + src2dst[i];
+ offset -= dst_memb->type.size;
+ if (dst_memb->type.size > src_memb->type.size) {
+ tconv_func = H5T_find (&(src_memb->type), &(dst_memb->type),
+ &memb_cdata);
+ if (!tconv_func) {
+ HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
+ "unable to convert member data type");
+ }
+ (tconv_func)((*pcdata)->src_memb_id[i],
+ (*pcdata)->dst_memb_id[i], &memb_cdata, 1,
+ buf + offset, bkg + dst_memb->offset);
+ }
+ HDmemmove (bkg+dst_memb->offset, buf+offset, dst_memb->type.size);
+ }
+ assert (0==offset);
+ /*
+ * Update buf and background.
+ */
+ buf += src_delta;
+ bkg += dst_delta;
+ }
- HRETURN_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "not implemented yet");
- FUNC_LEAVE (SUCCEED);
+ /*
+ * Copy the background buffer back into the in-place conversion buffer.
+ */
+ HDmemcpy (_buf, _bkg, nelmts*dst->size);
+ ret_value = SUCCEED;
+
+ done:
+ FUNC_LEAVE (ret_value);
}
diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h
index 5fc1075..7fa5811 100644
--- a/src/H5Tpkg.h
+++ b/src/H5Tpkg.h
@@ -78,6 +78,7 @@ typedef struct H5T_path_t {
H5T_t *dst; /*destination data type ID */
H5T_conv_t hard; /*hard conversion function or null */
H5T_conv_t soft; /*soft conversion function or null */
+ void *cdata; /*extra conversion data */
} H5T_path_t;
/* The master list of soft conversion functions */
@@ -87,17 +88,24 @@ typedef struct H5T_soft_t {
H5T_conv_t func; /*the conversion function */
} H5T_soft_t;
+/* Conversion data for H5T_conv_struct() */
+typedef struct H5T_conv_struct_t {
+ intn *src2dst; /*mapping from src to dst memb ID */
+ hid_t *src_memb_id; /*source member type ID's */
+ hid_t *dst_memb_id; /*destination member type ID's */
+} H5T_conv_struct_t;
+
/* Function prototypes for H5T package scope */
H5T_path_t *H5T_path_find (const H5T_t *src, const H5T_t *dst,
hbool_t create);
/* Conversion functions */
-herr_t H5T_conv_noop (hid_t src_id, hid_t dst_id, size_t nelmts, void *buf,
- const void *background);
-herr_t H5T_conv_order (hid_t src_id, hid_t dst_id, size_t nelmts, void *_buf,
- const void *background);
-herr_t H5T_conv_struct (hid_t src_id, hid_t dst_id, size_t nelmts,
- void *_buf, const void *background);
+herr_t H5T_conv_noop (hid_t src_id, hid_t dst_id, void **pcdata,
+ size_t nelmts, void *buf, void *bkg);
+herr_t H5T_conv_order (hid_t src_id, hid_t dst_id, void **pcdata,
+ size_t nelmts, void *_buf, void *bkg);
+herr_t H5T_conv_struct (hid_t src_id, hid_t dst_id, void **pcdata,
+ size_t nelmts, void *_buf, void *bkg);
#endif
diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h
index c58f4c2..8a1b940 100644
--- a/src/H5Tprivate.h
+++ b/src/H5Tprivate.h
@@ -40,5 +40,5 @@ herr_t H5T_insert (H5T_t *parent, const char *name, off_t offset,
herr_t H5T_sort_by_offset (H5T_t *dt);
herr_t H5T_pack (H5T_t *dt);
herr_t H5T_debug (H5T_t *dt, FILE * stream);
-H5T_conv_t H5T_find (const H5T_t *src, const H5T_t *dst);
+H5T_conv_t H5T_find (const H5T_t *src, const H5T_t *dst, void **pcdata);
#endif
diff --git a/src/H5Tpublic.h b/src/H5Tpublic.h
index 4608fe6..6c89e14 100644
--- a/src/H5Tpublic.h
+++ b/src/H5Tpublic.h
@@ -20,6 +20,9 @@
#include <H5public.h>
#include <H5Apublic.h>
+#define HOFFSET(S,M) ((const char*)&S.M-(const char*)&S)
+#define HPOFFSET(P,M) ((const char*)&(P->M)-(const char*)P)
+
/* These are the various classes of data types */
typedef enum H5T_class_t {
H5T_NO_CLASS = -1, /*error */
@@ -90,9 +93,8 @@ typedef enum H5T_pad_t {
} H5T_pad_t;
/* All data type conversion functions are... */
-typedef herr_t (*H5T_conv_t) (hid_t, hid_t, size_t, void *, const void *);
-#define HOFFSET(S,M) ((const char*)&S.M-(const char*)&S)
-#define HPOFFSET(P,M) ((const char*)&(P->M)-(const char*)P)
+typedef herr_t (*H5T_conv_t) (hid_t src_id, hid_t dst_id, void **pcdata,
+ size_t nelmts, void *buf, void *bkg);
/* The predefined types */
#define H5T_NATIVE_CHAR (H5init(), H5T_NATIVE_CHAR_g)
@@ -207,7 +209,7 @@ herr_t H5Tset_strpad (hid_t type_id, H5T_str_t strpad);
herr_t H5Tregister_hard (hid_t src_id, hid_t dst_id, H5T_conv_t func);
herr_t H5Tregister_soft (H5T_class_t src, H5T_class_t dst, H5T_conv_t func);
herr_t H5Tunregister (H5T_conv_t func);
-H5T_conv_t H5Tfind (hid_t src_id, hid_t dst_id);
+H5T_conv_t H5Tfind (hid_t src_id, hid_t dst_id, void **pcdata);
#ifdef __cplusplus
}