functions added to query attributes by name

This commit is contained in:
2013-09-26 15:47:43 +02:00
parent 969acd3642
commit c3a74c8ed4
8 changed files with 225 additions and 37 deletions
+110 -26
View File
@@ -180,7 +180,7 @@ h5_write_file_attrib (
attrib_type,
attrib_value,
attrib_nelem,
1));
!is_appendonly (f)));
}
h5_err_t
@@ -209,11 +209,62 @@ h5_write_step_attrib (
attrib_type,
attrib_value,
attrib_nelem,
1));
!is_appendonly (f)));
}
static inline h5_err_t
get_attrib_info (
hid_t attrib_id,
h5_int64_t* attrib_type, /*!< OUT: H5 type of attribute */
h5_size_t* attrib_nelem /*!< OUT: number of elements */
) {
H5_INLINE_FUNC_ENTER (h5_err_t);
hid_t mytype;
TRY (mytype = hdf5_get_attribute_type (attrib_id));
H5T_class_t type_class;
TRY (type_class = hdf5_get_class_type (mytype));
if (attrib_nelem) {
if (type_class == H5T_STRING) {
*attrib_nelem = H5Tget_size(mytype);
} else {
hid_t space_id;
TRY (space_id = hdf5_get_attribute_dataspace (attrib_id));
TRY (*attrib_nelem = hdf5_get_npoints_of_dataspace (space_id));
TRY (hdf5_close_dataspace (space_id));
}
}
if (attrib_type) {
TRY (*attrib_type = h5priv_normalize_h5_type (mytype));
}
TRY (hdf5_close_type (mytype));
TRY (hdf5_close_attribute (attrib_id));
H5_INLINE_FUNC_RETURN (H5_SUCCESS);
}
h5_err_t
h5priv_get_attrib_info (
h5priv_get_attrib_info_by_name (
const hid_t id, /*!< IN: HDF5 object ID */
const char* const attrib_name, /*!< IN: name of attribute */
h5_int64_t* attrib_type, /*!< OUT: H5 type of attribute */
h5_size_t* attrib_nelem /*!< OUT: number of elements */
) {
H5_PRIV_API_ENTER (h5_err_t,
"id=%d, "
"attrib_name=%s,"
"attrib_type=%p, attrib_nelem=%p",
id,
attrib_name,
attrib_type,
attrib_nelem);
hid_t attrib_id;
TRY (attrib_id = hdf5_open_attribute (id, attrib_name));
H5_PRIV_API_RETURN (get_attrib_info (attrib_id, attrib_type, attrib_nelem));
}
h5_err_t
h5priv_get_attrib_info_by_idx (
const hid_t id, /*!< HDF5 object ID */
const h5_size_t attrib_idx, /*!< index of attribute */
char* attrib_name, /*!< OUT: name of attribute */
@@ -233,30 +284,17 @@ h5priv_get_attrib_info (
attrib_type,
attrib_nelem);
hid_t attrib_id;
hid_t mytype;
hid_t space_id;
TRY (attrib_id = hdf5_open_attribute_idx (
id,
(unsigned int)attrib_idx));
if (attrib_nelem) {
TRY (space_id = hdf5_get_attribute_dataspace (attrib_id));
TRY (*attrib_nelem = hdf5_get_npoints_of_dataspace (space_id));
TRY (hdf5_close_dataspace (space_id));
}
if (attrib_name) {
TRY (hdf5_get_attribute_name (
attrib_id,
(size_t)len_attrib_name,
attrib_name));
}
if (attrib_type) {
TRY (mytype = hdf5_get_attribute_type (attrib_id));
TRY (*attrib_type = h5priv_normalize_h5_type (mytype));
TRY (hdf5_close_type (mytype));
}
TRY (hdf5_close_attribute (attrib_id));
H5_PRIV_API_RETURN (H5_SUCCESS);
H5_PRIV_API_RETURN (get_attrib_info (attrib_id, attrib_type, attrib_nelem));
}
/*!
@@ -267,7 +305,30 @@ h5priv_get_attrib_info (
\return \c H5_SUCCESS or error code.
*/
h5_err_t
h5_get_file_attrib_info (
h5_get_file_attrib_info_by_name (
const h5_file_t f_, /*!< IN: handle to open file */
char* attrib_name, /*!< IN: name of attribute */
h5_int64_t* attrib_type, /*!< OUT: H5 type of attribute */
h5_size_t* attrib_nelem /*!< OUT: number of elements */
) {
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t,
"f=%p, "
"attrib_name=%s, "
"attrib_type=%p, attrib_nelem=%p",
f,
attrib_name,
attrib_type,
attrib_nelem);
CHECK_FILEHANDLE (f);
TRY (h5priv_get_attrib_info_by_name (
f->root_gid, attrib_name,
attrib_type, attrib_nelem));
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_get_file_attrib_info_by_idx (
const h5_file_t f_, /*!< handle to open file */
const h5_size_t attrib_idx, /*!< index of attribute */
char* attrib_name, /*!< OUT: name of attribute */
@@ -278,23 +339,46 @@ h5_get_file_attrib_info (
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t,
"f=%p, "
"attrib_idx=%llu, attrib_name=%p, len_attrib_name=%llu, "
"attrib_idx=%llu, "
"attrib_name=%p, len_attrib_name=%llu, "
"attrib_type=%p, attrib_nelem=%p",
f,
(long long unsigned)attrib_idx,
attrib_name,
(long long unsigned)len_attrib_name,
attrib_type,
attrib_nelem);
attrib_name, (long long unsigned)len_attrib_name,
attrib_type, attrib_nelem);
CHECK_FILEHANDLE (f);
TRY (h5priv_get_attrib_info (
TRY (h5priv_get_attrib_info_by_idx (
f->root_gid, attrib_idx, attrib_name, len_attrib_name,
attrib_type, attrib_nelem));
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_get_step_attrib_info (
h5_get_step_attrib_info_by_name (
const h5_file_t f_, /*!< handle to open file */
char* attrib_name, /*!< OUT: name of attribute */
h5_int64_t* attrib_type, /*!< OUT: H5 type of attribute */
h5_size_t* attrib_nelem /*!< OUT: number of elements */
) {
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t,
"f=%p, "
"attrib_name=%p, "
"attrib_type=%p, attrib_nelem=%p",
f,
attrib_name,
attrib_type, attrib_nelem);
CHECK_FILEHANDLE (f);
CHECK_TIMEGROUP (f);
TRY (h5priv_get_attrib_info_by_name (
f->step_gid,
attrib_name,
attrib_type, attrib_nelem));
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_get_step_attrib_info_by_idx (
const h5_file_t f_, /*!< handle to open file */
const h5_size_t attrib_idx, /*!< index of attribute */
char* attrib_name, /*!< OUT: name of attribute */
@@ -315,7 +399,7 @@ h5_get_step_attrib_info (
attrib_nelem);
CHECK_FILEHANDLE (f);
CHECK_TIMEGROUP (f);
TRY (h5priv_get_attrib_info (
TRY (h5priv_get_attrib_info_by_idx (
f->step_gid, attrib_idx, attrib_name, len_attrib_name,
attrib_type, attrib_nelem));
H5_CORE_API_RETURN (H5_SUCCESS);
+9 -1
View File
@@ -31,7 +31,15 @@ h5priv_write_attrib (
);
h5_err_t
h5priv_get_attrib_info (
h5priv_get_attrib_info_by_name (
const hid_t id,
const char* const attrib_name,
h5_int64_t* attrib_type,
h5_size_t* attrib_nelem
);
h5_err_t
h5priv_get_attrib_info_by_idx (
const hid_t id,
const h5_size_t attrib_idx,
char* attrib_name,
+32
View File
@@ -853,6 +853,38 @@ hdf5_insert_type (
HDF5_WRAPPER_RETURN (H5_SUCCESS);
}
static inline H5T_class_t
hdf5_get_class_type (
hid_t dtype_id
) {
HDF5_WRAPPER_ENTER (h5_err_t, "dtype_id=%d", dtype_id);
H5T_class_t class = H5Tget_class (dtype_id);
if (class < 0)
HDF5_WRAPPER_LEAVE (
h5_error(
H5_ERR_HDF5,
"Can't determine class of type %d.",
dtype_id));
HDF5_WRAPPER_RETURN (class);
}
static inline h5_ssize_t
hdf5_get_sizeof_type (
hid_t dtype_id
) {
HDF5_WRAPPER_ENTER (h5_ssize_t, "dtype_id=%d", dtype_id);
h5_ssize_t size = H5Tget_size (dtype_id);
if (size == 0) {
HDF5_WRAPPER_LEAVE (
h5_error(
H5_ERR_HDF5,
"Can't determine size of type %d.",
dtype_id));
}
HDF5_WRAPPER_RETURN (size);
}
static inline h5_err_t
hdf5_close_type (
hid_t dtype_id
+3 -3
View File
@@ -50,7 +50,7 @@ h5b_write_field_attrib (
attrib_type,
attrib_value,
attrib_nelem,
1) );
!is_appendonly (f)) );
H5_CORE_API_RETURN (H5_SUCCESS);
}
@@ -103,7 +103,7 @@ h5b_get_num_field_attribs (
}
h5_err_t
h5b_get_field_attrib_info (
h5b_get_field_attrib_info_by_idx (
const h5_file_t fh, /*!< IN: file handle */
const char *field_name, /*!< IN: field name */
const h5_size_t attrib_idx, /*!< IN: attribute index */
@@ -132,7 +132,7 @@ h5b_get_field_attrib_info (
TRY (h5bpriv_open_field_group(f, field_name));
H5_CORE_API_RETURN (
h5priv_get_attrib_info (
h5priv_get_attrib_info_by_idx (
f->b->field_gid,
attrib_idx,
attrib_name,
+1 -1
View File
@@ -77,7 +77,7 @@ H5BlockGetFieldAttribInfo (
attrib_type,
attrib_nelem);
H5_API_RETURN (
h5b_get_field_attrib_info (
h5b_get_field_attrib_info_by_idx (
f,
field_name,
attrib_idx,
+59 -3
View File
@@ -317,7 +317,7 @@ H5ReadFileAttribString (
*/
static inline h5_err_t
H5ReadStepAttribString (
const h5_file_t f, ///< [in] file handle.
const h5_file_t f, ///< [in] file handle.
const char *name, ///< [in] name of attribute to create.
char *buffer ///< [out] value of attribute.
) {
@@ -560,6 +560,34 @@ H5GetNumStepAttribs (
H5_API_RETURN (h5_get_num_step_attribs (f));
}
/*!
\ingroup h5hut_attrib
Get the type and number of elements of the file attribute
specified by its name.
\return \c H5_SUCCESS or \c H5_FAILURE.
*/
static inline h5_err_t
H5GetFileAttribInfoByName (
const h5_file_t f, ///< [in] file handle.
const char* const name, ///< [in] name of attribute.
h5_int64_t* type, ///< [out] type of value..
h5_size_t* nelems ///< [out] number of elements.
) {
H5_API_ENTER (h5_err_t,
"f=%p, "
"name=%s, "
"type=%p, nelems=%p",
(h5_file_p)f,
name,
type, nelems);
H5_API_RETURN (h5_get_file_attrib_info_by_name (
f,
name,
type, nelems));
}
/*!
\ingroup h5hut_attrib
@@ -594,7 +622,7 @@ H5GetFileAttribInfo (
(long long unsigned)len_name,
type,
nelems);
H5_API_RETURN (h5_get_file_attrib_info (
H5_API_RETURN (h5_get_file_attrib_info_by_idx (
f,
idx,
name, len_name,
@@ -602,6 +630,34 @@ H5GetFileAttribInfo (
nelems));
}
/*!
\ingroup h5hut_attrib
Gets the type and number of elements of the step attribute
specified by its name.
\return \c H5_SUCCESS or \c H5_FAILURE.
*/
static inline h5_err_t
H5GetStepAttribInfoByName (
const h5_file_t f, ///< [in] file handle.
const char* const name, ///< [in] name of attribute.
h5_int64_t* type, ///< [out] type of value..
h5_size_t* nelems ///< [out] number of elements.
) {
H5_API_ENTER (h5_err_t,
"f=%p, "
"name=%s, "
"type=%p, nelems=%p",
(h5_file_p)f,
name,
type, nelems);
H5_API_RETURN (h5_get_step_attrib_info_by_name (
f,
name,
type, nelems));
}
/*!
\ingroup h5hut_attrib
@@ -634,7 +690,7 @@ H5GetStepAttribInfo (
(long long unsigned)len_name,
type,
nelems);
H5_API_RETURN (h5_get_step_attrib_info (
H5_API_RETURN (h5_get_step_attrib_info_by_idx (
f,
idx,
name,
+10 -2
View File
@@ -33,12 +33,20 @@ h5_write_step_attrib (
const h5_file_t, const char*, const hid_t, const void*, const hsize_t);
h5_err_t
h5_get_file_attrib_info (
h5_get_file_attrib_info_by_name (
const h5_file_t, const char* const, h5_int64_t* const, h5_size_t*);
h5_err_t
h5_get_file_attrib_info_by_idx (
const h5_file_t, const h5_size_t, char*, const h5_size_t, h5_int64_t* const,
h5_size_t*);
h5_err_t
h5_get_step_attrib_info (
h5_get_step_attrib_info_by_name (
const h5_file_t, const char* const, h5_int64_t*, h5_size_t*);
h5_err_t
h5_get_step_attrib_info_by_idx (
const h5_file_t, const h5_size_t, char*, const h5_size_t, h5_int64_t*,
h5_size_t*);
+1 -1
View File
@@ -32,7 +32,7 @@ h5b_get_num_field_attribs (
const char*);
h5_err_t
h5b_get_field_attrib_info (
h5b_get_field_attrib_info_by_idx (
const h5_file_t,
const char*, const h5_size_t, char* const, const h5_size_t,
h5_int64_t* const, h5_size_t*);