summaryrefslogtreecommitdiffstats
path: root/src/H5Odtype.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Odtype.c')
-rw-r--r--src/H5Odtype.c536
1 files changed, 286 insertions, 250 deletions
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index 3c44b26..807aaf3 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -68,6 +68,7 @@ const H5O_class_t H5O_DTYPE[1] = {{
/* Declare external the free list for H5T_t's */
H5FL_EXTERN(H5T_t);
+H5FL_EXTERN(H5T_shared_t);
/*-------------------------------------------------------------------------
@@ -97,39 +98,39 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
/* check args */
assert(pp && *pp);
- assert(dt);
+ assert(dt && dt->shared);
/* decode */
UINT32DECODE(*pp, flags);
version = (flags>>4) & 0x0f;
if (version!=H5O_DTYPE_VERSION_COMPAT && version!=H5O_DTYPE_VERSION_UPDATED)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTLOAD, FAIL, "bad version number for data type message");
- dt->type = (H5T_class_t)(flags & 0x0f);
+ dt->shared->type = (H5T_class_t)(flags & 0x0f);
flags >>= 8;
- UINT32DECODE(*pp, dt->size);
+ UINT32DECODE(*pp, dt->shared->size);
- switch (dt->type) {
+ switch (dt->shared->type) {
case H5T_INTEGER:
/*
* Integer types...
*/
- dt->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
- dt->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
- dt->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
- dt->u.atomic.u.i.sign = (flags & 0x8) ? H5T_SGN_2 : H5T_SGN_NONE;
- UINT16DECODE(*pp, dt->u.atomic.offset);
- UINT16DECODE(*pp, dt->u.atomic.prec);
+ dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+ dt->shared->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ dt->shared->u.atomic.u.i.sign = (flags & 0x8) ? H5T_SGN_2 : H5T_SGN_NONE;
+ UINT16DECODE(*pp, dt->shared->u.atomic.offset);
+ UINT16DECODE(*pp, dt->shared->u.atomic.prec);
break;
case H5T_BITFIELD:
/*
* Bit fields...
*/
- dt->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
- dt->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
- dt->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
- UINT16DECODE(*pp, dt->u.atomic.offset);
- UINT16DECODE(*pp, dt->u.atomic.prec);
+ dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+ dt->shared->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ UINT16DECODE(*pp, dt->shared->u.atomic.offset);
+ UINT16DECODE(*pp, dt->shared->u.atomic.prec);
break;
case H5T_OPAQUE:
@@ -138,10 +139,10 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
*/
z = flags & 0xff;
assert(0==(z&0x7)); /*must be aligned*/
- if (NULL==(dt->u.opaque.tag=H5MM_malloc(z+1)))
+ if (NULL==(dt->shared->u.opaque.tag=H5MM_malloc(z+1)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- HDmemcpy(dt->u.opaque.tag, *pp, z);
- dt->u.opaque.tag[z] = '\0';
+ HDmemcpy(dt->shared->u.opaque.tag, *pp, z);
+ dt->shared->u.opaque.tag[z] = '\0';
*pp += z;
break;
@@ -149,48 +150,48 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
/*
* Floating-point types...
*/
- dt->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
- dt->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
- dt->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
- dt->u.atomic.u.f.pad = (flags & 0x8) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+ dt->shared->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+ dt->shared->u.atomic.u.f.pad = (flags & 0x8) ? H5T_PAD_ONE : H5T_PAD_ZERO;
switch ((flags >> 4) & 0x03) {
case 0:
- dt->u.atomic.u.f.norm = H5T_NORM_NONE;
+ dt->shared->u.atomic.u.f.norm = H5T_NORM_NONE;
break;
case 1:
- dt->u.atomic.u.f.norm = H5T_NORM_MSBSET;
+ dt->shared->u.atomic.u.f.norm = H5T_NORM_MSBSET;
break;
case 2:
- dt->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+ dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
break;
default:
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown floating-point normalization");
}
- dt->u.atomic.u.f.sign = (flags >> 8) & 0xff;
- UINT16DECODE(*pp, dt->u.atomic.offset);
- UINT16DECODE(*pp, dt->u.atomic.prec);
- dt->u.atomic.u.f.epos = *(*pp)++;
- dt->u.atomic.u.f.esize = *(*pp)++;
- assert(dt->u.atomic.u.f.esize > 0);
- dt->u.atomic.u.f.mpos = *(*pp)++;
- dt->u.atomic.u.f.msize = *(*pp)++;
- assert(dt->u.atomic.u.f.msize > 0);
- UINT32DECODE(*pp, dt->u.atomic.u.f.ebias);
+ dt->shared->u.atomic.u.f.sign = (flags >> 8) & 0xff;
+ UINT16DECODE(*pp, dt->shared->u.atomic.offset);
+ UINT16DECODE(*pp, dt->shared->u.atomic.prec);
+ dt->shared->u.atomic.u.f.epos = *(*pp)++;
+ dt->shared->u.atomic.u.f.esize = *(*pp)++;
+ assert(dt->shared->u.atomic.u.f.esize > 0);
+ dt->shared->u.atomic.u.f.mpos = *(*pp)++;
+ dt->shared->u.atomic.u.f.msize = *(*pp)++;
+ assert(dt->shared->u.atomic.u.f.msize > 0);
+ UINT32DECODE(*pp, dt->shared->u.atomic.u.f.ebias);
break;
case H5T_COMPOUND:
/*
* Compound data types...
*/
- dt->u.compnd.nmembs = flags & 0xffff;
- assert(dt->u.compnd.nmembs > 0);
- dt->u.compnd.packed = TRUE; /* Start off packed */
- dt->u.compnd.nalloc = dt->u.compnd.nmembs;
- dt->u.compnd.memb = H5MM_calloc(dt->u.compnd.nalloc*
+ dt->shared->u.compnd.nmembs = flags & 0xffff;
+ assert(dt->shared->u.compnd.nmembs > 0);
+ dt->shared->u.compnd.packed = TRUE; /* Start off packed */
+ dt->shared->u.compnd.nalloc = dt->shared->u.compnd.nmembs;
+ dt->shared->u.compnd.memb = H5MM_calloc(dt->shared->u.compnd.nalloc*
sizeof(H5T_cmemb_t));
- if (NULL==dt->u.compnd.memb)
+ if (NULL==dt->shared->u.compnd.memb)
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- for (i = 0; i < dt->u.compnd.nmembs; i++) {
+ for (i = 0; i < dt->shared->u.compnd.nmembs; i++) {
unsigned ndims=0; /* Number of dimensions of the array field */
hsize_t dim[H5O_LAYOUT_NDIMS]; /* Dimensions of the array */
int perm[H5O_LAYOUT_NDIMS]; /* Dimension permutations */
@@ -199,12 +200,12 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
H5T_t *temp_type; /* Temporary pointer to the field's datatype */
/* Decode the field name */
- dt->u.compnd.memb[i].name = H5MM_xstrdup((const char *)*pp);
+ dt->shared->u.compnd.memb[i].name = H5MM_xstrdup((const char *)*pp);
/*multiple of 8 w/ null terminator */
*pp += ((HDstrlen((const char *)*pp) + 8) / 8) * 8;
/* Decode the field offset */
- UINT32DECODE(*pp, dt->u.compnd.memb[i].offset);
+ UINT32DECODE(*pp, dt->shared->u.compnd.memb[i].offset);
/* Older versions of the library allowed a field to have
* intrinsic 'arrayness'. Newer versions of the library
@@ -227,16 +228,19 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
} /* end if */
/* Allocate space for the field's datatype */
- temp_type = H5FL_CALLOC (H5T_t);
- if (NULL==temp_type)
+ if(NULL== (temp_type = H5FL_CALLOC (H5T_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ if(NULL== (temp_type->shared = H5FL_CALLOC (H5T_shared_t))) {
+ H5FL_FREE(H5T_t, temp_type);
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ }
temp_type->ent.header = HADDR_UNDEF;
/* Decode the field's datatype information */
if (H5O_dtype_decode_helper(f, pp, temp_type)<0) {
for (j=0; j<=i; j++)
- H5MM_xfree(dt->u.compnd.memb[j].name);
- H5MM_xfree(dt->u.compnd.memb);
+ H5MM_xfree(dt->shared->u.compnd.memb[j].name);
+ H5MM_xfree(dt->shared->u.compnd.memb);
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode member type");
}
@@ -251,8 +255,8 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
/* Create the array datatype for the field */
if ((array_dt=H5T_array_create(temp_type,(int)ndims,dim,perm))==NULL) {
for (j=0; j<=i; j++)
- H5MM_xfree(dt->u.compnd.memb[j].name);
- H5MM_xfree(dt->u.compnd.memb);
+ H5MM_xfree(dt->shared->u.compnd.memb[j].name);
+ H5MM_xfree(dt->shared->u.compnd.memb);
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to create array datatype");
}
@@ -268,36 +272,36 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
* Set the "force conversion" flag if VL datatype fields exist in this
* type or any component types
*/
- if(temp_type->force_conv==TRUE)
- dt->force_conv=TRUE;
+ if(temp_type->shared->force_conv==TRUE)
+ dt->shared->force_conv=TRUE;
/* Member size */
- dt->u.compnd.memb[i].size = temp_type->size;
+ dt->shared->u.compnd.memb[i].size = temp_type->shared->size;
/* Set the field datatype (finally :-) */
- dt->u.compnd.memb[i].type=temp_type;
+ dt->shared->u.compnd.memb[i].type=temp_type;
/* Check if the datatype stayed packed */
- if(dt->u.compnd.packed) {
+ if(dt->shared->u.compnd.packed) {
/* Check if the member type is packed */
if(H5T_is_packed(temp_type)>0) {
if(i==0) {
/* If the is the first member, the datatype is not packed
* if the first member isn't at offset 0
*/
- if(dt->u.compnd.memb[i].offset>0)
- dt->u.compnd.packed=FALSE;
+ if(dt->shared->u.compnd.memb[i].offset>0)
+ dt->shared->u.compnd.packed=FALSE;
} /* end if */
else {
/* If the is not the first member, the datatype is not
* packed if the new member isn't adjoining the previous member
*/
- if(dt->u.compnd.memb[i].offset!=(dt->u.compnd.memb[i-1].offset+dt->u.compnd.memb[i-1].size))
- dt->u.compnd.packed=FALSE;
+ if(dt->shared->u.compnd.memb[i].offset!=(dt->shared->u.compnd.memb[i-1].offset+dt->shared->u.compnd.memb[i-1].size))
+ dt->shared->u.compnd.packed=FALSE;
} /* end else */
} /* end if */
else
- dt->u.compnd.packed=FALSE;
+ dt->shared->u.compnd.packed=FALSE;
} /* end if */
}
break;
@@ -306,46 +310,50 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
/*
* Enumeration data types...
*/
- dt->u.enumer.nmembs = dt->u.enumer.nalloc = flags & 0xffff;
- if (NULL==(dt->parent=H5FL_CALLOC(H5T_t)))
+ dt->shared->u.enumer.nmembs = dt->shared->u.enumer.nalloc = flags & 0xffff;
+ if (NULL==(dt->shared->parent=H5FL_CALLOC(H5T_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- dt->parent->ent.header = HADDR_UNDEF;
- if (H5O_dtype_decode_helper(f, pp, dt->parent)<0)
+ if(NULL== (dt->shared->parent->shared= H5FL_CALLOC (H5T_shared_t))) {
+ H5FL_FREE(H5T_t, dt->shared->parent);
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ }
+ dt->shared->parent->ent.header = HADDR_UNDEF;
+ if (H5O_dtype_decode_helper(f, pp, dt->shared->parent)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode parent data type");
- if (NULL==(dt->u.enumer.name=H5MM_calloc(dt->u.enumer.nalloc * sizeof(char*))) ||
- NULL==(dt->u.enumer.value=H5MM_calloc(dt->u.enumer.nalloc *
- dt->parent->size)))
+ if (NULL==(dt->shared->u.enumer.name=H5MM_calloc(dt->shared->u.enumer.nalloc * sizeof(char*))) ||
+ NULL==(dt->shared->u.enumer.value=H5MM_calloc(dt->shared->u.enumer.nalloc *
+ dt->shared->parent->shared->size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
/* Names, each a multiple of 8 with null termination */
- for (i=0; i<dt->u.enumer.nmembs; i++) {
- dt->u.enumer.name[i] = H5MM_xstrdup((const char*)*pp);
+ for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+ dt->shared->u.enumer.name[i] = H5MM_xstrdup((const char*)*pp);
*pp += ((HDstrlen((const char*)*pp)+8)/8)*8;
}
/* Values */
- HDmemcpy(dt->u.enumer.value, *pp,
- dt->u.enumer.nmembs * dt->parent->size);
- *pp += dt->u.enumer.nmembs * dt->parent->size;
+ HDmemcpy(dt->shared->u.enumer.value, *pp,
+ dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size);
+ *pp += dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size;
break;
case H5T_REFERENCE: /* Reference data types... */
- dt->u.atomic.order = H5T_ORDER_NONE;
- dt->u.atomic.prec = 8 * dt->size;
- dt->u.atomic.offset = 0;
- dt->u.atomic.lsb_pad = H5T_PAD_ZERO;
- dt->u.atomic.msb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.order = H5T_ORDER_NONE;
+ dt->shared->u.atomic.prec = 8 * dt->shared->size;
+ dt->shared->u.atomic.offset = 0;
+ dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
/* Set reference type */
- dt->u.atomic.u.r.rtype = (H5R_type_t)(flags & 0x0f);
+ dt->shared->u.atomic.u.r.rtype = (H5R_type_t)(flags & 0x0f);
/* Set extra information for object references, so the hobj_ref_t gets swizzled correctly */
- if(dt->u.atomic.u.r.rtype==H5R_OBJECT) {
+ if(dt->shared->u.atomic.u.r.rtype==H5R_OBJECT) {
/* This type is on disk */
- dt->u.atomic.u.r.loc = H5T_LOC_DISK;
+ dt->shared->u.atomic.u.r.loc = H5T_LOC_DISK;
/* This type needs conversion */
- dt->force_conv=TRUE;
+ dt->shared->force_conv=TRUE;
} /* end if */
break;
@@ -353,75 +361,88 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
/*
* Character string types...
*/
- dt->u.atomic.order = H5T_ORDER_NONE;
- dt->u.atomic.prec = 8 * dt->size;
- dt->u.atomic.offset = 0;
- dt->u.atomic.lsb_pad = H5T_PAD_ZERO;
- dt->u.atomic.msb_pad = H5T_PAD_ZERO;
-
- dt->u.atomic.u.s.pad = (H5T_str_t)(flags & 0x0f);
- dt->u.atomic.u.s.cset = (H5T_cset_t)((flags>>4) & 0x0f);
+ dt->shared->u.atomic.order = H5T_ORDER_NONE;
+ dt->shared->u.atomic.prec = 8 * dt->shared->size;
+ dt->shared->u.atomic.offset = 0;
+ dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+ dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+
+ dt->shared->u.atomic.u.s.pad = (H5T_str_t)(flags & 0x0f);
+ dt->shared->u.atomic.u.s.cset = (H5T_cset_t)((flags>>4) & 0x0f);
break;
case H5T_VLEN: /* Variable length datatypes... */
/* Set the type of VL information, either sequence or string */
- dt->u.vlen.type = (H5T_vlen_type_t)(flags & 0x0f);
- if(dt->u.vlen.type == H5T_VLEN_STRING) {
- dt->u.vlen.pad = (H5T_str_t)((flags>>4) & 0x0f);
- dt->u.vlen.cset = (H5T_cset_t)((flags>>8) & 0x0f);
+ dt->shared->u.vlen.type = (H5T_vlen_type_t)(flags & 0x0f);
+ if(dt->shared->u.vlen.type == H5T_VLEN_STRING) {
+ dt->shared->u.vlen.pad = (H5T_str_t)((flags>>4) & 0x0f);
+ dt->shared->u.vlen.cset = (H5T_cset_t)((flags>>8) & 0x0f);
} /* end if */
/* Decode base type of VL information */
- if (NULL==(dt->parent = H5FL_CALLOC(H5T_t)))
+ if (NULL==(dt->shared->parent = H5FL_CALLOC(H5T_t)))
+ HGOTO_ERROR (H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ if(NULL== (dt->shared->parent->shared = H5FL_CALLOC (H5T_shared_t))) {
+ H5FL_FREE(H5T_t, dt->shared->parent);
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ }
+ if (NULL==(dt->shared->parent->shared = H5FL_CALLOC(H5T_shared_t)))
+ {
+ H5FL_FREE(H5T_t, dt->shared->parent);
HGOTO_ERROR (H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed");
- dt->parent->ent.header = HADDR_UNDEF;
- if (H5O_dtype_decode_helper(f, pp, dt->parent)<0)
+ }
+ dt->shared->parent->ent.header = HADDR_UNDEF;
+ if (H5O_dtype_decode_helper(f, pp, dt->shared->parent)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type");
- dt->force_conv=TRUE;
+ dt->shared->force_conv=TRUE;
/* Mark this type as on disk */
if (H5T_set_loc(dt, f, H5T_LOC_DISK)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location");
break;
case H5T_TIME: /* Time datatypes */
- dt->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
- UINT16DECODE(*pp, dt->u.atomic.prec);
+ dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+ UINT16DECODE(*pp, dt->shared->u.atomic.prec);
break;
case H5T_ARRAY: /* Array datatypes... */
/* Decode the number of dimensions */
- dt->u.array.ndims = *(*pp)++;
+ dt->shared->u.array.ndims = *(*pp)++;
/* Double-check the number of dimensions */
- assert(dt->u.array.ndims <= H5S_MAX_RANK);
+ assert(dt->shared->u.array.ndims <= H5S_MAX_RANK);
/* Skip reserved bytes */
*pp += 3;
/* Decode array dimension sizes & compute number of elements */
- for (j=0, dt->u.array.nelem=1; j<(unsigned)dt->u.array.ndims; j++) {
- UINT32DECODE(*pp, dt->u.array.dim[j]);
- dt->u.array.nelem *= dt->u.array.dim[j];
+ for (j=0, dt->shared->u.array.nelem=1; j<(unsigned)dt->shared->u.array.ndims; j++) {
+ UINT32DECODE(*pp, dt->shared->u.array.dim[j]);
+ dt->shared->u.array.nelem *= dt->shared->u.array.dim[j];
} /* end for */
/* Decode array dimension permutations (even though they are unused currently) */
- for (j=0; j<(unsigned)dt->u.array.ndims; j++)
- UINT32DECODE(*pp, dt->u.array.perm[j]);
+ for (j=0; j<(unsigned)dt->shared->u.array.ndims; j++)
+ UINT32DECODE(*pp, dt->shared->u.array.perm[j]);
/* Decode base type of array */
- if (NULL==(dt->parent = H5FL_CALLOC(H5T_t)))
+ if (NULL==(dt->shared->parent = H5FL_CALLOC(H5T_t)))
HGOTO_ERROR (H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed");
- dt->parent->ent.header = HADDR_UNDEF;
- if (H5O_dtype_decode_helper(f, pp, dt->parent)<0)
+ if(NULL== (dt->shared->parent->shared = H5FL_CALLOC (H5T_shared_t))) {
+ H5FL_FREE(H5T_t, dt->shared->parent);
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ }
+ dt->shared->parent->ent.header = HADDR_UNDEF;
+ if (H5O_dtype_decode_helper(f, pp, dt->shared->parent)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type");
/*
* Set the "force conversion" flag if a VL base datatype is used or
* or if any components of the base datatype are VL types.
*/
- if(dt->parent->force_conv==TRUE)
- dt->force_conv=TRUE;
+ if(dt->shared->parent->shared->force_conv==TRUE)
+ dt->shared->force_conv=TRUE;
break;
default:
@@ -429,6 +450,14 @@ H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
}
done:
+ if(ret_value <0)
+ {
+ if(dt->shared != NULL)
+ H5FL_FREE(H5T_shared_t, dt->shared);
+ if(dt != NULL)
+ H5FL_FREE(H5T_t, dt);
+ }
+
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -466,14 +495,14 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
/* skip the type and class bit-field for now */
*pp += 4;
- UINT32ENCODE(*pp, dt->size);
+ UINT32ENCODE(*pp, dt->shared->size);
- switch (dt->type) {
+ switch (dt->shared->type) {
case H5T_INTEGER:
/*
* Integer data types...
*/
- switch (dt->u.atomic.order) {
+ switch (dt->shared->u.atomic.order) {
case H5T_ORDER_LE:
break; /*nothing */
case H5T_ORDER_BE:
@@ -483,7 +512,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
}
- switch (dt->u.atomic.lsb_pad) {
+ switch (dt->shared->u.atomic.lsb_pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -493,7 +522,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- switch (dt->u.atomic.msb_pad) {
+ switch (dt->shared->u.atomic.msb_pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -503,7 +532,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- switch (dt->u.atomic.u.i.sign) {
+ switch (dt->shared->u.atomic.u.i.sign) {
case H5T_SGN_NONE:
break; /*nothing */
case H5T_SGN_2:
@@ -513,15 +542,15 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "sign scheme is not supported in file format yet");
}
- UINT16ENCODE(*pp, dt->u.atomic.offset);
- UINT16ENCODE(*pp, dt->u.atomic.prec);
+ UINT16ENCODE(*pp, dt->shared->u.atomic.offset);
+ UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
break;
case H5T_BITFIELD:
/*
* Bitfield data types...
*/
- switch (dt->u.atomic.order) {
+ switch (dt->shared->u.atomic.order) {
case H5T_ORDER_LE:
break; /*nothing */
case H5T_ORDER_BE:
@@ -531,7 +560,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
}
- switch (dt->u.atomic.lsb_pad) {
+ switch (dt->shared->u.atomic.lsb_pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -541,7 +570,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- switch (dt->u.atomic.msb_pad) {
+ switch (dt->shared->u.atomic.msb_pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -551,8 +580,8 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- UINT16ENCODE(*pp, dt->u.atomic.offset);
- UINT16ENCODE(*pp, dt->u.atomic.prec);
+ UINT16ENCODE(*pp, dt->shared->u.atomic.offset);
+ UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
break;
case H5T_OPAQUE:
@@ -561,10 +590,10 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
* multiple of eight characters and null padded (not necessarily
* null terminated).
*/
- z = HDstrlen(dt->u.opaque.tag);
+ z = HDstrlen(dt->shared->u.opaque.tag);
aligned = (z+7) & 0xf8;
flags |= aligned;
- HDmemcpy(*pp, dt->u.opaque.tag, MIN(z,aligned));
+ HDmemcpy(*pp, dt->shared->u.opaque.tag, MIN(z,aligned));
for (n=MIN(z,aligned); n<aligned; n++) (*pp)[n] = 0;
*pp += aligned;
break;
@@ -573,7 +602,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
/*
* Floating-point types...
*/
- switch (dt->u.atomic.order) {
+ switch (dt->shared->u.atomic.order) {
case H5T_ORDER_LE:
break; /*nothing */
case H5T_ORDER_BE:
@@ -583,7 +612,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
}
- switch (dt->u.atomic.lsb_pad) {
+ switch (dt->shared->u.atomic.lsb_pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -593,7 +622,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- switch (dt->u.atomic.msb_pad) {
+ switch (dt->shared->u.atomic.msb_pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -603,7 +632,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- switch (dt->u.atomic.u.f.pad) {
+ switch (dt->shared->u.atomic.u.f.pad) {
case H5T_PAD_ZERO:
break; /*nothing */
case H5T_PAD_ONE:
@@ -613,7 +642,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
}
- switch (dt->u.atomic.u.f.norm) {
+ switch (dt->shared->u.atomic.u.f.norm) {
case H5T_NORM_NONE:
break; /*nothing */
case H5T_NORM_MSBSET:
@@ -626,18 +655,18 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "normalization scheme is not supported in file format yet");
}
- flags |= (dt->u.atomic.u.f.sign << 8) & 0xff00;
- UINT16ENCODE(*pp, dt->u.atomic.offset);
- UINT16ENCODE(*pp, dt->u.atomic.prec);
- assert (dt->u.atomic.u.f.epos<=255);
- *(*pp)++ = (uint8_t)(dt->u.atomic.u.f.epos);
- assert (dt->u.atomic.u.f.esize<=255);
- *(*pp)++ = (uint8_t)(dt->u.atomic.u.f.esize);
- assert (dt->u.atomic.u.f.mpos<=255);
- *(*pp)++ = (uint8_t)(dt->u.atomic.u.f.mpos);
- assert (dt->u.atomic.u.f.msize<=255);
- *(*pp)++ = (uint8_t)(dt->u.atomic.u.f.msize);
- UINT32ENCODE(*pp, dt->u.atomic.u.f.ebias);
+ flags |= (dt->shared->u.atomic.u.f.sign << 8) & 0xff00;
+ UINT16ENCODE(*pp, dt->shared->u.atomic.offset);
+ UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
+ assert (dt->shared->u.atomic.u.f.epos<=255);
+ *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.epos);
+ assert (dt->shared->u.atomic.u.f.esize<=255);
+ *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.esize);
+ assert (dt->shared->u.atomic.u.f.mpos<=255);
+ *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.mpos);
+ assert (dt->shared->u.atomic.u.f.msize<=255);
+ *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.msize);
+ UINT32ENCODE(*pp, dt->shared->u.atomic.u.f.ebias);
break;
case H5T_COMPOUND:
@@ -648,18 +677,18 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
/*
* Compound data types...
*/
- flags = dt->u.compnd.nmembs & 0xffff;
- for (i=0; i<dt->u.compnd.nmembs; i++) {
+ flags = dt->shared->u.compnd.nmembs & 0xffff;
+ for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
/* Name, multiple of eight bytes */
- HDstrcpy((char*)(*pp), dt->u.compnd.memb[i].name);
- n = HDstrlen(dt->u.compnd.memb[i].name);
+ HDstrcpy((char*)(*pp), dt->shared->u.compnd.memb[i].name);
+ n = HDstrlen(dt->shared->u.compnd.memb[i].name);
for (z=n+1; z%8; z++)
(*pp)[z] = '\0';
*pp += z;
/* Member offset */
- UINT32ENCODE(*pp, dt->u.compnd.memb[i].offset);
+ UINT32ENCODE(*pp, dt->shared->u.compnd.memb[i].offset);
/* If we don't have any array fields, write out the old style
* member information, for better backward compatibility
@@ -686,7 +715,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
} /* end if */
/* Subtype */
- if (H5O_dtype_encode_helper(pp, dt->u.compnd.memb[i].type)<0)
+ if (H5O_dtype_encode_helper(pp, dt->shared->u.compnd.memb[i].type)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode member type");
}
break;
@@ -695,58 +724,58 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
/*
* Enumeration data types...
*/
- flags = dt->u.enumer.nmembs & 0xffff;
+ flags = dt->shared->u.enumer.nmembs & 0xffff;
/* Parent type */
- if (H5O_dtype_encode_helper(pp, dt->parent)<0)
+ if (H5O_dtype_encode_helper(pp, dt->shared->parent)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode parent data type");
/* Names, each a multiple of eight bytes */
- for (i=0; i<dt->u.enumer.nmembs; i++) {
- HDstrcpy((char*)(*pp), dt->u.enumer.name[i]);
- n = HDstrlen(dt->u.enumer.name[i]);
+ for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+ HDstrcpy((char*)(*pp), dt->shared->u.enumer.name[i]);
+ n = HDstrlen(dt->shared->u.enumer.name[i]);
for (z=n+1; z%8; z++)
(*pp)[z] = '\0';
*pp += z;
}
/* Values */
- HDmemcpy(*pp, dt->u.enumer.value, dt->u.enumer.nmembs * dt->parent->size);
- *pp += dt->u.enumer.nmembs * dt->parent->size;
+ HDmemcpy(*pp, dt->shared->u.enumer.value, dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size);
+ *pp += dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size;
break;
case H5T_REFERENCE:
- flags |= (dt->u.atomic.u.r.rtype & 0x0f);
+ flags |= (dt->shared->u.atomic.u.r.rtype & 0x0f);
break;
case H5T_STRING:
/*
* Character string types... (not fully implemented)
*/
- assert (dt->u.atomic.order == H5T_ORDER_NONE);
- assert (dt->u.atomic.prec == 8 * dt->size);
- assert (dt->u.atomic.offset == 0);
- assert (dt->u.atomic.lsb_pad == H5T_PAD_ZERO);
- assert (dt->u.atomic.msb_pad == H5T_PAD_ZERO);
-
- flags |= (dt->u.atomic.u.s.pad & 0x0f);
- flags |= (dt->u.atomic.u.s.cset & 0x0f) << 4;
+ assert (dt->shared->u.atomic.order == H5T_ORDER_NONE);
+ assert (dt->shared->u.atomic.prec == 8 * dt->shared->size);
+ assert (dt->shared->u.atomic.offset == 0);
+ assert (dt->shared->u.atomic.lsb_pad == H5T_PAD_ZERO);
+ assert (dt->shared->u.atomic.msb_pad == H5T_PAD_ZERO);
+
+ flags |= (dt->shared->u.atomic.u.s.pad & 0x0f);
+ flags |= (dt->shared->u.atomic.u.s.cset & 0x0f) << 4;
break;
case H5T_VLEN: /* Variable length datatypes... */
- flags |= (dt->u.vlen.type & 0x0f);
- if(dt->u.vlen.type == H5T_VLEN_STRING) {
- flags |= (dt->u.vlen.pad & 0x0f) << 4;
- flags |= (dt->u.vlen.cset & 0x0f) << 8;
+ flags |= (dt->shared->u.vlen.type & 0x0f);
+ if(dt->shared->u.vlen.type == H5T_VLEN_STRING) {
+ flags |= (dt->shared->u.vlen.pad & 0x0f) << 4;
+ flags |= (dt->shared->u.vlen.cset & 0x0f) << 8;
} /* end if */
/* Encode base type of VL information */
- if (H5O_dtype_encode_helper(pp, dt->parent)<0)
+ if (H5O_dtype_encode_helper(pp, dt->shared->parent)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode VL parent type");
break;
case H5T_TIME: /* Time datatypes... */
- switch (dt->u.atomic.order) {
+ switch (dt->shared->u.atomic.order) {
case H5T_ORDER_LE:
break; /*nothing */
case H5T_ORDER_BE:
@@ -755,15 +784,15 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
default:
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
}
- UINT16ENCODE(*pp, dt->u.atomic.prec);
+ UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
break;
case H5T_ARRAY: /* Array datatypes... */
/* Double-check the number of dimensions */
- assert(dt->u.array.ndims <= H5S_MAX_RANK);
+ assert(dt->shared->u.array.ndims <= H5S_MAX_RANK);
/* Encode the number of dimensions */
- *(*pp)++ = dt->u.array.ndims;
+ *(*pp)++ = dt->shared->u.array.ndims;
/* Reserved */
*(*pp)++ = '\0';
@@ -771,15 +800,15 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
*(*pp)++ = '\0';
/* Encode array dimensions */
- for (j=0; j<(unsigned)dt->u.array.ndims; j++)
- UINT32ENCODE(*pp, dt->u.array.dim[j]);
+ for (j=0; j<(unsigned)dt->shared->u.array.ndims; j++)
+ UINT32ENCODE(*pp, dt->shared->u.array.dim[j]);
/* Encode array dimension permutations */
- for (j=0; j<(unsigned)dt->u.array.ndims; j++)
- UINT32ENCODE(*pp, dt->u.array.perm[j]);
+ for (j=0; j<(unsigned)dt->shared->u.array.ndims; j++)
+ UINT32ENCODE(*pp, dt->shared->u.array.perm[j]);
/* Encode base type of array's information */
- if (H5O_dtype_encode_helper(pp, dt->parent)<0)
+ if (H5O_dtype_encode_helper(pp, dt->shared->parent)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode VL parent type");
break;
@@ -789,7 +818,7 @@ H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
}
/* Encode the type's class, version and bit field */
- *hdr++ = ((unsigned)(dt->type) & 0x0f) | (((dt->type==H5T_COMPOUND && has_array) ? H5O_DTYPE_VERSION_UPDATED : H5O_DTYPE_VERSION_COMPAT )<<4);
+ *hdr++ = ((unsigned)(dt->shared->type) & 0x0f) | (((dt->shared->type==H5T_COMPOUND && has_array) ? H5O_DTYPE_VERSION_UPDATED : H5O_DTYPE_VERSION_COMPAT )<<4);
*hdr++ = (flags >> 0) & 0xff;
*hdr++ = (flags >> 8) & 0xff;
*hdr++ = (flags >> 16) & 0xff;
@@ -831,7 +860,11 @@ H5O_dtype_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p,
if (NULL==(dt = H5FL_CALLOC(H5T_t)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+ if (NULL==(dt->shared=H5FL_CALLOC(H5T_shared_t)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
dt->ent.header = HADDR_UNDEF;
+ dt->shared->fo_count=1;
+
if (H5O_dtype_decode_helper(f, &p, dt) < 0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, NULL, "can't decode type");
@@ -841,6 +874,8 @@ H5O_dtype_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p,
done:
if(ret_value==NULL) {
+ if(dt->shared!=NULL)
+ H5FL_FREE(H5T_shared_t, dt->shared);
if(dt!=NULL)
H5FL_FREE(H5T_t,dt);
} /* end if */
@@ -967,7 +1002,7 @@ H5O_dtype_size(H5F_t *f, const void *mesg)
assert(mesg);
/* Add in the property field length for each datatype class */
- switch (dt->type) {
+ switch (dt->shared->type) {
case H5T_INTEGER:
ret_value += 4;
break;
@@ -977,7 +1012,7 @@ H5O_dtype_size(H5F_t *f, const void *mesg)
break;
case H5T_OPAQUE:
- ret_value += (HDstrlen(dt->u.opaque.tag)+7) & 0xf8;
+ ret_value += (HDstrlen(dt->shared->u.opaque.tag)+7) & 0xf8;
break;
case H5T_FLOAT:
@@ -985,27 +1020,27 @@ H5O_dtype_size(H5F_t *f, const void *mesg)
break;
case H5T_COMPOUND:
- for (i=0; i<dt->u.compnd.nmembs; i++) {
- ret_value += ((HDstrlen(dt->u.compnd.memb[i].name) + 8) / 8) * 8;
+ for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+ ret_value += ((HDstrlen(dt->shared->u.compnd.memb[i].name) + 8) / 8) * 8;
ret_value += 4 + /*member offset*/
1 + /*dimensionality*/
3 + /*reserved*/
4 + /*permutation*/
4 + /*reserved*/
16; /*dimensions*/
- ret_value += H5O_dtype_size(f, dt->u.compnd.memb[i].type);
+ ret_value += H5O_dtype_size(f, dt->shared->u.compnd.memb[i].type);
}
break;
case H5T_ENUM:
- ret_value += H5O_dtype_size(f, dt->parent);
- for (i=0; i<dt->u.enumer.nmembs; i++)
- ret_value += ((HDstrlen(dt->u.enumer.name[i])+8)/8)*8;
- ret_value += dt->u.enumer.nmembs * dt->parent->size;
+ ret_value += H5O_dtype_size(f, dt->shared->parent);
+ for (i=0; i<dt->shared->u.enumer.nmembs; i++)
+ ret_value += ((HDstrlen(dt->shared->u.enumer.name[i])+8)/8)*8;
+ ret_value += dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size;
break;
case H5T_VLEN:
- ret_value += H5O_dtype_size(f, dt->parent);
+ ret_value += H5O_dtype_size(f, dt->shared->parent);
break;
case H5T_TIME:
@@ -1014,9 +1049,9 @@ H5O_dtype_size(H5F_t *f, const void *mesg)
case H5T_ARRAY:
ret_value += 4; /* ndims & reserved bytes*/
- ret_value += 4*dt->u.array.ndims; /* dimensions */
- ret_value += 4*dt->u.array.ndims; /* dimension permutations */
- ret_value += H5O_dtype_size(f, dt->parent);
+ ret_value += 4*dt->shared->u.array.ndims; /* dimensions */
+ ret_value += 4*dt->shared->u.array.ndims; /* dimension permutations */
+ ret_value += H5O_dtype_size(f, dt->shared->parent);
break;
default:
@@ -1078,6 +1113,7 @@ H5O_dtype_free (void *mesg)
assert (mesg);
+ H5FL_FREE(H5T_shared_t, ((H5T_t *) mesg)->shared);
H5FL_FREE(H5T_t,mesg);
FUNC_LEAVE_NOAPI(SUCCEED);
@@ -1112,7 +1148,7 @@ H5O_dtype_get_share(H5F_t UNUSED *f, const void *_mesg,
assert (sh);
if (H5F_addr_defined (dt->ent.header)) {
- if(H5T_STATE_NAMED!=dt->state && H5T_STATE_OPEN!=dt->state && H5T_STATE_TRANSIENT!=dt->state)
+ if(H5T_STATE_NAMED!=dt->shared->state && H5T_STATE_OPEN!=dt->shared->state && H5T_STATE_TRANSIENT!=dt->shared->state)
HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "datatype state is not valid");
sh->in_gh = FALSE;
@@ -1162,7 +1198,7 @@ H5O_dtype_set_share (H5F_t UNUSED *f, void *_mesg/*in,out*/,
dt->ent.canon_path_r = NULL;
/* Note that the datatype is a named datatype */
- dt->state = H5T_STATE_NAMED;
+ dt->shared->state = H5T_STATE_NAMED;
FUNC_LEAVE_NOAPI(SUCCEED);
}
@@ -1206,7 +1242,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
assert(indent >= 0);
assert(fwidth >= 0);
- switch (dt->type) {
+ switch (dt->shared->type) {
case H5T_INTEGER:
s = "integer";
break;
@@ -1241,7 +1277,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "vlen";
break;
default:
- sprintf(buf, "H5T_CLASS_%d", (int) (dt->type));
+ sprintf(buf, "H5T_CLASS_%d", (int) (dt->shared->type));
s = buf;
break;
}
@@ -1251,51 +1287,51 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %lu byte%s\n", indent, "", fwidth,
"Size:",
- (unsigned long)(dt->size), 1==dt->size?"":"s");
+ (unsigned long)(dt->shared->size), 1==dt->shared->size?"":"s");
- if (H5T_COMPOUND == dt->type) {
+ if (H5T_COMPOUND == dt->shared->type) {
fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Number of members:",
- dt->u.compnd.nmembs);
- for (i=0; i<dt->u.compnd.nmembs; i++) {
+ dt->shared->u.compnd.nmembs);
+ for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
sprintf(buf, "Member %d:", i);
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
buf,
- dt->u.compnd.memb[i].name);
+ dt->shared->u.compnd.memb[i].name);
fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0, fwidth-3),
"Byte offset:",
- (unsigned long) (dt->u.compnd.memb[i].offset));
- H5O_dtype_debug(f, dxpl_id, dt->u.compnd.memb[i].type, stream,
+ (unsigned long) (dt->shared->u.compnd.memb[i].offset));
+ H5O_dtype_debug(f, dxpl_id, dt->shared->u.compnd.memb[i].type, stream,
indent+3, MAX(0, fwidth - 3));
}
- } else if (H5T_ENUM==dt->type) {
+ } else if (H5T_ENUM==dt->shared->type) {
fprintf(stream, "%*s%s\n", indent, "", "Base type:");
- H5O_dtype_debug(f, dxpl_id, dt->parent, stream, indent+3, MAX(0, fwidth-3));
+ H5O_dtype_debug(f, dxpl_id, dt->shared->parent, stream, indent+3, MAX(0, fwidth-3));
fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Number of members:",
- dt->u.enumer.nmembs);
- for (i=0; i<dt->u.enumer.nmembs; i++) {
+ dt->shared->u.enumer.nmembs);
+ for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
sprintf(buf, "Member %d:", i);
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
buf,
- dt->u.enumer.name[i]);
+ dt->shared->u.enumer.name[i]);
fprintf(stream, "%*s%-*s 0x", indent, "", fwidth,
"Raw bytes of value:");
- for (k=0; k<dt->parent->size; k++) {
+ for (k=0; k<dt->shared->parent->shared->size; k++) {
fprintf(stream, "%02x",
- dt->u.enumer.value[i*dt->parent->size+k]);
+ dt->shared->u.enumer.value[i*dt->shared->parent->shared->size+k]);
}
fprintf(stream, "\n");
}
- } else if (H5T_OPAQUE==dt->type) {
+ } else if (H5T_OPAQUE==dt->shared->type) {
fprintf(stream, "%*s%-*s \"%s\"\n", indent, "", fwidth,
- "Tag:", dt->u.opaque.tag);
- } else if (H5T_REFERENCE==dt->type) {
+ "Tag:", dt->shared->u.opaque.tag);
+ } else if (H5T_REFERENCE==dt->shared->type) {
fprintf(stream, "%*s%-*s\n", indent, "", fwidth,
"Fix dumping reference types!");
- } else if (H5T_VLEN==dt->type) {
- switch (dt->u.vlen.type) {
+ } else if (H5T_VLEN==dt->shared->type) {
+ switch (dt->shared->u.vlen.type) {
case H5T_VLEN_SEQUENCE:
s = "sequence";
break;
@@ -1303,14 +1339,14 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "string";
break;
default:
- sprintf(buf, "H5T_VLEN_%d", dt->u.vlen.type);
+ sprintf(buf, "H5T_VLEN_%d", dt->shared->u.vlen.type);
s = buf;
break;
}
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Vlen type:", s);
- switch (dt->u.vlen.loc) {
+ switch (dt->shared->u.vlen.loc) {
case H5T_LOC_MEMORY:
s = "memory";
break;
@@ -1318,30 +1354,30 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "disk";
break;
default:
- sprintf(buf, "H5T_LOC_%d", dt->u.vlen.loc);
+ sprintf(buf, "H5T_LOC_%d", dt->shared->u.vlen.loc);
s = buf;
break;
}
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Location:", s);
- } else if (H5T_ARRAY==dt->type) {
+ } else if (H5T_ARRAY==dt->shared->type) {
fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Rank:",
- dt->u.array.ndims);
+ dt->shared->u.array.ndims);
fprintf(stream, "%*s%-*s {", indent, "", fwidth, "Dim Size:");
- for (i=0; i<(unsigned)dt->u.array.ndims; i++) {
- fprintf (stream, "%s%u", i?", ":"", (unsigned)dt->u.array.dim[i]);
+ for (i=0; i<(unsigned)dt->shared->u.array.ndims; i++) {
+ fprintf (stream, "%s%u", i?", ":"", (unsigned)dt->shared->u.array.dim[i]);
}
fprintf (stream, "}\n");
fprintf(stream, "%*s%-*s {", indent, "", fwidth, "Dim Permutation:");
- for (i=0; i<(unsigned)dt->u.array.ndims; i++) {
- fprintf (stream, "%s%d", i?", ":"", dt->u.array.perm[i]);
+ for (i=0; i<(unsigned)dt->shared->u.array.ndims; i++) {
+ fprintf (stream, "%s%d", i?", ":"", dt->shared->u.array.perm[i]);
}
fprintf (stream, "}\n");
fprintf(stream, "%*s%s\n", indent, "", "Base type:");
- H5O_dtype_debug(f, dxpl_id, dt->parent, stream, indent+3, MAX(0, fwidth-3));
+ H5O_dtype_debug(f, dxpl_id, dt->shared->parent, stream, indent+3, MAX(0, fwidth-3));
} else {
- switch (dt->u.atomic.order) {
+ switch (dt->shared->u.atomic.order) {
case H5T_ORDER_LE:
s = "little endian";
break;
@@ -1355,7 +1391,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "none";
break;
default:
- sprintf(buf, "H5T_ORDER_%d", dt->u.atomic.order);
+ sprintf(buf, "H5T_ORDER_%d", dt->shared->u.atomic.order);
s = buf;
break;
}
@@ -1365,15 +1401,15 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %lu bit%s\n", indent, "", fwidth,
"Precision:",
- (unsigned long)(dt->u.atomic.prec),
- 1==dt->u.atomic.prec?"":"s");
+ (unsigned long)(dt->shared->u.atomic.prec),
+ 1==dt->shared->u.atomic.prec?"":"s");
fprintf(stream, "%*s%-*s %lu bit%s\n", indent, "", fwidth,
"Offset:",
- (unsigned long)(dt->u.atomic.offset),
- 1==dt->u.atomic.offset?"":"s");
+ (unsigned long)(dt->shared->u.atomic.offset),
+ 1==dt->shared->u.atomic.offset?"":"s");
- switch (dt->u.atomic.lsb_pad) {
+ switch (dt->shared->u.atomic.lsb_pad) {
case H5T_PAD_ZERO:
s = "zero";
break;
@@ -1387,7 +1423,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Low pad type:", s);
- switch (dt->u.atomic.msb_pad) {
+ switch (dt->shared->u.atomic.msb_pad) {
case H5T_PAD_ZERO:
s = "zero";
break;
@@ -1401,8 +1437,8 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"High pad type:", s);
- if (H5T_FLOAT == dt->type) {
- switch (dt->u.atomic.u.f.pad) {
+ if (H5T_FLOAT == dt->shared->type) {
+ switch (dt->shared->u.atomic.u.f.pad) {
case H5T_PAD_ZERO:
s = "zero";
break;
@@ -1410,10 +1446,10 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "one";
break;
default:
- if (dt->u.atomic.u.f.pad < 0) {
- sprintf(buf, "H5T_PAD_%d", -(dt->u.atomic.u.f.pad));
+ if (dt->shared->u.atomic.u.f.pad < 0) {
+ sprintf(buf, "H5T_PAD_%d", -(dt->shared->u.atomic.u.f.pad));
} else {
- sprintf(buf, "bit-%d", dt->u.atomic.u.f.pad);
+ sprintf(buf, "bit-%d", dt->shared->u.atomic.u.f.pad);
}
s = buf;
break;
@@ -1421,7 +1457,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Internal pad type:", s);
- switch (dt->u.atomic.u.f.norm) {
+ switch (dt->shared->u.atomic.u.f.norm) {
case H5T_NORM_IMPLIED:
s = "implied";
break;
@@ -1432,7 +1468,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "none";
break;
default:
- sprintf(buf, "H5T_NORM_%d", (int) (dt->u.atomic.u.f.norm));
+ sprintf(buf, "H5T_NORM_%d", (int) (dt->shared->u.atomic.u.f.norm));
s = buf;
}
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
@@ -1440,30 +1476,30 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Sign bit location:",
- (unsigned long) (dt->u.atomic.u.f.sign));
+ (unsigned long) (dt->shared->u.atomic.u.f.sign));
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Exponent location:",
- (unsigned long) (dt->u.atomic.u.f.epos));
+ (unsigned long) (dt->shared->u.atomic.u.f.epos));
fprintf(stream, "%*s%-*s 0x%08lx\n", indent, "", fwidth,
"Exponent bias:",
- (unsigned long) (dt->u.atomic.u.f.ebias));
+ (unsigned long) (dt->shared->u.atomic.u.f.ebias));
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Exponent size:",
- (unsigned long) (dt->u.atomic.u.f.esize));
+ (unsigned long) (dt->shared->u.atomic.u.f.esize));
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Mantissa location:",
- (unsigned long) (dt->u.atomic.u.f.mpos));
+ (unsigned long) (dt->shared->u.atomic.u.f.mpos));
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Mantissa size:",
- (unsigned long) (dt->u.atomic.u.f.msize));
+ (unsigned long) (dt->shared->u.atomic.u.f.msize));
- } else if (H5T_INTEGER == dt->type) {
- switch (dt->u.atomic.u.i.sign) {
+ } else if (H5T_INTEGER == dt->shared->type) {
+ switch (dt->shared->u.atomic.u.i.sign) {
case H5T_SGN_NONE:
s = "none";
break;
@@ -1471,7 +1507,7 @@ H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
s = "2's comp";
break;
default:
- sprintf(buf, "H5T_SGN_%d", (int) (dt->u.atomic.u.i.sign));
+ sprintf(buf, "H5T_SGN_%d", (int) (dt->shared->u.atomic.u.i.sign));
s = buf;
break;
}