Hello,
referring to and quoting from:
http://www.hdfgroup.org/HDF5/doc/RM/RM_H5D.html#Dataset-GetOffset
Purpose:
Returns dataset address in file.
Description:
H5Dget_offset returns the address in the file of the dataset
dset_id. That address is expressed as the offset in bytes from the beginning of
the file.
[...]
Returns:
Returns the offset in bytes; otherwise returns HADDR_UNDEF, a
negative value.
But when looking into the sources of the current release for H5D__get_offset
there is a drastically narrowed down subset of real world use cases:
haddr_t ret_value = HADDR_UNDEF; [...]
switch(dset->shared->layout.type) {
case H5D_CHUNKED:
case H5D_COMPACT:
break;
case H5D_CONTIGUOUS:
/* If dataspace hasn't been allocated or dataset is stored in
* an external file, the value will be HADDR_UNDEF. */
if(dset->shared->dcpl_cache.efl.nused == 0 ||
H5F_addr_defined(dset->shared->layout.storage.u.contig.addr))
/* Return the absolute dataset offset from the beginning of
file. */
ret_value = dset->shared->layout.storage.u.contig.addr +
H5F_BASE_ADDR(dset->oloc.file);
break;
case H5D_LAYOUT_ERROR:
case H5D_NLAYOUTS:
default:
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "unknown dataset
layout type")
} /*lint !e788 All appropriate cases are covered */
Rationale:
The function will only provide a useable value if the layout type is
H5D_CONTIGUOUS
_and_ the data space is allocated in main memory without any external file
usage.
In all other cases (no main memory usage, external file usage,
chunked/compact/other layout)
it will simply fail all the time with a return value of HADDR_UNDEF.
Those behavior should be documented in the reference guide as such cases might
happen rather frequent.
To my understanding due to this the function only serves a useable value in
only quite few cases.
Regards, Alex.
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5