/*------------------------------------------------------------------------- * Function: H5O_layout_decode * * Purpose: Decode an data layout message and return a pointer to a * new one created with malloc(). * * Return: Success: Ptr to new message in native order. * * Failure: NULL * * Programmer: Robb Matzke * Wednesday, October 8, 1997 * * Modifications: * Robb Matzke, 1998-07-20 * Rearranged the message to add a version number at the beginning. * * Raymond Lu, 2002-2-26 * Added version number 2 case depends on if space has been allocated * at the moment when layout header message is updated. * *------------------------------------------------------------------------- */ static void * H5O_layout_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p) { H5O_layout_t *mesg = NULL; unsigned u; void *ret_value; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5O_layout_decode); /* check args */ assert(f); assert(p); /* decode */ if (NULL==(mesg = H5FL_CALLOC(H5O_layout_t))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed"); /* Version. 1 when space allocated; 2 when space allocation is delayed */ mesg->version = *p++; if (mesg->version<H5O_LAYOUT_VERSION_1 || mesg->version>H5O_LAYOUT_VERSION_3) HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for layout message"); if(mesg->version < H5O_LAYOUT_VERSION_3) { unsigned ndims; /* Num dimensions in chunk */ /* Dimensionality */ ndims = *p++; if (ndims>H5O_LAYOUT_NDIMS) HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "dimensionality is too large"); /* Layout class */ mesg->type = (H5D_layout_t)*p++; assert(H5D_CONTIGUOUS == mesg->type || H5D_CHUNKED == mesg->type || H5D_COMPACT == mesg->type); /* Reserved bytes */ p += 5; /* Address */ if(mesg->type==H5D_CONTIGUOUS) H5F_addr_decode(f, &p, &(mesg->u.contig.addr)); else if(mesg->type==H5D_CHUNKED) H5F_addr_decode(f, &p, &(mesg->u.chunk.addr)); /* Read the size */ if(mesg->type!=H5D_CHUNKED) { mesg->unused.ndims=ndims; for (u = 0; u < ndims; u++) UINT32DECODE(p, mesg->unused.dim[u]); /* Don't compute size of contiguous storage here, due to possible * truncation of the dimension sizes when they were stored in this * version of the layout message. Compute the contiguous storage * size in the dataset code, where we've got the dataspace * information available also. - QAK 5/26/04 */ } /* end if */ else { mesg->u.chunk.ndims=ndims; for (u = 0; u < ndims; u++) UINT32DECODE(p, mesg->u.chunk.dim[u]); /* Compute chunk size */ for (u=1, mesg->u.chunk.size=mesg->u.chunk.dim[0]; u<ndims; u++) mesg->u.chunk.size *= mesg->u.chunk.dim[u]; } /* end if */ if(mesg->type == H5D_COMPACT) { UINT32DECODE(p, mesg->u.compact.size); if(mesg->u.compact.size > 0) { if(NULL==(mesg->u.compact.buf=H5MM_malloc(mesg->u.compact.size))) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for compact data buffer"); HDmemcpy(mesg->u.compact.buf, p, mesg->u.compact.size); p += mesg->u.compact.size; } } } /* end if */ else { /* Layout class */ mesg->type = (H5D_layout_t)*p++; /* Interpret the rest of the message according to the layout class */ switch(mesg->type) { case H5D_CONTIGUOUS: H5F_addr_decode(f, &p, &(mesg->u.contig.addr)); H5F_DECODE_LENGTH(f, p, mesg->u.contig.size); break; case H5D_CHUNKED: /* Dimensionality */ mesg->u.chunk.ndims = *p++; if (mesg->u.chunk.ndims>H5O_LAYOUT_NDIMS) HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "dimensionality is too large"); /* B-tree address */ H5F_addr_decode(f, &p, &(mesg->u.chunk.addr)); /* Chunk dimensions */ for (u = 0; u < mesg->u.chunk.ndims; u++) UINT32DECODE(p, mesg->u.chunk.dim[u]); /* Compute chunk size */ for (u=1, mesg->u.chunk.size=mesg->u.chunk.dim[0]; u<mesg->u.chunk.ndims; u++) mesg->u.chunk.size *= mesg->u.chunk.dim[u]; break; case H5D_COMPACT: UINT16DECODE(p, mesg->u.compact.size); if(mesg->u.compact.size > 0) { if(NULL==(mesg->u.compact.buf=H5MM_malloc(mesg->u.compact.size))) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for compact data buffer"); HDmemcpy(mesg->u.compact.buf, p, mesg->u.compact.size); p += mesg->u.compact.size; } /* end if */ break; default: HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "Invalid layout class"); } /* end switch */ } /* end else */ /* Set return value */ ret_value=mesg; done: if(ret_value==NULL) { if(mesg) H5FL_FREE(H5O_layout_t,mesg); } /* end if */ FUNC_LEAVE_NOAPI(ret_value); }
/*-------------------------------------------------------------------------- NAME H5HP_remove PURPOSE Remove an object into a heap USAGE herr_t H5HP_remove(heap, val, obj) H5HP_t *heap; IN/OUT: Pointer to heap to modify int *val; OUT: Pointer to value of object removed from heap void **obj; OUT: Pointer to object removed from heap RETURNS Returns non-negative on success, negative on failure. DESCRIPTION Removes the top object on a heap, returning its value and object pointer GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ herr_t H5HP_remove(H5HP_t *heap, int *val, void **obj) { herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) /* Check args */ assert(heap); assert(val); assert(obj); /* Check internal consistency */ /* (Pre-condition) */ assert(heap->nobjs<heap->nalloc); assert(heap->heap); assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) || (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN)); assert(heap->heap[0].obj==NULL); /* Check if there are any objects on the heap to remove */ if(heap->nobjs==0) HGOTO_ERROR(H5E_HEAP, H5E_NOTFOUND, FAIL, "heap is empty"); /* Get the information for the top object on the heap */ assert(heap->heap[1].obj->heap_loc==1); *val=heap->heap[1].val; *obj=heap->heap[1].obj; /* Move the last element in the heap to the top */ heap->heap[1].val=heap->heap[heap->nobjs].val; heap->heap[1].obj=heap->heap[heap->nobjs].obj; heap->heap[1].obj->heap_loc=1; /* Decrement number of objects in heap */ heap->nobjs--; /* Restore heap condition, if there are objects on the heap */ if(heap->nobjs>0) { if(heap->type==H5HP_MAX_HEAP) { if(H5HP_sink_max(heap, (size_t)1) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to restore heap condition"); } /* end if */ else { if(H5HP_sink_min(heap, (size_t)1) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to restore heap condition"); } /* end else */ } /* end if */ done: /* Check internal consistency */ /* (Post-condition) */ assert(heap->nobjs<heap->nalloc); assert(heap->heap); assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) || (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN)); assert(heap->heap[0].obj==NULL); FUNC_LEAVE_NOAPI(ret_value); } /* end H5HP_remove() */
/*------------------------------------------------------------------------- * Function: H5HG_debug * * Purpose: Prints debugging information about a global heap collection. * * Return: Non-negative on success/Negative on failure * * Programmer: Robb Matzke * [email protected] * Mar 27, 1998 * *------------------------------------------------------------------------- */ herr_t H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth) { unsigned u, nused, maxobj; unsigned j, k; H5HG_heap_t *h = NULL; uint8_t *p = NULL; herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) /* check arguments */ HDassert(f); HDassert(H5F_addr_defined (addr)); HDassert(stream); HDassert(indent >= 0); HDassert(fwidth >= 0); if(NULL == (h = H5HG_protect(f, dxpl_id, addr, H5AC__READ_ONLY_FLAG))) HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect global heap collection"); HDfprintf(stream, "%*sGlobal Heap Collection...\n", indent, ""); HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth, "Dirty:", (int)(h->cache_info.is_dirty)); HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth, "Total collection size in file:", (unsigned long)(h->size)); for(u = 1, nused = 0, maxobj = 0; u < h->nused; u++) if(h->obj[u].begin) { nused++; if (u>maxobj) maxobj = u; } HDfprintf(stream, "%*s%-*s %u/%lu/", indent, "", fwidth, "Objects defined/allocated/max:", nused, (unsigned long)h->nalloc); if(nused) HDfprintf(stream, "%u\n", maxobj); else HDfprintf(stream, "NA\n"); HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth, "Free space:", (unsigned long)(h->obj[0].size)); for(u = 1; u < h->nused; u++) if(h->obj[u].begin) { char buf[64]; HDsnprintf(buf, sizeof(buf), "Object %u", u); HDfprintf(stream, "%*s%s\n", indent, "", buf); HDfprintf(stream, "%*s%-*s %lu\n", indent + 3, "", MIN(fwidth - 3, 0), "Obffset in block:", (unsigned long)(h->obj[u].begin - h->chunk)); HDfprintf(stream, "%*s%-*s %d\n", indent + 3, "", MIN(fwidth - 3, 0), "Reference count:", h->obj[u].nrefs); HDfprintf(stream, "%*s%-*s %lu/%lu\n", indent + 3, "", MIN(fwidth - 3, 0), "Size of object body:", (unsigned long)(h->obj[u].size), (unsigned long)H5HG_ALIGN(h->obj[u].size)); p = h->obj[u].begin + H5HG_SIZEOF_OBJHDR(f); for(j = 0; j < h->obj[u].size; j += 16) { HDfprintf(stream, "%*s%04u: ", indent + 6, "", j); for(k = 0; k < 16; k++) { if(8 == k) HDfprintf(stream, " "); if(j + k < h->obj[u].size) HDfprintf(stream, "%02x ", p[j + k]); else HDfputs(" ", stream); } for(k = 0; k < 16 && j + k < h->obj[u].size; k++) { if(8 == k) HDfprintf(stream, " "); HDfputc(p[j + k]>' ' && p[j + k] <= '~' ? p[j + k] : '.', stream); } HDfprintf(stream, "\n"); } } done: if (h && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, addr, h, H5AC__NO_FLAGS_SET) < 0) HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header"); FUNC_LEAVE_NOAPI(ret_value); } /* end H5HG_debug() */
/*------------------------------------------------------------------------- * Function: H5TN_init_interface * * Purpose: Initialize pre-defined native datatypes from code generated * during the library configuration by H5detect. * * Return: Success: non-negative * Failure: negative * * Programmer: Robb Matzke * Wednesday, December 16, 1998 * *------------------------------------------------------------------------- */ herr_t H5TN_init_interface(void) { H5T_t *dt = NULL; herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI(FAIL) /* * 0 * IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_SCHAR_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_SCHAR_ALIGN_g = 1; H5T_NATIVE_SCHAR_COMP_ALIGN_g = 1; /* * 0 * UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UCHAR_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UCHAR_ALIGN_g = 1; /* * 1 0 * IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 2; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 16; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_SHORT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_SHORT_ALIGN_g = 1; H5T_NATIVE_SHORT_COMP_ALIGN_g = 2; /* * 1 0 * UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 2; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 16; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_USHORT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_USHORT_ALIGN_g = 1; /* * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_ALIGN_g = 1; H5T_NATIVE_INT_COMP_ALIGN_g = 4; /* * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_ALIGN_g = 1; /* * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_LONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_LONG_ALIGN_g = 1; H5T_NATIVE_LONG_COMP_ALIGN_g = 4; /* * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_ULONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_ULONG_ALIGN_g = 1; /* * 0 * IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT8_ALIGN_g = 1; /* * 0 * UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT8_ALIGN_g = 1; /* * 0 * IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_LEAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_LEAST8_ALIGN_g = 1; /* * 0 * UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_LEAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_LEAST8_ALIGN_g = 1; /* * 0 * IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_FAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_FAST8_ALIGN_g = 1; /* * 0 * UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 1; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 8; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_FAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_FAST8_ALIGN_g = 1; /* * 1 0 * IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 2; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 16; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT16_ALIGN_g = 1; /* * 1 0 * UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 2; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 16; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT16_ALIGN_g = 1; /* * 1 0 * IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 2; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 16; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_LEAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_LEAST16_ALIGN_g = 1; /* * 1 0 * UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 2; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 16; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_LEAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_LEAST16_ALIGN_g = 1; /* * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_FAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_FAST16_ALIGN_g = 1; /* * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_FAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_FAST16_ALIGN_g = 1; /* * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT32_ALIGN_g = 1; /* * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT32_ALIGN_g = 1; /* * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_LEAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_LEAST32_ALIGN_g = 1; /* * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_LEAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_LEAST32_ALIGN_g = 1; /* * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_FAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_FAST32_ALIGN_g = 1; /* * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_FAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_FAST32_ALIGN_g = 1; /* * 7 6 5 4 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT64_ALIGN_g = 1; /* * 7 6 5 4 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT64_ALIGN_g = 1; /* * 7 6 5 4 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_LEAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_LEAST64_ALIGN_g = 1; /* * 7 6 5 4 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_LEAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_LEAST64_ALIGN_g = 1; /* * 7 6 5 4 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_INT_FAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_INT_FAST64_ALIGN_g = 1; /* * 7 6 5 4 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_UINT_FAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_UINT_FAST64_ALIGN_g = 1; /* * 7 6 5 4 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * 3 2 1 0 * IIIIIIII IIIIIIII IIIIIIII IIIIIIII * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_2; if((H5T_NATIVE_LLONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_LLONG_ALIGN_g = 1; H5T_NATIVE_LLONG_COMP_ALIGN_g = 8; /* * 7 6 5 4 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * 3 2 1 0 * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_INTEGER; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE; if((H5T_NATIVE_ULLONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_ULLONG_ALIGN_g = 1; /* * 3 2 1 0 * SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM * Implicit bit? yes * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_FLOAT; dt->shared->size = 4; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 32; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.f.sign = 31; dt->shared->u.atomic.u.f.epos = 23; dt->shared->u.atomic.u.f.esize = 8; dt->shared->u.atomic.u.f.ebias = 0x0000007f; dt->shared->u.atomic.u.f.mpos = 0; dt->shared->u.atomic.u.f.msize = 23; dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED; dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO; if((H5T_NATIVE_FLOAT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_FLOAT_ALIGN_g = 1; H5T_NATIVE_FLOAT_COMP_ALIGN_g = 4; /* * 7 6 5 4 * SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM * 3 2 1 0 * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM * Implicit bit? yes * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_FLOAT; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.f.sign = 63; dt->shared->u.atomic.u.f.epos = 52; dt->shared->u.atomic.u.f.esize = 11; dt->shared->u.atomic.u.f.ebias = 0x000003ff; dt->shared->u.atomic.u.f.mpos = 0; dt->shared->u.atomic.u.f.msize = 52; dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED; dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO; if((H5T_NATIVE_DOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_DOUBLE_ALIGN_g = 1; H5T_NATIVE_DOUBLE_COMP_ALIGN_g = 8; /* * 7 6 5 4 * SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM * 3 2 1 0 * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM * Implicit bit? yes * Alignment: none */ if(NULL == (dt = H5T__alloc())) HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed") dt->shared->state = H5T_STATE_IMMUTABLE; dt->shared->type = H5T_FLOAT; dt->shared->size = 8; dt->shared->u.atomic.order = H5T_ORDER_LE; dt->shared->u.atomic.offset = 0; dt->shared->u.atomic.prec = 64; dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; dt->shared->u.atomic.u.f.sign = 63; dt->shared->u.atomic.u.f.epos = 52; dt->shared->u.atomic.u.f.esize = 11; dt->shared->u.atomic.u.f.ebias = 0x000003ff; dt->shared->u.atomic.u.f.mpos = 0; dt->shared->u.atomic.u.f.msize = 52; dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED; dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO; if((H5T_NATIVE_LDOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype") H5T_NATIVE_LDOUBLE_ALIGN_g = 1; H5T_NATIVE_LDOUBLE_COMP_ALIGN_g = 8; /* Set the native order for this machine */ H5T_native_order_g = H5T_ORDER_LE; /* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */ H5T_POINTER_COMP_ALIGN_g = 4; H5T_HVL_COMP_ALIGN_g = 4; H5T_HOBJREF_COMP_ALIGN_g = 8; H5T_HDSETREGREF_COMP_ALIGN_g = 1; done: if(ret_value < 0) { if(dt != NULL) { dt->shared = H5FL_FREE(H5T_shared_t, dt->shared); dt = H5FL_FREE(H5T_t, dt); } /* end if */ } /* end if */ FUNC_LEAVE_NOAPI(ret_value); } /* end H5TN_init_interface() */
H5G_init_deprec_interface -- Initialize interface-specific information USAGE herr_t H5G_init_deprec_interface() RETURNS Non-negative on success/Negative on failure DESCRIPTION Initializes any interface-specific data or routines. (Just calls H5G_init() currently). --------------------------------------------------------------------------*/ static herr_t H5G_init_deprec_interface(void) { FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_init_deprec_interface) FUNC_LEAVE_NOAPI(H5G_init()) } /* H5G_init_deprec_interface() */ #ifndef H5_NO_DEPRECATED_SYMBOLS /*------------------------------------------------------------------------- * Function: H5G_map_obj_type * * Purpose: Maps the object type to the older "group" object type * * Return: Object type (can't fail) * * Programmer: Quincey Koziol * Tuesday, November 21, 2006 * *-------------------------------------------------------------------------
/*-------------------------------------------------------------------------- NAME H5O_attr_encode PURPOSE Encode a simple attribute message USAGE herr_t H5O_attr_encode(f, raw_size, p, mesg) H5F_t *f; IN: pointer to the HDF5 file struct const uint8 *p; IN: the raw information buffer const void *mesg; IN: Pointer to the simple datatype struct RETURNS Non-negative on success/Negative on failure DESCRIPTION This function encodes the native memory form of the attribute message in the "raw" disk form. * * Modifications: * Robb Matzke, 17 Jul 1998 * Added padding for alignment. * * Robb Matzke, 20 Jul 1998 * Added a version number at the beginning. * * Raymond Lu, 8 April 2004 * For data space, changed the operation on H5S_simple_t to * H5S_extent_t * --------------------------------------------------------------------------*/ static herr_t H5O_attr_encode(H5F_t *f, uint8_t *p, const void *mesg) { const H5A_t *attr = (const H5A_t *) mesg; size_t name_len; /* Attribute name length */ unsigned version; /* Attribute version */ hbool_t type_shared; /* Flag to indicate that a shared datatype is used for this attribute */ herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5O_attr_encode); /* check args */ assert(f); assert(p); assert(attr); /* Check whether datatype is shared */ if(H5T_committed(attr->dt)) type_shared = TRUE; else type_shared = FALSE; /* Check which version to write out */ if(type_shared) version = H5O_ATTR_VERSION_NEW; /* Write out new version if shared datatype */ else version = H5O_ATTR_VERSION; /* Encode Version */ *p++ = version; /* Set attribute flags if version >1 */ if(version>H5O_ATTR_VERSION) *p++ = (type_shared ? H5O_ATTR_FLAG_TYPE_SHARED : 0 ); /* Set flags for attribute */ else *p++ = 0; /* Reserved, for version <2 */ /* * Encode the lengths of the various parts of the attribute message. The * encoded lengths are exact but we pad each part except the data to be a * multiple of eight bytes (in the first version). */ name_len = HDstrlen(attr->name)+1; UINT16ENCODE(p, name_len); UINT16ENCODE(p, attr->dt_size); UINT16ENCODE(p, attr->ds_size); /* * Write the name including null terminator padded to the correct number * of bytes. */ HDmemcpy(p, attr->name, name_len); HDmemset(p+name_len, 0, H5O_ALIGN(name_len)-name_len); if(version < H5O_ATTR_VERSION_NEW) p += H5O_ALIGN(name_len); else p += name_len; /* encode the attribute datatype */ if(type_shared) { H5O_shared_t sh_mesg; /* Reset shared message information */ HDmemset(&sh_mesg,0,sizeof(H5O_shared_t)); /* Get shared message information from datatype */ if ((H5O_MSG_DTYPE->get_share)(f, attr->dt, &sh_mesg/*out*/)<0) HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode shared attribute datatype"); /* Encode shared message information for datatype */ if((H5O_MSG_SHARED->encode)(f,p,&sh_mesg)<0) HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode shared attribute datatype"); } /* end if */ else { /* Encode datatype information */ if((H5O_MSG_DTYPE->encode)(f,p,attr->dt)<0) HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode attribute datatype"); } /* end else */ if(version < H5O_ATTR_VERSION_NEW) { HDmemset(p+attr->dt_size, 0, H5O_ALIGN(attr->dt_size)-attr->dt_size); p += H5O_ALIGN(attr->dt_size); } /* end if */ else p += attr->dt_size; /* encode the attribute dataspace */ if((H5O_MSG_SDSPACE->encode)(f,p,&(attr->ds->extent))<0) HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode attribute dataspace"); if(version < H5O_ATTR_VERSION_NEW) { HDmemset(p+attr->ds_size, 0, H5O_ALIGN(attr->ds_size)-attr->ds_size); p += H5O_ALIGN(attr->ds_size); } /* end if */ else p += attr->ds_size; /* Store attribute data */ if(attr->data) HDmemcpy(p,attr->data,attr->data_size); else HDmemset(p,0,attr->data_size); done: FUNC_LEAVE_NOAPI(ret_value); }
/*-------------------------------------------------------------------------- NAME H5O_attr_decode PURPOSE Decode a attribute message and return a pointer to a memory struct with the decoded information USAGE void *H5O_attr_decode(f, raw_size, p) H5F_t *f; IN: pointer to the HDF5 file struct size_t raw_size; IN: size of the raw information buffer const uint8_t *p; IN: the raw information buffer RETURNS Pointer to the new message in native order on success, NULL on failure DESCRIPTION This function decodes the "raw" disk form of a attribute message into a struct in memory native format. The struct is allocated within this function using malloc() and is returned to the caller. --------------------------------------------------------------------------*/ static void * H5O_attr_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p) { H5A_t *attr = NULL; H5S_extent_t *extent; /*extent dimensionality information */ size_t name_len; /*attribute name length */ int version; /*message version number*/ unsigned flags = 0; /* Attribute flags */ H5A_t *ret_value; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5O_attr_decode); /* check args */ HDassert(f); HDassert(p); if(NULL == (attr = H5FL_CALLOC(H5A_t))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed"); /* Version number */ version = *p++; if (version!=H5O_ATTR_VERSION && version!=H5O_ATTR_VERSION_NEW) HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for attribute message"); /* Get the flags byte if we have a later version of the attribute */ if(version>H5O_ATTR_VERSION) flags = *p++; else p++; /* Byte is unused when version<2 */ /* * Decode the sizes of the parts of the attribute. The sizes stored in * the file are exact but the parts are aligned on 8-byte boundaries. */ UINT16DECODE(p, name_len); /*including null*/ UINT16DECODE(p, attr->dt_size); UINT16DECODE(p, attr->ds_size); /* Decode and store the name */ if (NULL==(attr->name=H5MM_strdup((const char *)p))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed"); if(version < H5O_ATTR_VERSION_NEW) p += H5O_ALIGN(name_len); /* advance the memory pointer */ else p += name_len; /* advance the memory pointer */ /* decode the attribute datatype */ if (flags & H5O_ATTR_FLAG_TYPE_SHARED) { H5O_shared_t *shared; /* Shared information */ /* Get the shared information */ if (NULL == (shared = (H5O_MSG_SHARED->decode) (f, dxpl_id, p))) HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode shared message"); /* Get the actual datatype information */ if((attr->dt= H5O_shared_read(f, dxpl_id, shared, H5O_MSG_DTYPE, NULL))==NULL) HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute datatype"); /* Free the shared information */ H5O_free_real(H5O_MSG_SHARED, shared); } /* end if */ else { if((attr->dt=(H5O_MSG_DTYPE->decode)(f,dxpl_id,p))==NULL) HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute datatype"); } /* end else */ if(version < H5O_ATTR_VERSION_NEW) p += H5O_ALIGN(attr->dt_size); else p += attr->dt_size; /* decode the attribute dataspace */ if (NULL==(attr->ds = H5FL_CALLOC(H5S_t))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed"); if((extent=(H5O_MSG_SDSPACE->decode)(f,dxpl_id,p))==NULL) HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute dataspace"); /* Copy the extent information */ HDmemcpy(&(attr->ds->extent),extent, sizeof(H5S_extent_t)); /* Release temporary extent information */ H5FL_FREE(H5S_extent_t,extent); /* Default to entire dataspace being selected */ if(H5S_select_all(attr->ds, 0) < 0) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSET, NULL, "unable to set all selection") if(version < H5O_ATTR_VERSION_NEW) p += H5O_ALIGN(attr->ds_size); else p += attr->ds_size; /* Compute the size of the data */ H5_ASSIGN_OVERFLOW(attr->data_size,H5S_GET_EXTENT_NPOINTS(attr->ds)*H5T_get_size(attr->dt),hsize_t,size_t); /* Go get the data */ if(attr->data_size) { if (NULL==(attr->data = H5FL_BLK_MALLOC(attr_buf, attr->data_size))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed"); HDmemcpy(attr->data,p,attr->data_size); } /* Indicate that the fill values aren't to be written out */ attr->initialized=1; /* Set return value */ ret_value = attr; done: if(!ret_value) if(attr) { /* Free dynamicly allocated items */ if(H5A_free(attr) < 0) HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, NULL, "can't release attribute info") H5FL_FREE(H5A_t, attr); } /* end if */ FUNC_LEAVE_NOAPI(ret_value); }
/*------------------------------------------------------------------------- * Function: H5I_register * * Purpose: Registers an OBJECT in a GROUP and returns an ID for it. * This routine does _not_ check for unique-ness of the objects, * if you register an object twice, you will get two different * IDs for it. This routine does make certain that each ID in a * group is unique. IDs are created by getting a unique number * for the group the ID is in and incorporating the group into * the ID which is returned to the user. * * Return: Success: New object id. * * Failure: Negative * * Programmer: Unknown * * Modifications: * *------------------------------------------------------------------------- */ hid_t H5I_register(H5I_type_t grp, void *object) { H5I_id_group_t *grp_ptr=NULL; /*ptr to the group */ H5I_id_info_t *id_ptr=NULL; /*ptr to the new ID information */ hid_t new_id; /*new ID */ unsigned hash_loc; /*new item's hash table location*/ hid_t next_id; /*next ID to check */ hid_t ret_value=SUCCEED; /*return value */ H5I_id_info_t *curr_id; /*ptr to the current atom */ unsigned i; /*counter */ FUNC_ENTER_NOAPI(H5I_register, FAIL); /* Check arguments */ if (grp <= H5I_BADID || grp >= H5I_NGROUPS) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number"); grp_ptr = H5I_id_group_list_g[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group"); if ((id_ptr = H5FL_MALLOC(H5I_id_info_t)) == NULL) HGOTO_ERROR(H5E_ATOM, H5E_NOSPACE, FAIL, "memory allocation failed"); /* Create the struct & it's ID */ new_id = H5I_MAKE(grp, grp_ptr->nextid); id_ptr->id = new_id; id_ptr->count = 1; /*initial reference count*/ id_ptr->obj_ptr = object; id_ptr->next = NULL; /* hash bucket already full, prepend to front of chain */ hash_loc = grp_ptr->nextid % (unsigned) grp_ptr->hash_size; if (grp_ptr->id_list[hash_loc] != NULL) id_ptr->next = grp_ptr->id_list[hash_loc]; /* Insert into the group */ grp_ptr->id_list[hash_loc] = id_ptr; grp_ptr->ids++; grp_ptr->nextid++; /* * This next section of code checks for the 'nextid' getting too large and * wrapping around, thus necessitating checking for duplicate IDs being * handed out. */ if (grp_ptr->nextid > (unsigned)ID_MASK) { grp_ptr->wrapped = 1; grp_ptr->nextid = grp_ptr->reserved; } /* * If we've wrapped around then we need to check for duplicate id's being * handed out. */ if (grp_ptr->wrapped) { /* * Make sure we check all available ID's. If we're about at the end * of the range then wrap around and check the beginning values. If * we check all possible values and didn't find any free ones *then* * we can fail. */ for (i=grp_ptr->reserved; i<ID_MASK; i++) { /* Handle end of range by wrapping to beginning */ if (grp_ptr->nextid>(unsigned)ID_MASK) grp_ptr->nextid = grp_ptr->reserved; /* new ID to check for */ next_id = H5I_MAKE(grp, grp_ptr->nextid); hash_loc = H5I_LOC (grp_ptr->nextid, grp_ptr->hash_size); curr_id = grp_ptr->id_list[hash_loc]; if (curr_id == NULL) break; /* Ha! this is not likely... */ while (curr_id) { if (curr_id->id == next_id) break; curr_id = curr_id->next; } if (!curr_id) break; /* must not have found a match */ grp_ptr->nextid++; } if (i>=(unsigned)ID_MASK) /* All the IDs are gone! */ HGOTO_ERROR(H5E_ATOM, H5E_NOIDS, FAIL, "no IDs available in group"); } ret_value = new_id; done: FUNC_LEAVE_NOAPI(ret_value); }
/*------------------------------------------------------------------------- * Function: H5G_traverse_slink * * Purpose: Traverses symbolic link. The link head appears in the group * whose entry is GRP_ENT and the link head entry is OBJ_ENT. * * Return: Success: Non-negative, OBJ_ENT will contain information * about the object to which the link points and * GRP_ENT will contain the information about * the group in which the link tail appears. * * Failure: Negative * * Programmer: Robb Matzke * Friday, April 10, 1998 * * Modifications: * * Pedro Vicente, <*****@*****.**> 22 Aug 2002 * Added `id to name' support. * *------------------------------------------------------------------------- */ static herr_t H5G_traverse_slink (H5G_entry_t *grp_ent/*in,out*/, H5G_entry_t *obj_ent/*in,out*/, int *nlinks/*in,out*/, hid_t dxpl_id) { H5O_stab_t stab_mesg; /*info about local heap */ const char *clv = NULL; /*cached link value */ char *linkval = NULL; /*the copied link value */ H5G_entry_t tmp_grp_ent; /* Temporary copy of group entry */ H5RS_str_t *tmp_full_path_r = NULL, *tmp_user_path_r = NULL; /* Temporary pointer to object's user path & canonical path */ const H5HL_t *heap; herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5G_traverse_slink); /* Portably initialize the temporary group entry */ H5G_ent_reset(&tmp_grp_ent); /* Get the link value */ if (NULL==H5O_read (grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id)) HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address"); if (NULL == (heap = H5HL_protect(grp_ent->file, dxpl_id, stab_mesg.heap_addr))) HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read protect link value") clv = H5HL_offset_into(grp_ent->file, heap, obj_ent->cache.slink.lval_offset); linkval = H5MM_xstrdup (clv); assert(linkval); if (H5HL_unprotect(grp_ent->file, dxpl_id, heap, stab_mesg.heap_addr) < 0) HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read unprotect link value") /* Hold the entry's name (& old_name) to restore later */ tmp_full_path_r = obj_ent->full_path_r; obj_ent->full_path_r = NULL; tmp_user_path_r = obj_ent->user_path_r; obj_ent->user_path_r = NULL; /* Free the names for the group entry */ H5G_name_free(grp_ent); /* Clone the group entry, so we can track the names properly */ H5G_ent_copy(&tmp_grp_ent,grp_ent,H5_COPY_DEEP); /* Traverse the link */ if (H5G_namei (&tmp_grp_ent, linkval, NULL, grp_ent, obj_ent, H5G_TARGET_NORMAL, nlinks, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)) HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to follow symbolic link"); /* Free the entry's names, we will use the original name for the object */ H5G_name_free(obj_ent); /* Restore previous name for object */ obj_ent->full_path_r = tmp_full_path_r; tmp_full_path_r = NULL; obj_ent->user_path_r = tmp_user_path_r; tmp_user_path_r = NULL; done: /* Error cleanup */ if(tmp_full_path_r) H5RS_decr(tmp_full_path_r); if(tmp_user_path_r) H5RS_decr(tmp_user_path_r); /* Release cloned copy of group entry */ H5G_name_free(&tmp_grp_ent); H5MM_xfree (linkval); FUNC_LEAVE_NOAPI(ret_value); }
static herr_t H5I_debug(H5I_type_t grp) { H5I_id_group_t *grp_ptr; H5I_id_info_t *cur; H5G_entry_t *ent = NULL; int is, js; unsigned int iu; herr_t ret_value; /* Return value */ FUNC_ENTER_NOAPI(H5I_debug, FAIL); fprintf(stderr, "Dumping group %d\n", (int)grp); grp_ptr = H5I_id_group_list_g[grp]; /* Header */ fprintf(stderr, " count = %u\n", grp_ptr->count); fprintf(stderr, " reserved = %u\n", grp_ptr->reserved); fprintf(stderr, " wrapped = %u\n", grp_ptr->wrapped); fprintf(stderr, " hash_size = %lu\n", (unsigned long)grp_ptr->hash_size); fprintf(stderr, " ids = %u\n", grp_ptr->ids); fprintf(stderr, " nextid = %u\n", grp_ptr->nextid); /* Cache */ fprintf(stderr, " Cache:\n"); for (is=0; is<ID_CACHE_SIZE; is++) { if (H5I_cache_g[is] && H5I_GROUP(H5I_cache_g[is]->id)==grp) { fprintf(stderr, " Entry-%d, ID=%lu\n", is, (unsigned long)(H5I_cache_g[is]->id)); } } /* List */ fprintf(stderr, " List:\n"); for (iu=0; iu<grp_ptr->hash_size; iu++) { for (js=0, cur=grp_ptr->id_list[iu]; cur; cur=cur->next, js++) { fprintf(stderr, " #%u.%d\n", iu, js); fprintf(stderr, " id = %lu\n", (unsigned long)(cur->id)); fprintf(stderr, " count = %u\n", cur->count); fprintf(stderr, " obj = 0x%08lx\n", (unsigned long)(cur->obj_ptr)); /* Get the symbol table entry, so we get get the name */ switch(grp) { case H5I_GROUP: ent = H5G_entof((H5G_t*)cur->obj_ptr); break; case H5I_DATASET: ent = H5D_entof((H5D_t*)cur->obj_ptr); break; case H5I_DATATYPE: ent = H5T_entof((H5T_t*)cur->obj_ptr); break; default: continue; /* Other types of IDs are not stored in files */ } /* end switch*/ if(ent) { if(ent->name) fprintf(stderr, " name = %s\n",ent->name); if(ent->old_name) fprintf(stderr, " old_name = %s\n",ent->old_name); } /* end if */ } /* end for */ } /* end for */ done: FUNC_LEAVE_NOAPI(SUCCEED); }
/*------------------------------------------------------------------------- * Function: H5I_clear_group * * Purpose: Removes all objects from the group, calling the free * function for each object regardless of the reference count. * * Return: Success: Non-negative * * Failure: negative * * Programmer: Robb Matzke * Wednesday, March 24, 1999 * * Modifications: * Robb Matzke, 1999-04-27 * If FORCE is zero then any item for which the free callback * failed is not removed. This function returns failure if * items could not be removed. * * Robb Matzke, 1999-08-17 * If the object reference count is larger than one then it must * be because the library is using the object internally. This * happens for instance for file driver ID's which are stored in * things like property lists, files, etc. Objects that have a * reference count larger than one are not affected unless FORCE * is non-zero. *------------------------------------------------------------------------- */ herr_t H5I_clear_group(H5I_type_t grp, hbool_t force) { H5I_id_group_t *grp_ptr = NULL; /* ptr to the atomic group */ H5I_id_info_t *cur=NULL; /* Current node being worked with */ H5I_id_info_t *next=NULL; /* Next node in list */ H5I_id_info_t *last=NULL; /* Last node seen */ H5I_id_info_t *tmp=NULL; /* Temporary node ptr */ int ret_value = SUCCEED; unsigned delete_node; /* Flag to indicate node should be removed from linked list */ unsigned i; FUNC_ENTER_NOAPI(H5I_clear_group, FAIL); if (grp <= H5I_BADID || grp >= H5I_NGROUPS) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number"); grp_ptr = H5I_id_group_list_g[grp]; if (grp_ptr == NULL || grp_ptr->count <= 0) HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group"); /* * Call free method for all objects in group regardless of their reference * counts. Ignore the return value from from the free method and remove * object from group regardless if FORCE is non-zero. */ for (i=0; i<grp_ptr->hash_size; i++) { for (cur=grp_ptr->id_list[i]; cur; cur=next) { /* * Do nothing to the object if the reference count is larger than * one and forcing is off. */ if (!force && cur->count>1) { next=cur->next; continue; } /* end if */ /* Check for a 'free' function and call it, if it exists */ if (grp_ptr->free_func && (grp_ptr->free_func)(cur->obj_ptr)<0) { if (force) { #ifdef H5I_DEBUG if (H5DEBUG(I)) { fprintf(H5DEBUG(I), "H5I: free grp=%d obj=0x%08lx " "failure ignored\n", (int)grp, (unsigned long)(cur->obj_ptr)); } /* end if */ #endif /*H5I_DEBUG*/ /* Indicate node should be removed from list */ delete_node=1; } /* end if */ else { /* Indicate node should _NOT_ be remove from list */ delete_node=0; } /* end else */ } /* end if */ else { /* Indicate node should be removed from list */ delete_node=1; } /* end else */ /* Check if we should delete this node or not */ if(delete_node) { /* Decrement the number of IDs in the group */ (grp_ptr->ids)--; /* Advance to next node */ next = cur->next; /* Re-scan the list of nodes and remove the node from the list */ /* (can't maintain static pointers to the previous node in the */ /* list, because the node's 'free' callback could have */ /* make an H5I call, which could potentially change the */ /* order of the nodes on the list - QAK) */ last=NULL; tmp=grp_ptr->id_list[i]; while(tmp!=cur) { assert(tmp!=NULL); last=tmp; tmp=tmp->next; } /* end while */ /* Delete the node from the list */ if(last==NULL) { /* Node at head of list, just advance the list head to next node */ assert(grp_ptr->id_list[i]==cur); grp_ptr->id_list[i] = next; } /* end if */ else { /* Node in middle of list, jump over it */ assert(last->next==cur); last->next=next; } /* end else */ /* Free the node */ H5FL_FREE(H5I_id_info_t,cur); } /* end if */ else { /* Advance to next node */ next = cur->next; } /* end else */ } /* end for */ } /* end for */ done: FUNC_LEAVE_NOAPI(ret_value); }
/*------------------------------------------------------------------------- * Function: H5D_select_fscat * * Purpose: Scatters dataset elements from the type conversion buffer BUF * to the file F where the data points are arranged according to * the file dataspace FILE_SPACE and stored according to * LAYOUT and EFL. Each element is ELMT_SIZE bytes. * The caller is requesting that NELMTS elements are copied. * * Return: Non-negative on success/Negative on failure * * Programmer: Quincey Koziol * Thursday, June 20, 2002 * *------------------------------------------------------------------------- */ herr_t H5D_select_fscat (H5D_io_info_t *io_info, const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts, haddr_t chunk_addr, void *chunk/*in*/, const void *_buf) { const uint8_t *buf=_buf; /* Alias for pointer arithmetic */ hsize_t _off[H5D_IO_VECTOR_SIZE]; /* Array to store sequence offsets */ hsize_t *off=NULL; /* Pointer to sequence offsets */ hsize_t mem_off; /* Offset in memory */ size_t mem_curr_seq; /* "Current sequence" in memory */ size_t dset_curr_seq; /* "Current sequence" in dataset */ size_t _len[H5D_IO_VECTOR_SIZE]; /* Array to store sequence lengths */ size_t *len=NULL; /* Array to store sequence lengths */ size_t orig_mem_len, mem_len; /* Length of sequence in memory */ size_t nseq; /* Number of sequences generated */ size_t nelem; /* Number of elements used in sequences */ herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(H5D_select_fscat, FAIL); /* Check args */ assert (io_info); assert (space); assert (iter); assert (nelmts>0); assert (_buf); assert(TRUE==H5P_isa_class(io_info->dxpl_id,H5P_DATASET_XFER)); /* Allocate the vector I/O arrays */ if(io_info->dxpl_cache->vec_size != H5D_IO_VECTOR_SIZE) { if((len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array"); if((off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array"); } /* end if */ else { len=_len; off=_off; } /* end else */ /* Loop until all elements are written */ while(nelmts>0) { /* Get list of sequences for selection to write */ if(H5S_SELECT_GET_SEQ_LIST(space,H5S_GET_SEQ_LIST_SORTED,iter,io_info->dxpl_cache->vec_size,nelmts,&nseq,&nelem,off,len)<0) HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed"); /* Reset the current sequence information */ mem_curr_seq=dset_curr_seq=0; orig_mem_len=mem_len=nelem*iter->elmt_size; mem_off=0; /* Write sequence list out */ if((*io_info->ops.writevv)(io_info, nseq, &dset_curr_seq, len, off, (size_t)1, &mem_curr_seq, &mem_len, &mem_off, chunk_addr, chunk, buf) < 0) HGOTO_ERROR(H5E_DATASPACE, H5E_WRITEERROR, FAIL, "write error"); /* Update buffer */ buf += orig_mem_len; /* Decrement number of elements left to process */ nelmts -= nelem; } /* end while */ done: if(io_info->dxpl_cache->vec_size != H5D_IO_VECTOR_SIZE) { if(len!=NULL) H5FL_SEQ_FREE(size_t,len); if(off!=NULL) H5FL_SEQ_FREE(hsize_t,off); } /* end if */ FUNC_LEAVE_NOAPI(ret_value); } /* H5D_select_fscat() */
/*------------------------------------------------------------------------- * Function: H5D_select_mgath * * Purpose: Gathers dataset elements from application memory BUF and * copies them into the gather buffer TGATH_BUF. * Each element is ELMT_SIZE bytes and arranged in application * memory according to SPACE. * The caller is requesting that at most NELMTS be gathered. * * Return: Success: Number of elements copied. * Failure: 0 * * Programmer: Quincey Koziol * Monday, June 24, 2002 * *------------------------------------------------------------------------- */ size_t H5D_select_mgath (const void *_buf, const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts, const H5D_dxpl_cache_t *dxpl_cache, void *_tgath_buf/*out*/) { const uint8_t *buf=(const uint8_t *)_buf; /* Get local copies for address arithmetic */ uint8_t *tgath_buf=(uint8_t *)_tgath_buf; hsize_t _off[H5D_IO_VECTOR_SIZE]; /* Array to store sequence offsets */ hsize_t *off=NULL; /* Pointer to sequence offsets */ size_t _len[H5D_IO_VECTOR_SIZE]; /* Array to store sequence lengths */ size_t *len=NULL; /* Pointer to sequence lengths */ size_t curr_len; /* Length of bytes left to process in sequence */ size_t nseq; /* Number of sequences generated */ size_t curr_seq; /* Current sequence being processed */ size_t nelem; /* Number of elements used in sequences */ size_t ret_value=nelmts; /* Number of elements gathered */ FUNC_ENTER_NOAPI(H5D_select_mgath, 0); /* Check args */ assert (buf); assert (space); assert (iter); assert (nelmts>0); assert (tgath_buf); /* Allocate the vector I/O arrays */ if(dxpl_cache->vec_size != H5D_IO_VECTOR_SIZE) { if((len = H5FL_SEQ_MALLOC(size_t,dxpl_cache->vec_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate I/O length vector array"); if((off = H5FL_SEQ_MALLOC(hsize_t,dxpl_cache->vec_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate I/O offset vector array"); } /* end if */ else { len=_len; off=_off; } /* end else */ /* Loop until all elements are written */ while(nelmts>0) { /* Get list of sequences for selection to write */ if(H5S_SELECT_GET_SEQ_LIST(space,0,iter,dxpl_cache->vec_size,nelmts,&nseq,&nelem,off,len)<0) HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, 0, "sequence length generation failed"); /* Loop, while sequences left to process */ for(curr_seq=0; curr_seq<nseq; curr_seq++) { /* Get the number of bytes in sequence */ curr_len=len[curr_seq]; HDmemcpy(tgath_buf,buf+off[curr_seq],curr_len); /* Advance offset in gather buffer */ tgath_buf+=curr_len; } /* end for */ /* Decrement number of elements left to process */ nelmts -= nelem; } /* end while */ done: if(dxpl_cache->vec_size != H5D_IO_VECTOR_SIZE) { if(len!=NULL) H5FL_SEQ_FREE(size_t,len); if(off!=NULL) H5FL_SEQ_FREE(hsize_t,off); } /* end if */ FUNC_LEAVE_NOAPI(ret_value); } /* H5D_select_mgath() */
/*-------------------------------------------------------------------------- NAME H5HP_change PURPOSE Change the priority of an object on a heap USAGE herr_t H5HP_change(heap, val, obj) H5HP_t *heap; IN/OUT: Pointer to heap to modify int val; IN: New priority value for object void *obj; IN: Pointer to object to modify RETURNS Returns non-negative on success, negative on failure. DESCRIPTION Changes the priority of an object on a heap. GLOBAL VARIABLES COMMENTS, BUGS, ASSUMPTIONS EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ herr_t H5HP_change(H5HP_t *heap, int val, void *_obj) { H5HP_info_t *obj=(H5HP_info_t *)_obj; /* Alias for object */ size_t obj_loc; /* Location of object in heap */ int old_val; /* Object's old priority value */ herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) /* Check args */ assert(heap); assert(obj); /* Check internal consistency */ /* (Pre-condition) */ assert(heap->nobjs<heap->nalloc); assert(heap->heap); assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) || (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN)); assert(heap->heap[0].obj==NULL); /* Get the location of the object in the heap */ obj_loc=obj->heap_loc; assert(obj_loc>0 && obj_loc<=heap->nobjs); /* Change the heap object's priority */ old_val=heap->heap[obj_loc].val; heap->heap[obj_loc].val=val; /* Restore heap condition */ if(val<old_val) { if(heap->type==H5HP_MAX_HEAP) { if(H5HP_sink_max(heap,obj_loc)<0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition"); } /* end if */ else { if(H5HP_swim_min(heap,obj_loc)<0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition"); } /* end else */ } /* end if */ else { if(heap->type==H5HP_MAX_HEAP) { if(H5HP_swim_max(heap,obj_loc)<0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition"); } /* end if */ else { if(H5HP_sink_min(heap,obj_loc)<0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition"); } /* end else */ } /* end else */ done: /* Check internal consistency */ /* (Post-condition) */ assert(heap->nobjs<heap->nalloc); assert(heap->heap); assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) || (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN)); assert(heap->heap[0].obj==NULL); FUNC_LEAVE_NOAPI(ret_value); } /* end H5HP_change() */
herr_t H5L_init_extern_interface() RETURNS Non-negative on success/Negative on failure DESCRIPTION Initializes any interface-specific data or routines. (Just calls H5L_init() currently). --------------------------------------------------------------------------*/ static herr_t H5L_init_extern_interface(void) { FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5L_init_extern_interface) FUNC_LEAVE_NOAPI(H5L_init()) } /* H5L_init_extern_interface() */ /*-------------------------------------------------------------------------- * Function: H5L_getenv_prefix_name -- * * Purpose: Get the first pathname in the list of pathnames stored in ENV_PREFIX, * which is separated by the environment delimiter. * ENV_PREFIX is modified to point to the remaining pathnames * in the list. * * Return: A pointer to a pathname * * Programmer: Vailin Choi, April 2, 2008
/*------------------------------------------------------------------------- * Function: H5HL_debug * * Purpose: Prints debugging information about a heap. * * Return: Non-negative on success/Negative on failure * * Programmer: Robb Matzke * [email protected] * Aug 1 1997 * * Modifications: * Robb Matzke, 1999-07-28 * The ADDR argument is passed by value. *------------------------------------------------------------------------- */ herr_t H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int fwidth) { H5HL_t *h = NULL; int i, j, overlap, free_block; uint8_t c; H5HL_free_t *freelist = NULL; uint8_t *marker = NULL; size_t amount_free = 0; herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(H5HL_debug, FAIL); /* check arguments */ assert(f); assert(H5F_addr_defined(addr)); assert(stream); assert(indent >= 0); assert(fwidth >= 0); if (NULL == (h = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_READ))) HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap"); fprintf(stream, "%*sLocal Heap...\n", indent, ""); fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth, "Dirty:", (int) (h->cache_info.is_dirty)); fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth, "Header size (in bytes):", (unsigned long) H5HL_SIZEOF_HDR(f)); HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Address of heap data:", h->addr); HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Data bytes allocated on disk:", h->disk_alloc); HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth, "Data bytes allocated in core:", h->mem_alloc); /* * Traverse the free list and check that all free blocks fall within * the heap and that no two free blocks point to the same region of * the heap. */ if (NULL==(marker = H5MM_calloc(h->mem_alloc))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed"); fprintf(stream, "%*sFree Blocks (offset, size):\n", indent, ""); for (free_block=0, freelist = h->freelist; freelist; freelist = freelist->next, free_block++) { char temp_str[32]; sprintf(temp_str,"Block #%d:",free_block); HDfprintf(stream, "%*s%-*s %8Zu, %8Zu\n", indent+3, "", MAX(0,fwidth-9), temp_str, freelist->offset, freelist->size); if (freelist->offset + freelist->size > h->mem_alloc) { fprintf(stream, "***THAT FREE BLOCK IS OUT OF BOUNDS!\n"); } else { for (i=overlap=0; i<(int)(freelist->size); i++) { if (marker[freelist->offset + i]) overlap++; marker[freelist->offset + i] = 1; } if (overlap) { fprintf(stream, "***THAT FREE BLOCK OVERLAPPED A PREVIOUS " "ONE!\n"); } else { amount_free += freelist->size; } } } if (h->mem_alloc) { fprintf(stream, "%*s%-*s %.2f%%\n", indent, "", fwidth, "Percent of heap used:", (100.0 * (double)(h->mem_alloc - amount_free) / (double)h->mem_alloc)); } /* * Print the data in a VMS-style octal dump. */ fprintf(stream, "%*sData follows (`__' indicates free region)...\n", indent, ""); for (i=0; i<(int)(h->disk_alloc); i+=16) { fprintf(stream, "%*s %8d: ", indent, "", i); for (j = 0; j < 16; j++) { if (i+j<(int)(h->disk_alloc)) { if (marker[i + j]) { fprintf(stream, "__ "); } else { c = h->chunk[H5HL_SIZEOF_HDR(f) + i + j]; fprintf(stream, "%02x ", c); } } else { fprintf(stream, " "); } if (7 == j) HDfputc(' ', stream); } for (j = 0; j < 16; j++) { if (i+j < (int)(h->disk_alloc)) { if (marker[i + j]) { HDfputc(' ', stream); } else { c = h->chunk[H5HL_SIZEOF_HDR(f) + i + j]; if (c > ' ' && c < '~') HDfputc(c, stream); else HDfputc('.', stream); } } } HDfputc('\n', stream); } done: if (h && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, h, FALSE) != SUCCEED) HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header"); H5MM_xfree(marker); FUNC_LEAVE_NOAPI(ret_value); }
* equal to, or greater than the second. If two members compare * as equal, their order in the sorted array is undefined. * (i.e. same as strcmp()) * * Programmer: Quincey Koziol * [email protected] * Sep 5 2005 * *------------------------------------------------------------------------- */ static int H5G_link_cmp_name_inc(const void *lnk1, const void *lnk2) { FUNC_ENTER_NOAPI_NOINIT_NOERR FUNC_LEAVE_NOAPI(HDstrcmp(((const H5O_link_t *)lnk1)->name, ((const H5O_link_t *)lnk2)->name)) } /* end H5G_link_cmp_name_inc() */ /*------------------------------------------------------------------------- * Function: H5G_link_cmp_name_dec * * Purpose: Callback routine for comparing two link names, in * decreasing alphabetic order * * Return: An integer less than, equal to, or greater than zero if the * second argument is considered to be respectively less than, * equal to, or greater than the first. If two members compare * as equal, their order in the sorted array is undefined. * (i.e. opposite strcmp()) *
/*------------------------------------------------------------------------- * Function: H5S_mpio_hyper_type * * Purpose: Translate an HDF5 hyperslab selection into an MPI type. * * Return: non-negative on success, negative on failure. * * Outputs: *new_type the MPI type corresponding to the selection * *count how many objects of the new_type in selection * (useful if this is the buffer type for xfer) * *extra_offset Number of bytes of offset within dataset * *is_derived_type 0 if MPI primitive type, 1 if derived * * Programmer: rky 980813 * * Modifications: ppw 990401 * rky, ppw 2000-09-26 Freed old type after creating struct type. * rky 2000-10-05 Changed displacements to be MPI_Aint. * rky 2000-10-06 Added code for cases of empty hyperslab. * akc, rky 2000-11-16 Replaced hard coded dimension size with * H5S_MAX_RANK. * * Quincey Koziol, June 18, 2002 * Added 'extra_offset' parameter. Also accomodate selection * offset in MPI type built. * * Albert Cheng, August 4, 2004 * Reimplemented the algorithm of forming the outer_type by * defining it as (start, vector, extent) in one call. * *------------------------------------------------------------------------- */ static herr_t H5S_mpio_hyper_type( const H5S_t *space, size_t elmt_size, /* out: */ MPI_Datatype *new_type, size_t *count, hsize_t *extra_offset, hbool_t *is_derived_type ) { H5S_sel_iter_t sel_iter; /* Selection iteration info */ hbool_t sel_iter_init=0; /* Selection iteration info has been initialized */ struct dim { /* less hassle than malloc/free & ilk */ hssize_t start; hsize_t strid; hsize_t block; hsize_t xtent; hsize_t count; } d[H5S_MAX_RANK]; int i; int offset[H5S_MAX_RANK]; int max_xtent[H5S_MAX_RANK]; H5S_hyper_dim_t *diminfo; /* [rank] */ int rank; int block_length[3]; MPI_Datatype inner_type, outer_type, old_types[3]; MPI_Aint extent_len, displacement[3]; int mpi_code; /* MPI return code */ herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_hyper_type); /* Check args */ assert (space); assert(sizeof(MPI_Aint) >= sizeof(elmt_size)); if (0==elmt_size) goto empty; /* Initialize selection iterator */ if (H5S_select_iter_init(&sel_iter, space, elmt_size)<0) HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator"); sel_iter_init=1; /* Selection iteration info has been initialized */ /* Abbreviate args */ diminfo=sel_iter.u.hyp.diminfo; assert (diminfo); /* make a local copy of the dimension info so we can operate with them */ /* Check if this is a "flattened" regular hyperslab selection */ if(sel_iter.u.hyp.iter_rank!=0 && sel_iter.u.hyp.iter_rank<space->extent.rank) { /* Flattened selection */ rank=sel_iter.u.hyp.iter_rank; assert (rank >= 0 && rank<=H5S_MAX_RANK); /* within array bounds */ if (0==rank) goto empty; #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: Flattened selection\n",FUNC); #endif for ( i=0; i<rank; ++i) { d[i].start = diminfo[i].start+sel_iter.u.hyp.sel_off[i]; d[i].strid = diminfo[i].stride; d[i].block = diminfo[i].block; d[i].count = diminfo[i].count; d[i].xtent = sel_iter.u.hyp.size[i]; #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: start=%Hd stride=%Hu count=%Hu block=%Hu xtent=%Hu", FUNC, d[i].start, d[i].strid, d[i].count, d[i].block, d[i].xtent ); if (i==0) HDfprintf(stderr, " rank=%d\n", rank ); else HDfprintf(stderr, "\n" ); #endif if (0==d[i].block) goto empty; if (0==d[i].count) goto empty; if (0==d[i].xtent) goto empty; } } /* end if */ else { /* Non-flattened selection */ rank = space->extent.rank; assert (rank >= 0 && rank<=H5S_MAX_RANK); /* within array bounds */ if (0==rank) goto empty; #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: Non-flattened selection\n",FUNC); #endif for ( i=0; i<rank; ++i) { d[i].start = diminfo[i].start+space->select.offset[i]; d[i].strid = diminfo[i].stride; d[i].block = diminfo[i].block; d[i].count = diminfo[i].count; d[i].xtent = space->extent.size[i]; #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: start=%Hd stride=%Hu count=%Hu block=%Hu xtent=%Hu", FUNC, d[i].start, d[i].strid, d[i].count, d[i].block, d[i].xtent ); if (i==0) HDfprintf(stderr, " rank=%d\n", rank ); else HDfprintf(stderr, "\n" ); #endif if (0==d[i].block) goto empty; if (0==d[i].count) goto empty; if (0==d[i].xtent) goto empty; } } /* end else */ /********************************************************************** Compute array "offset[rank]" which gives the offsets for a multi- dimensional array with dimensions "d[i].xtent" (i=0,1,...,rank-1). **********************************************************************/ offset[rank-1] = 1; max_xtent[rank-1] = d[rank-1].xtent; #ifdef H5Smpi_DEBUG i=rank-1; HDfprintf(stderr, " offset[%2d]=%d; max_xtent[%2d]=%d\n", i, offset[i], i, max_xtent[i]); #endif for (i=rank-2; i>=0; --i) { offset[i] = offset[i+1]*d[i+1].xtent; max_xtent[i] = max_xtent[i+1]*d[i].xtent; #ifdef H5Smpi_DEBUG HDfprintf(stderr, " offset[%2d]=%d; max_xtent[%2d]=%d\n", i, offset[i], i, max_xtent[i]); #endif } /* Create a type covering the selected hyperslab. * Multidimensional dataspaces are stored in row-major order. * The type is built from the inside out, going from the * fastest-changing (i.e., inner) dimension * to the slowest (outer). */ /******************************************************* * Construct contig type for inner contig dims: *******************************************************/ #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: Making contig type %d MPI_BYTEs\n", FUNC,elmt_size ); for (i=rank-1; i>=0; --i) HDfprintf(stderr, "d[%d].xtent=%Hu \n", i, d[i].xtent); #endif if (MPI_SUCCESS != (mpi_code= MPI_Type_contiguous( (int)elmt_size, MPI_BYTE, &inner_type ))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code); /******************************************************* * Construct the type by walking the hyperslab dims * from the inside out: *******************************************************/ for ( i=rank-1; i>=0; --i) { #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: Dimension i=%d \n" "start=%Hd count=%Hu block=%Hu stride=%Hu, xtent=%Hu max_xtent=%d\n", FUNC, i, d[i].start, d[i].count, d[i].block, d[i].strid, d[i].xtent, max_xtent[i]); #endif #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: i=%d Making vector-type \n", FUNC,i); #endif /**************************************** * Build vector type of the selection. ****************************************/ mpi_code =MPI_Type_vector((int)(d[i].count), /* count */ (int)(d[i].block), /* blocklength */ (int)(d[i].strid), /* stride */ inner_type, /* old type */ &outer_type); /* new type */ MPI_Type_free( &inner_type ); if (mpi_code!=MPI_SUCCESS) HMPI_GOTO_ERROR(FAIL, "couldn't create MPI vector type", mpi_code); /**************************************** * Then build the dimension type as (start, vector type, xtent). ****************************************/ /* calculate start and extent values of this dimension */ displacement[1] = d[i].start * offset[i] * elmt_size; displacement[2] = (MPI_Aint)elmt_size * max_xtent[i]; if(MPI_SUCCESS != (mpi_code = MPI_Type_extent(outer_type, &extent_len))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_extent failed", mpi_code); /************************************************* * Restructure this datatype ("outer_type") * so that it still starts at 0, but its extent * is the full extent in this dimension. *************************************************/ if (displacement[1] > 0 || (int)extent_len < displacement[2]) { block_length[0] = 1; block_length[1] = 1; block_length[2] = 1; displacement[0] = 0; old_types[0] = MPI_LB; old_types[1] = outer_type; old_types[2] = MPI_UB; #ifdef H5Smpi_DEBUG HDfprintf(stderr, "%s: i=%d Extending struct type\n" "***displacements: %d, %d, %d\n", FUNC, i, displacement[0], displacement[1], displacement[2]); #endif mpi_code = MPI_Type_struct ( 3, /* count */ block_length, /* blocklengths */ displacement, /* displacements */ old_types, /* old types */ &inner_type); /* new type */ MPI_Type_free (&outer_type); if (mpi_code!=MPI_SUCCESS) HMPI_GOTO_ERROR(FAIL, "couldn't resize MPI vector type", mpi_code); } else { inner_type = outer_type; } } /* end for */ /*************************** * End of loop, walking * thru dimensions. ***************************/ /* At this point inner_type is actually the outermost type, even for 0-trip loop */ *new_type = inner_type; if (MPI_SUCCESS != (mpi_code= MPI_Type_commit( new_type ))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code); /* fill in the remaining return values */ *count = 1; /* only have to move one of these suckers! */ *extra_offset = 0; *is_derived_type = 1; HGOTO_DONE(SUCCEED); empty: /* special case: empty hyperslab */ *new_type = MPI_BYTE; *count = 0; *extra_offset = 0; *is_derived_type = 0; done: /* Release selection iterator */ if(sel_iter_init) { if (H5S_SELECT_ITER_RELEASE(&sel_iter)<0) HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator"); } /* end if */ #ifdef H5Smpi_DEBUG HDfprintf(stderr, "Leave %s, count=%ld is_derived_type=%d\n", FUNC, *count, *is_derived_type ); #endif FUNC_LEAVE_NOAPI(ret_value); }
/*-------------------------------------------------------------------------- NAME H5O_attr_debug PURPOSE Prints debugging information for an attribute message USAGE void *H5O_attr_debug(f, mesg, stream, indent, fwidth) H5F_t *f; IN: pointer to the HDF5 file struct const void *mesg; IN: Pointer to the source attribute struct FILE *stream; IN: Pointer to the stream for output data int indent; IN: Amount to indent information by int fwidth; IN: Field width (?) RETURNS Non-negative on success/Negative on failure DESCRIPTION This function prints debugging output to the stream passed as a parameter. --------------------------------------------------------------------------*/ static herr_t H5O_attr_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream, int indent, int fwidth) { const H5A_t *mesg = (const H5A_t *)_mesg; H5O_shared_t sh_mesg; /* Shared message information */ void *dt_mesg; /* Pointer to datatype message to dump */ herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int)=NULL; herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5O_attr_debug); /* check args */ assert(f); assert(stream); assert(indent >= 0); assert(fwidth >= 0); fprintf(stream, "%*s%-*s \"%s\"\n", indent, "", fwidth, "Name:", mesg->name); fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Initialized:", (unsigned int)mesg->initialized); fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Opened:", (unsigned int)mesg->ent_opened); fprintf(stream, "%*sSymbol table entry...\n", indent, ""); H5G_ent_debug(f, dxpl_id, &(mesg->ent), stream, indent+3, MAX(0, fwidth-3), HADDR_UNDEF); fprintf(stream, "%*sData type...\n", indent, ""); fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0,fwidth-3), "Size:", (unsigned long)(mesg->dt_size)); fprintf (stream, "%*s%-*s %s\n", indent+3, "", MAX(0,fwidth-3), "Shared:", (H5T_committed(mesg->dt) ? "Yes" : "No") ); if(H5T_committed(mesg->dt)) { /* Reset shared message information */ HDmemset(&sh_mesg,0,sizeof(H5O_shared_t)); /* Get shared message information from datatype */ if ((H5O_MSG_DTYPE->get_share)(f, mesg->dt, &sh_mesg/*out*/)<0) HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't retrieve shared message information"); debug=H5O_MSG_SHARED->debug; dt_mesg=&sh_mesg; } /* end if */ else { debug=H5O_MSG_DTYPE->debug; dt_mesg=mesg->dt; } /* end else */ if(debug) (debug)(f, dxpl_id, dt_mesg, stream, indent+3, MAX(0, fwidth-3)); else fprintf(stream, "%*s<No info for this message>\n", indent + 6, ""); fprintf(stream, "%*sData space...\n", indent, ""); fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0,fwidth-3), "Size:", (unsigned long)(mesg->ds_size)); H5S_debug(f, dxpl_id, mesg->ds, stream, indent+3, MAX(0, fwidth-3)); done: FUNC_LEAVE_NOAPI(ret_value); }
/*------------------------------------------------------------------------- * Function: H5S_mpio_span_hyper_type * * Purpose: Translate an HDF5 irregular hyperslab selection into an MPI type. * * Return: non-negative on success, negative on failure. * * Outputs: *new_type the MPI type corresponding to the selection * *count how many objects of the new_type in selection * (useful if this is the buffer type for xfer) * *extra_offset Number of bytes of offset within dataset * *is_derived_type 0 if MPI primitive type, 1 if derived * * Programmer: kyang * */ static herr_t H5S_mpio_span_hyper_type( const H5S_t *space, size_t elmt_size, MPI_Datatype *new_type,/* out: */ size_t *count, hsize_t *extra_offset, hbool_t *is_derived_type ){ MPI_Datatype span_type; H5S_hyper_span_t *ospan; H5S_hyper_span_info_t *odown; hsize_t *size; int rank; int mpi_code; herr_t ret_value = SUCCEED; MPI_Aint extent,lb; FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_span_hyper_type); /* Check args */ assert (space); /* assert(sizeof(MPI_Aint) >= sizeof(elmt_size)); not sure the reason*/ rank = space->extent.rank; /* size = HDcalloc((size_t)rank,sizeof(hsize_t)); */ if (0==elmt_size) goto empty; size = space->extent.size; if(size == 0) goto empty; odown = space->select.sel_info.hslab->span_lst; if(odown == NULL) goto empty; ospan = odown->head; if(ospan == NULL) goto empty; /* obtain derived data type */ if(FAIL == H5S_obtain_datatype(space->extent.size,ospan,&span_type,elmt_size,rank)) HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't obtain MPI derived data type"); if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(&span_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code); *new_type = span_type; /* fill in the remaining return values */ *count = 1; *extra_offset = 0; *is_derived_type = 1; HGOTO_DONE(SUCCEED); empty: /* special case: empty hyperslab */ *new_type = MPI_BYTE; *count = 0; *extra_offset = 0; *is_derived_type = 0; done: FUNC_LEAVE_NOAPI(ret_value); }
* * Return: Non-negative on success/Negative on failure * * Programmer: Quincey Koziol * Mondey, December 23, 2002 * * Modifications: * *------------------------------------------------------------------------- */ static herr_t H5O_mtime_reset(void UNUSED *_mesg) { FUNC_ENTER_NOAPI_NOINIT_NOERR FUNC_LEAVE_NOAPI(SUCCEED) } /*------------------------------------------------------------------------- * Function: H5O_mtime_free * * Purpose: Free's the message * * Return: Non-negative on success/Negative on failure * * Programmer: Quincey Koziol * Thursday, March 30, 2000 * * Modifications: *
/*------------------------------------------------------------------------- * Function: H5S_obtain datatype * * Purpose: Obtain an MPI derived datatype based on span-tree implementation * * Return: non-negative on success, negative on failure. * * Outputs: *span_type the MPI type corresponding to the selection * * Programmer: kyang * */ static herr_t H5S_obtain_datatype(const hsize_t size[], H5S_hyper_span_t* span, MPI_Datatype *span_type, size_t elmt_size, int dimindex) { int innercount,outercount; MPI_Datatype bas_type; MPI_Datatype temp_type; MPI_Datatype tempinner_type; MPI_Datatype *inner_type; int *blocklen; MPI_Aint *disp; MPI_Aint stride; MPI_Aint extent,lb; H5S_hyper_span_info_t *down; H5S_hyper_span_t *tspan; int mpi_code; herr_t ret_value = SUCCEED; #ifdef H5_HAVE_MPI2 MPI_Aint sizeaint,sizedtype; #endif /* H5_HAVE_MPI2 */ hsize_t total_lowd,total_lowd1; int i; int ret; FUNC_ENTER_NOAPI_NOINIT(H5S_obtain_datatype); assert(span); inner_type = NULL; down = NULL; tspan = NULL; down = span->down; tspan = span; outercount = 0; /* obtain the number of span tree for this dimension */ while(tspan) { tspan = tspan->next; outercount ++; } if(outercount == 0) { span_type = NULL; return 0; } /* MPI2 hasn't been widely acccepted, adding H5_HAVE_MPI2 for the future use */ #ifdef H5_HAVE_MPI2 MPI_Type_extent(MPI_Aint,&sizeaint); MPI_Type_extent(MPI_Datatype,&sizedtype); blocklen = (int *)HDcalloc((size_t)outercount,sizeof(int)); disp = (MPI_Aint *)HDcalloc((size_t)outercount,sizeaint); inner_type = (MPI_Datatype *)HDcalloc((size_t)outercount,sizedtype); #else blocklen = (int *)HDcalloc((size_t)outercount,sizeof(int)); disp = (MPI_Aint *)HDcalloc((size_t)outercount,sizeof(MPI_Aint)); inner_type = (MPI_Datatype *)HDcalloc((size_t)outercount,sizeof(MPI_Datatype)); #endif tspan = span; outercount = 0; /* if this is the fastest changing dimension, it is the base case for derived datatype. */ if(down == NULL){ assert(dimindex <= 1); if(MPI_SUCCESS != (mpi_code = MPI_Type_contiguous((int)elmt_size, MPI_BYTE,&bas_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code); if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&bas_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code); while(tspan){ disp[outercount] = (MPI_Aint)elmt_size * tspan->low; blocklen[outercount] = tspan->nelem; tspan = tspan->next; outercount ++; } if(MPI_SUCCESS != (mpi_code = MPI_Type_hindexed(outercount,blocklen, disp,bas_type,span_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_hindexed failed", mpi_code); } else {/* dimindex is the rank of the dimension */ assert(dimindex >1); /* Calculate the total bytes of the lower dimension */ total_lowd = 1; /* one dimension down */ total_lowd1 = 1; /* two dimensions down */ for ( i = dimindex-1; i > 0; i--) total_lowd = total_lowd * size[i]; for ( i = dimindex-1; i > 1; i--) total_lowd1 = total_lowd1 * size[i]; while(tspan){ /* Displacement should be in byte and should have dimension information */ /* First using MPI Type vector to build derived data type for this span only */ /* Need to calculate the disp in byte for this dimension. */ /* Calculate the total bytes of the lower dimension */ disp[outercount] = tspan->low*total_lowd*elmt_size; blocklen[outercount] = 1; /* generating inner derived datatype by using MPI_Type_hvector */ if(FAIL == H5S_obtain_datatype(size,tspan->down->head,&temp_type,elmt_size,dimindex-1)) HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't obtain MPI derived data type"); if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&temp_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code); /* building the inner vector datatype */ stride = total_lowd*elmt_size; innercount = tspan->nelem; if(MPI_SUCCESS != (mpi_code = MPI_Type_hvector(innercount,1,stride,temp_type,&tempinner_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_hvector failed", mpi_code); if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&tempinner_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code); if(MPI_SUCCESS != (mpi_code =MPI_Type_free(&temp_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_free failed",mpi_code); inner_type[outercount] = tempinner_type; outercount ++; tspan = tspan->next; } /* building the whole vector datatype */ if(MPI_SUCCESS != (mpi_code = MPI_Type_struct(outercount,blocklen,disp,inner_type,span_type))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_struct failed", mpi_code); } if(inner_type != NULL){ if(down != NULL) { for(i=0;i<outercount;i++) if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&inner_type[i]))) HMPI_GOTO_ERROR(FAIL, "MPI_Type_free failed",mpi_code); } } if(inner_type != NULL) HDfree(inner_type); if(blocklen != NULL) HDfree(blocklen); if(disp != NULL) HDfree(disp); done: FUNC_LEAVE_NOAPI(ret_value); }
H5F__init_deprec_interface -- Initialize interface-specific information USAGE herr_t H5F__init_deprec_interface() RETURNS Non-negative on success/Negative on failure DESCRIPTION Initializes any interface-specific data or routines. (Just calls H5F_init() currently). --------------------------------------------------------------------------*/ static herr_t H5F__init_deprec_interface(void) { FUNC_ENTER_STATIC_NOERR FUNC_LEAVE_NOAPI(H5F_init()) } /* H5F__init_deprec_interface() */ /*-------------------------------------------------------------------------- NAME H5F__term_deprec_interface -- Terminate interface USAGE herr_t H5F__term_deprec_interface() RETURNS Non-negative on success/Negative on failure DESCRIPTION Terminates interface. (Just resets H5_interface_initialize_g currently). --------------------------------------------------------------------------*/
/*------------------------------------------------------------------------- * Function: H5S_mpio_space_type * * Purpose: Translate an HDF5 dataspace selection into an MPI type. * Currently handle only hyperslab and "all" selections. * * Return: non-negative on success, negative on failure. * * Outputs: *new_type the MPI type corresponding to the selection * *count how many objects of the new_type in selection * (useful if this is the buffer type for xfer) * *extra_offset Number of bytes of offset within dataset * *is_derived_type 0 if MPI primitive type, 1 if derived * * Programmer: rky 980813 * * Modifications: * * Quincey Koziol, June 18, 2002 * Added 'extra_offset' parameter * *------------------------------------------------------------------------- */ herr_t H5S_mpio_space_type( const H5S_t *space, size_t elmt_size, /* out: */ MPI_Datatype *new_type, size_t *count, hsize_t *extra_offset, hbool_t *is_derived_type ) { herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_space_type); /* Check args */ assert (space); /* Creat MPI type based on the kind of selection */ switch (H5S_GET_EXTENT_TYPE(space)) { case H5S_SCALAR: case H5S_SIMPLE: switch(H5S_GET_SELECT_TYPE(space)) { case H5S_SEL_NONE: if ( H5S_mpio_none_type( space, elmt_size, /* out: */ new_type, count, extra_offset, is_derived_type ) <0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type"); break; case H5S_SEL_ALL: if ( H5S_mpio_all_type( space, elmt_size, /* out: */ new_type, count, extra_offset, is_derived_type ) <0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type"); break; case H5S_SEL_POINTS: /* not yet implemented */ ret_value = FAIL; break; case H5S_SEL_HYPERSLABS: if((H5S_SELECT_IS_REGULAR(space) == TRUE)) { if(H5S_mpio_hyper_type( space, elmt_size, /* out: */ new_type, count, extra_offset, is_derived_type )<0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type"); } else { if(H5S_mpio_span_hyper_type( space, elmt_size, /* out: */ new_type, count, extra_offset, is_derived_type )<0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type"); } break; default: assert("unknown selection type" && 0); break; } /* end switch */ break; case H5S_COMPLEX: /* not yet implemented */ HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "complex data spaces are not supported yet"); default: assert("unknown data space type" && 0); break; } done: FUNC_LEAVE_NOAPI(ret_value); }
USAGE herr_t H5T_init_cset_interface() RETURNS Non-negative on success/Negative on failure DESCRIPTION Initializes any interface-specific data or routines. (Just calls H5T_init_iterface currently). --------------------------------------------------------------------------*/ static herr_t H5T_init_cset_interface(void) { FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_cset_interface) FUNC_LEAVE_NOAPI(H5T_init()) } /* H5T_init_cset_interface() */ /*------------------------------------------------------------------------- * 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 a string type. * * Failure: H5T_CSET_ERROR (Negative) * * Programmer: Robb Matzke
H5D_init_dbg_interface -- Initialize interface-specific information USAGE herr_t H5D_init_dbg_interface() RETURNS Non-negative on success/Negative on failure DESCRIPTION Initializes any interface-specific data or routines. (Just calls H5D_init() currently). --------------------------------------------------------------------------*/ static herr_t H5D_init_dbg_interface(void) { FUNC_ENTER_NOAPI_NOINIT_NOERR FUNC_LEAVE_NOAPI(H5D_init()) } /* H5D_init_dbg_interface() */ /*------------------------------------------------------------------------- * Function: H5Ddebug * * Purpose: Prints various information about a dataset. This function is * not to be documented in the API at this time. * * Return: Success: Non-negative * * Failure: Negative * * Programmer: Robb Matzke * Wednesday, April 28, 1999