Commit 3d623062 authored by gsell's avatar gsell

some missing query function implemented, see issue#1 in Gitlab

parent 44ffea4f
......@@ -127,19 +127,15 @@ h5_add_attachment (
H5_CORE_API_RETURN (H5_SUCCESS);
}
static inline hid_t
open_attachments (
const h5_file_p f
h5_err_t
h5_has_attachments (
const h5_file_t f_
) {
h5_err_t exists = hdf5_link_exists (f->file, H5_ATTACHMENT);
if (exists > 0) {
return hdf5_open_group (f->file, H5_ATTACHMENT);
} else if (exists == 0) {
return h5_warn ("No attachment group in file");
}
return exists;
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f);
h5_err_t exists;
TRY (exists = hdf5_link_exists (f->file, H5_ATTACHMENT));
H5_CORE_API_RETURN (exists);
}
h5_ssize_t
......@@ -148,12 +144,14 @@ h5_get_num_attachments (
) {
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_ssize_t, "f=%p", f);
h5_ssize_t num = 0;
hid_t group_id;
TRY (group_id = open_attachments (f));
if (group_id < 0) {
H5_CORE_API_LEAVE (0);
h5_err_t exists;
TRY (exists = hdf5_link_exists (f->file, H5_ATTACHMENT));
if (exists == 0) {
return 0;
}
hid_t group_id;
TRY (group_id = hdf5_open_group (f->file, H5_ATTACHMENT));
h5_ssize_t num = 0;
TRY (num = hdf5_get_num_datasets (group_id));
TRY (hdf5_close_group (group_id));
H5_CORE_API_RETURN (num);
......@@ -170,13 +168,11 @@ h5_get_attachment_info_by_idx (
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t,
"f=%p, idx=%llu, fname=%s, len_fname=%llu, fsize=%p",
f, (unsigned long long)idx, fname, (unsigned long long)len_fname,
f, (unsigned long long)idx,
fname, (unsigned long long)len_fname,
fsize);
hid_t loc_id;
TRY (loc_id = open_attachments (f));
if (loc_id < 0) { // no attachment group in file
H5_CORE_API_LEAVE (0);
}
TRY (loc_id = hdf5_open_group (f->file, H5_ATTACHMENT));
TRY (hdf5_get_name_of_dataset_by_idx (
loc_id,
idx,
......@@ -192,6 +188,20 @@ h5_get_attachment_info_by_idx (
H5_CORE_API_RETURN (H5_SUCCESS);
}
h5_err_t
h5_has_attachment (
const h5_file_t f_, // [in]
const char* const fname // [in]
) {
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t, "f=%p, fname='%s'", f, fname);
hid_t loc_id;
TRY (loc_id = hdf5_open_group (f->file, H5_ATTACHMENT));
h5_err_t exists;
TRY (exists = hdf5_link_exists (f->file, fname));
H5_CORE_API_RETURN (exists);
}
h5_err_t
h5_get_attachment_info_by_name (
const h5_file_t f_,
......@@ -202,10 +212,7 @@ h5_get_attachment_info_by_name (
H5_CORE_API_ENTER (h5_err_t, "f=%p, fname='%s', fsize=%p", f, fname, fsize);
hid_t loc_id;
TRY (loc_id = open_attachments (f));
if (loc_id < 0) {
H5_CORE_API_LEAVE (H5_NOK);
}
TRY (loc_id = hdf5_open_group (f->file, H5_ATTACHMENT));
if (fsize) {
// get number of elements, do not change value on error
h5_ssize_t ssize;
......@@ -232,14 +239,6 @@ h5_get_attachment (
hid_t loc_id;
TRY (loc_id = hdf5_open_group (f->file, H5_ATTACHMENT));
h5_err_t exists;
TRY (exists = hdf5_link_exists (loc_id, fname));
if (!exists) {
H5_PRIV_FUNC_LEAVE (
h5_error (
H5_ERR_H5,
"Attachment '%s' doesn't exist", fname));
}
// read dataset
hid_t dataset_id, diskspace_id;
......@@ -320,12 +319,10 @@ h5_delete_attachment (
) {
h5_file_p f = (h5_file_p)f_;
H5_CORE_API_ENTER (h5_err_t, "f=%p, fname='%s'", f, fname);
hid_t group_id;
TRY (group_id = open_attachments (f));
if (group_id < 0) {
H5_CORE_API_LEAVE (H5_NOK);
}
TRY (hdf5_delete_link (group_id, fname, H5P_DEFAULT));
TRY (hdf5_close_group (group_id));
hid_t loc_id;
TRY (loc_id = hdf5_open_group (f->file, H5_ATTACHMENT));
TRY (hdf5_delete_link (loc_id, fname, H5P_DEFAULT));
TRY (hdf5_close_group (loc_id));
H5_CORE_API_RETURN (H5_SUCCESS);
}
......@@ -97,7 +97,7 @@ mpi_init (
TRY (hdf5_set_dxpl_mpio_property (f->props->xfer_prop,
H5FD_MPIO_INDEPENDENT) );
} else {
// default is MPI-IO colloctive mode
// default is MPI-IO collective mode
h5_info("Selecting MPI-IO VFD, using collective mode");
TRY (hdf5_set_fapl_mpio_property (f->props->access_prop,
f->props->comm, MPI_INFO_NULL));
......@@ -117,7 +117,7 @@ mpi_init (
TRY (hdf5_set_dxpl_mpio_property (f->props->xfer_prop,
H5FD_MPIO_INDEPENDENT) );
} else {
// default is MPI-IO colloctive mode
// default is MPI-IO collective mode
h5_info("Selecting MPI-IO VFD, using collective mode");
TRY (hdf5_set_fapl_mpio_property (f->props->access_prop,
f->props->comm, MPI_INFO_NULL));
......@@ -717,7 +717,7 @@ h5_get_num_steps(
/*!
\ingroup h5_core_filehandling
Start traversing steps.
Start traversing steps.
\return \c H5_SUCCESS or error code
*/
......@@ -726,8 +726,15 @@ h5_start_traverse_steps (
const h5_file_t f_ /*!< file handle */
) {
h5_file_p f = (h5_file_p)f_;
UNUSED_ARGUMENT (f);
return h5_error_not_implemented ();
H5_CORE_API_ENTER (int, "f=%p", f);
/*
fast test: Does Step#0 or Step#1 exist?
otherwise
loop over all steps and get smallest step number
*/
H5_CORE_API_RETURN (h5_error_not_implemented ());
}
/*!
......
......@@ -600,19 +600,34 @@ h5u_get_dataset_info (
dataset_name, len_dataset_name) );
H5_CORE_API_RETURN (
h5u_get_dataset_info_by_name(f, dataset_name, type, nelem));
h5u_get_dataset_info_by_name(fh, dataset_name, type, nelem));
}
h5_err_t
h5u_has_dataset (
const h5_file_t fh,
const char* const name
) {
h5_file_p f = (h5_file_p)fh;
H5_CORE_API_ENTER (h5_err_t,
"f=%p, name='%s'",
f, name);
h5_err_t exists;
TRY (exists = hdf5_link_exists (f->step_gid, name));
H5_CORE_API_RETURN (exists);
}
/*!
Get information about dataset in current index given by its index
*/
h5_err_t
h5u_get_dataset_info_by_name (
const h5_file_p f, /*!< [in] Handle to open file */
const h5_file_t fh, /*!< [in] Handle to open file */
const char* const dataset_name, /*!< [in] Name of dataset */
h5_int64_t* const type, /*!< [out] Type of data in dataset */
h5_size_t* const nelem /*!< [out] Number of elements. */
) {
h5_file_p f = (h5_file_p)fh;
H5_CORE_API_ENTER (h5_err_t,
"f=%p, "
"dataset_name='%s', "
......
......@@ -88,6 +88,9 @@ H5PartGetDatasetName (
\return \c H5_SUCCESS on success
\return \c H5_FAILURE on error
\see H5PartGetNumDatasets()
\see H5PartGetDatasetInfoByName()
*/
static inline h5_err_t
H5PartGetDatasetInfo (
......@@ -110,6 +113,58 @@ H5PartGetDatasetInfo (
H5_API_RETURN (h5u_get_dataset_info (
f, idx, name, len_name, type, nelems));
}
/**
Determines whether a dataset with given name exists in current step.
\return true (value \c >0) if step exists
\return false (\c 0) if step does not exist
\return \c H5_FAILURE on error
*/
static inline h5_err_t
H5PartHasDataset (
const h5_file_t f, ///< [in] file handle
const char* const name ///< [in] name of dataset
) {
H5_API_ENTER (h5_int64_t,
"f=%p, name='%s'",
(h5_file_p)f, name);
H5_API_RETURN (h5u_has_dataset (f, name));
}
/**
Gets the type and number of elements of a dataset based on its
name in the current timestep.
Type is one of the following values:
- \c H5_FLOAT64_T (for \c h5_float64_t)
- \c H5_FLOAT32_T (for \c h5_float32_t)
- \c H5_INT64_T (for \c h5_int64_t)
- \c H5_INT32_T (for \c h5_int32_t)
\return \c H5_SUCCESS on success
\return \c H5_FAILURE on error
\see H5PartHasDataset()
\see H5PartGetDatasetInfo()
*/
static inline h5_err_t
H5PartGetDatasetInfoByName (
const h5_file_t f, ///< [in] file handle
const char* const name, ///< [in] name of dataset
h5_int64_t* type, ///< [out] type of data in dataset
h5_size_t* nelems ///< [out] number of elements
) {
H5_API_ENTER (h5_int64_t,
"f=%p, "
"name='%s', "
"type=%p, nelems=%p",
(h5_file_p)f,
name,
type, nelems);
H5_API_RETURN (h5u_get_dataset_info_by_name (
f, name, type, nelems));
}
/**
This function returns the number of particles in this processor's view,
......
......@@ -235,6 +235,24 @@ H5GetAttachmentInfoByIdx (
f, idx, fname, len_fname, fsize));
}
/**
Query whether a particular attachment exists in the file.
\return true (value \c >0) if attachment exists
\return false (\c 0) if attachment does not exist
\return \c H5_FAILURE on error
*/
static inline h5_err_t
H5HasAttachment (
const h5_file_t f, ///< [in] file handle.
const char* const fname ///< [in] original file name.
) {
H5_API_ENTER (h5_err_t,
"f=%p, name='%s'",
(h5_file_p)f, fname);
H5_API_RETURN (h5_has_attachment (f, fname));
}
/**
Get size of attached file with name \c fname.
......
......@@ -26,6 +26,14 @@ h5_err_t
h5_add_attachment (
const h5_file_t, const char* const);
h5_err_t
h5_has_attachments (
const h5_file_t);
h5_err_t
h5_has_attachment (
const h5_file_t, const char* const);
h5_ssize_t
h5_get_num_attachments (
const h5_file_t);
......
......@@ -142,6 +142,17 @@ typedef struct h5_glb_idxlist {
h5_glb_idx_t items[1];
} h5_glb_idxlist_t;
enum h5_iterators {
step_iterator
};
struct h5_iterator;
typedef struct {
enum h5_iterators it_type;
h5_file_t file;
h5_int64_t (*iter)(struct h5_iterator*);
} h5_iterator_t;
struct h5_idxmap;
typedef struct h5_idxmap h5_idxmap_t;
......
......@@ -75,9 +75,15 @@ h5u_get_dataset_info (
const h5_id_t, char* const, const h5_size_t, h5_int64_t* const,
h5_size_t* const);
h5_err_t
h5u_has_dataset (
const h5_file_t fh,
const char* const name
);
h5_err_t
h5u_get_dataset_info_by_name (
const h5_file_p f,
const h5_file_t f,
const char* const dataset_name,
h5_int64_t* const type,
h5_size_t* const nelem
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment