summaryrefslogtreecommitdiffstats
path: root/hl/src
diff options
context:
space:
mode:
Diffstat (limited to 'hl/src')
-rw-r--r--hl/src/H5DOpublic.h199
-rw-r--r--hl/src/H5DSpublic.h362
-rw-r--r--hl/src/H5IMpublic.h293
-rw-r--r--hl/src/H5LDpublic.h141
-rw-r--r--hl/src/H5LTanalyze.c154
-rw-r--r--hl/src/H5LTanalyze.l8
-rw-r--r--hl/src/H5LTparse.c897
-rw-r--r--hl/src/H5LTparse.h15
-rw-r--r--hl/src/H5LTpublic.h1398
-rw-r--r--hl/src/H5PTpublic.h416
-rw-r--r--hl/src/H5TBpublic.h539
11 files changed, 3941 insertions, 481 deletions
diff --git a/hl/src/H5DOpublic.h b/hl/src/H5DOpublic.h
index 88616a3..99358b3 100644
--- a/hl/src/H5DOpublic.h
+++ b/hl/src/H5DOpublic.h
@@ -18,6 +18,29 @@
extern "C" {
#endif
+/**\defgroup H5DO Optimizations
+ *
+ * <em>Bypassing default HDF5 behavior in order to optimize for specific
+ * use cases (H5DO)</em>
+ *
+ * HDF5 functions described is this section are implemented in the HDF5 High-level
+ * library as optimized functions. These functions generally require careful setup
+ * and testing as they enable an application to bypass portions of the HDF5
+ * library’s I/O pipeline for performance purposes.
+ *
+ * These functions are distributed in the standard HDF5 distribution and are
+ * available any time the HDF5 High-level library is available.
+ *
+ * - \ref H5DOappend
+ * \n Appends data to a dataset along a specified dimension.
+ * - \ref H5DOread_chunk
+ * \n Reads a raw data chunk directly from a dataset in a file into a buffer (DEPRECATED)
+ * - \ref H5DOwrite_chunk
+ * \n Writes a raw data chunk from a buffer directly to a dataset in a file (DEPRECATED)
+ * .
+ *
+ */
+
/*-------------------------------------------------------------------------
*
* "Optimized dataset" routines.
@@ -25,6 +48,48 @@ extern "C" {
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DO
+ *
+ * \brief Appends data to a dataset along a specified dimension.
+ *
+ * \param[in] dset_id Dataset identifier
+ * \param[in] dxpl_id Dataset transfer property list identifier
+ * \param[in] axis Dataset Dimension (0-based) for the append
+ * \param[in] extension Number of elements to append for the
+ * axis-th dimension
+ * \param[in] memtype The memory datatype identifier
+ * \param[in] buf Buffer with data for the append
+ *
+ * \return \herr_t
+ *
+ * \details The H5DOappend() routine extends a dataset by \p extension
+ * number of elements along a dimension specified by a
+ * dimension \p axis and writes \p buf of elements to the
+ * dataset. Dimension \p axis is 0-based. Elements’ type
+ * is described by \p memtype.
+ *
+ * This routine combines calling H5Dset_extent(),
+ * H5Sselect_hyperslab(), and H5Dwrite() into a single routine
+ * that simplifies application development for the common case
+ * of appending elements to an existing dataset.
+ *
+ * For a multi-dimensional dataset, appending to one dimension
+ * will write a contiguous hyperslab over the other dimensions.
+ * For example, if a 3-D dataset has dimension sizes (3, 5, 8),
+ * extending the 0th dimension (currently of size 3) by 3 will
+ * append 3*5*8 = 120 elements (which must be pointed to by the
+ * \p buffer parameter) to the dataset, making its final
+ * dimension sizes (6, 5, 8).
+ *
+ * If a dataset has more than one unlimited dimension, any of
+ * those dimensions may be appended to, although only along
+ * one dimension per call to H5DOappend().
+ *
+ * \since 1.10.0
+ *
+ */
H5_HLDLL herr_t H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension, hid_t memtype,
const void *buf);
@@ -35,8 +100,142 @@ H5_HLDLL herr_t H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t e
#ifndef H5_NO_DEPRECATED_SYMBOLS
/* Compatibility wrappers for functionality moved to H5D */
+
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DO
+ *
+ * \brief Writes a raw data chunk from a buffer directly to a dataset in a file.
+ *
+ * \param[in] dset_id Identifier for the dataset to write to
+ * \param[in] dxpl_id Transfer property list identifier for
+ * this I/O operation
+ * \param[in] filters Mask for identifying the filters in use
+ * \param[in] offset Logical position of the chunk’s first element
+ * in the dataspace
+ * \param[in] data_size Size of the actual data to be written in bytes
+ * \param[in] buf Buffer containing data to be written to the chunk
+ *
+ * \return \herr_t
+ *
+ * \deprecated This function was deprecated in favor of the function
+ * H5Dwrite_chunk() of HDF5-1.10.3.
+ * The functionality of H5DOwrite_chunk() was moved
+ * to H5Dwrite_chunk().
+ * \deprecated For compatibility, this API call has been left as a stub which
+ * simply calls H5Dwrite_chunk(). New code should use H5Dwrite_chunk().
+ *
+ * \details The H5DOwrite_chunk() writes a raw data chunk as specified by its
+ * logical \p offset in a chunked dataset \p dset_id from the application
+ * memory buffer \p buf to the dataset in the file. Typically, the data
+ * in \p buf is preprocessed in memory by a custom transformation, such as
+ * compression. The chunk will bypass the library’s internal data
+ * transfer pipeline, including filters, and will be written directly to the file.
+ *
+ * \p dxpl_id is a data transfer property list identifier.
+ *
+ * \p filters is a mask providing a record of which filters are used
+ * with the chunk. The default value of the mask is zero (\c 0),
+ * indicating that all enabled filters are applied. A filter is skipped
+ * if the bit corresponding to the filter’s position in the pipeline
+ * (<tt>0 ≤ position < 32</tt>) is turned on. This mask is saved
+ * with the chunk in the file.
+ *
+ * \p offset is an array specifying the logical position of the first
+ * element of the chunk in the dataset’s dataspace. The length of the
+ * offset array must equal the number of dimensions, or rank, of the
+ * dataspace. The values in \p offset must not exceed the dimension limits
+ * and must specify a point that falls on a dataset chunk boundary.
+ *
+ * \p data_size is the size in bytes of the chunk, representing the number of
+ * bytes to be read from the buffer \p buf. If the data chunk has been
+ * precompressed, \p data_size should be the size of the compressed data.
+ *
+ * \p buf is the memory buffer containing data to be written to the chunk in the file.
+ *
+ * \attention Exercise caution when using H5DOread_chunk() and H5DOwrite_chunk(),
+ * as they read and write data chunks directly in a file.
+ * H5DOwrite_chunk() bypasses hyperslab selection, the conversion of data
+ * from one datatype to another, and the filter pipeline to write the chunk.
+ * Developers should have experience with these processes before
+ * using this function. Please see
+ * <a href="https://portal.hdfgroup.org/display/HDF5/Using+the+Direct+Chunk+Write+Function">
+ * Using the Direct Chunk Write Function</a>
+ * for more information.
+ *
+ * \note H5DOread_chunk() and H5DOwrite_chunk() are not
+ * supported under parallel and do not support variable length types.
+ *
+ * \par Example
+ * The following code illustrates the use of H5DOwrite_chunk to write
+ * an entire dataset, chunk by chunk:
+ * \snippet H5DO_examples.c H5DOwrite
+ *
+ * \version 1.10.3 Function deprecated in favor of H5Dwrite_chunk.
+ *
+ * \since 1.8.11
+ */
H5_HLDLL herr_t H5DOwrite_chunk(hid_t dset_id, hid_t dxpl_id, uint32_t filters, const hsize_t *offset,
size_t data_size, const void *buf);
+
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DO
+ *
+ * \brief Reads a raw data chunk directly from a dataset in a file into a buffer.
+ *
+ * \param[in] dset_id Identifier for the dataset to be read
+ * \param[in] dxpl_id Transfer property list identifier for
+ * this I/O operation
+ * \param[in] offset Logical position of the chunk’s first
+ element in the dataspace
+ * \param[in,out] filters Mask for identifying the filters used
+ * with the chunk
+ * \param[in] buf Buffer containing the chunk read from
+ * the dataset
+ *
+ * \return \herr_t
+ *
+ * \deprecated This function was deprecated in favor of the function
+ * H5Dread_chunk() as of HDF5-1.10.3.
+ * In HDF5 1.10.3, the functionality of H5DOread_chunk()
+ * was moved to H5Dread_chunk().
+ * \deprecated For compatibility, this API call has been left as a stub which
+ * simply calls H5Dread_chunk(). New code should use H5Dread_chunk().
+ *
+ * \details The H5DOread_chunk() reads a raw data chunk as specified
+ * by its logical \p offset in a chunked dataset \p dset_id
+ * from the dataset in the file into the application memory
+ * buffer \p buf. The data in \p buf is read directly from the file
+ * bypassing the library’s internal data transfer pipeline,
+ * including filters.
+ *
+ * \p dxpl_id is a data transfer property list identifier.
+ *
+ * The mask \p filters indicates which filters are used with the
+ * chunk when written. A zero value indicates that all enabled filters
+ * are applied on the chunk. A filter is skipped if the bit corresponding
+ * to the filter’s position in the pipeline
+ * (<tt>0 ≤ position < 32</tt>) is turned on.
+ *
+ * \p offset is an array specifying the logical position of the first
+ * element of the chunk in the dataset’s dataspace. The length of the
+ * offset array must equal the number of dimensions, or rank, of the
+ * dataspace. The values in \p offset must not exceed the dimension
+ * limits and must specify a point that falls on a dataset chunk boundary.
+ *
+ * \p buf is the memory buffer containing the chunk read from the dataset
+ * in the file.
+ *
+ * \par Example
+ * The following code illustrates the use of H5DOread_chunk()
+ * to read a chunk from a dataset:
+ * \snippet H5DO_examples.c H5DOread
+ *
+ * \version 1.10.3 Function deprecated in favor of H5Dread_chunk.
+ *
+ * \since 1.10.2, 1.8.19
+ */
H5_HLDLL herr_t H5DOread_chunk(hid_t dset_id, hid_t dxpl_id, const hsize_t *offset, uint32_t *filters /*out*/,
void *buf /*out*/);
diff --git a/hl/src/H5DSpublic.h b/hl/src/H5DSpublic.h
index 979a173..1dd0781 100644
--- a/hl/src/H5DSpublic.h
+++ b/hl/src/H5DSpublic.h
@@ -19,33 +19,393 @@
#define REFERENCE_LIST "REFERENCE_LIST"
#define DIMENSION_LABELS "DIMENSION_LABELS"
+/**
+ * \brief Prototype for H5DSiterate_scales() operator
+ *
+ */
+//! <!-- [H5DS_iterate_t_snip] -->
typedef herr_t (*H5DS_iterate_t)(hid_t dset, unsigned dim, hid_t scale, void *visitor_data);
+//! <!-- [H5DS_iterate_t_snip] -->
#ifdef __cplusplus
extern "C" {
#endif
+/**\defgroup H5DS Dimension Scales
+ *
+ * <em>Creating and manipulating HDF5 datasets that are associated with
+ * the dimension of another HDF5 dataset (H5DS)</em>
+ *
+ * \note \Bold{Programming hints:}
+ * \note To use any of these functions or subroutines,
+ * you must first include the relevant include file (C) or
+ * module (Fortran) in your application.
+ * \note The following line includes the HDF5 Dimension Scale package,
+ * H5DS, in C applications:
+ * \code #include "hdf5_hl.h" \endcode
+ * \note This line includes the H5DS module in Fortran applications:
+ * \code use h5ds \endcode
+ *
+ * - \ref H5DSwith_new_ref
+ * \n Determines if new references are used with dimension scales.
+ * - \ref H5DSattach_scale
+ * \n Attach dimension scale dsid to dimension idx of dataset did.
+ * - \ref H5DSdetach_scale
+ * \n Detach dimension scale dsid from the dimension idx of Dataset did.
+ * - \ref H5DSget_label
+ * \n Read the label for dimension idx of did into buffer label.
+ * - \ref H5DSget_num_scales
+ * \n Determines how many Dimension Scales are attached
+ * to dimension idx of did.
+ * - \ref H5DSget_scale_name
+ * \n Retrieves name of scale did into buffer name.
+ * - \ref H5DSis_attached
+ * \n Report if dimension scale dsid is currently attached
+ * to dimension idx of dataset did.
+ * - \ref H5DSis_scale
+ * \n Determines whether dset is a Dimension Scale.
+ * - \ref H5DSiterate_scales
+ * \n Iterates the operation visitor through the scales
+ * attached to dimension dim.
+ * - \ref H5DSset_label
+ * \n Set label for the dimension idx of did to the value label.
+ * - \ref H5DSset_scale
+ * \n Convert dataset dsid to a dimension scale,
+ * with optional name, dimname.
+ * .
+ *
+ */
+
+/* THIS IS A NEW ROUTINE NOT ON OLD PORTAL */
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Determines if new references are used with dimension scales.
+ *
+ * \param[in] obj_id Object identifier
+ * \param[out] with_new_ref New references are used or not
+ *
+ * \return \herr_t
+ *
+ * \details H5DSwith_new_ref() takes any object identifier and checks
+ * if new references are used for dimension scales. Currently,
+ * new references are used when non-native VOL connector is
+ * used or when H5_DIMENSION_SCALES_WITH_NEW_REF is set up
+ * via configure option.
+ *
+ */
H5_HLDLL herr_t H5DSwith_new_ref(hid_t obj_id, hbool_t *with_new_ref);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Attach dimension scale \p dsid to dimension \p idx of
+ * dataset did.
+ *
+ * \param[in] did The dataset
+ * \param[in] dsid The scale to be attached
+ * \param[in] idx The dimension of \p did that \p dsid is associated with
+ *
+ * \return \herr_t
+ *
+ * \details Define Dimension Scale \p dsid to be associated with
+ * dimension \p idx of dataset \p did.
+ *
+ * Entries are created in the #DIMENSION_LIST and
+ * #REFERENCE_LIST attributes, as defined in section 4.2 of
+ * <a href="https://support.hdfgroup.org/HDF5/doc/HL/H5DS_Spec.pdf">
+ * HDF5 Dimension Scale Specification</a>.
+ *
+ * Fails if:
+ * - Bad arguments
+ * - If \p dsid is not a Dimension Scale
+ * - If \p did is a Dimension Scale
+ * (A Dimension Scale cannot have scales.)
+ *
+ * \note The Dimension Scale \p dsid can be attached to the
+ * same dimension more than once, which has no effect.
+ */
H5_HLDLL herr_t H5DSattach_scale(hid_t did, hid_t dsid, unsigned int idx);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Detach dimension scale \p dsid from the dimension \p idx of dataset \p did.
+ *
+ * \param[in] did The dataset
+ * \param[in] dsid The scale to be detached
+ * \param[in] idx The dimension of \p did to detach
+ *
+ * \return \herr_t
+ *
+ * \details If possible, deletes association of Dimension Scale \p dsid with
+ * dimension \p idx of dataset \p did. This deletes the entries in the
+ * #DIMENSION_LIST and #REFERENCE_LIST attributes,
+ * as defined in section 4.2 of
+ * <a href="https://support.hdfgroup.org/HDF5/doc/HL/H5DS_Spec.pdf">
+ * HDF5 Dimension Scale Specification</a>.
+ *
+ * Fails if:
+ * - Bad arguments
+ * - The dataset \p did or \p dsid do not exist
+ * - The \p dsid is not a Dimension Scale
+ * - \p dsid is not attached to \p did
+ * .
+ *
+ * \note A scale may be associated with more than dimension of the
+ * same dataset. If so, the detach operation only deletes one
+ * of the associations, for \p did.
+ *
+ */
H5_HLDLL herr_t H5DSdetach_scale(hid_t did, hid_t dsid, unsigned int idx);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Convert dataset \p dsid to a dimension scale,
+ * with optional name, \p dimname.
+ *
+ * \param[in] dsid The dataset to be made a Dimemsion Scale
+ * \param[in] dimname The dimension name (optional), NULL if the
+ * dimension has no name.
+ *
+ * \return \herr_t
+ *
+ * \details The dataset \p dsid is converted to a Dimension Scale dataset,
+ * as defined above. Creates the CLASS attribute, set to the value
+ * "DIMENSION_SCALE" and an empty #REFERENCE_LIST attribute,
+ * as described in
+ * <a href="https://support.hdfgroup.org/HDF5/doc/HL/H5DS_Spec.pdf">
+ * HDF5 Dimension Scale Specification</a>.
+ * (PDF, see section 4.2).
+ *
+ * If \p dimname is specified, then an attribute called NAME
+ * is created, with the value \p dimname.
+ *
+ * Fails if:
+ * - Bad arguments
+ * - If \p dsid is already a scale
+ * - If \p dsid is a dataset which already has dimension scales
+ * .
+ *
+ * If the dataset was created with the Table, Image, or Palette interface [9],
+ * it is not recommended to convert to a Dimension Scale.
+ * (These Datasets will have a CLASS Table, Image, or Palette.)
+ *
+ * \todo what is [9] after Palette interface?
+ */
H5_HLDLL herr_t H5DSset_scale(hid_t dsid, const char *dimname);
-H5_HLDLL int H5DSget_num_scales(hid_t did, unsigned int dim);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Determines how many Dimension Scales are attached
+ * to dimension \p idx of \p did.
+ *
+ * \param[in] did The dataset to query
+ * \param[in] idx The dimension of \p did to query
+ *
+ * \return Returns the number of Dimension Scales associated
+ * with \p did, if successful, otherwise returns a
+ * negative value.
+ *
+ * \details H5DSget_num_scales() determines how many Dimension
+ * Scales are attached to dimension \p idx of
+ * dataset \p did.
+ *
+ */
+H5_HLDLL int H5DSget_num_scales(hid_t did, unsigned int idx);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Set label for the dimension \p idx of \p did
+ * to the value \p label.
+ *
+ * \param[in] did The dataset
+ * \param[in] idx The dimension
+ * \param[in] label The label
+ *
+ * \return \herr_t
+ *
+ * \details Sets the #DIMENSION_LABELS for dimension \p idx of
+ * dataset \p did. If the dimension had a label,
+ * the new value replaces the old.
+ *
+ * Fails if:
+ * - Bad arguments
+ * .
+ */
H5_HLDLL herr_t H5DSset_label(hid_t did, unsigned int idx, const char *label);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Read the label for dimension \p idx of \p did into buffer \p label.
+ *
+ * \param[in] did The dataset
+ * \param[in] idx The dimension
+ * \param[out] label The label
+ * \param[in] size The length of the label buffer
+ *
+ * \return Upon success, size of label or zero if no label found.
+ * Negative if fail.
+ *
+ * \details Returns the value of the #DIMENSION_LABELS for
+ * dimension \p idx of dataset \p did, if set.
+ * Up to \p size characters of the name are copied into
+ * the buffer \p label. If the label is longer than
+ * \p size, it will be truncated to fit. The parameter
+ * \p size is set to the size of the returned \p label.
+ *
+ * If \p did has no label, the return value of
+ * \p label is NULL.
+ *
+ * Fails if:
+ * - Bad arguments
+ * .
+ */
H5_HLDLL ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Retrieves name of scale \p did into buffer \p name.
+ *
+ * \param[in] did Dimension scale identifier
+ * \param[out] name Buffer to contain the returned name
+ * \param[in] size Size in bytes, of the \p name buffer
+ *
+ * \return Upon success, the length of the scale name or zero if no name found.
+ * Negative if fail.
+ *
+ * \details H5DSget_scale_name() retrieves the name attribute
+ * for scale \p did.
+ *
+ * Up to \p size characters of the scale name are returned
+ * in \p name; additional characters, if any, are not returned
+ * to the user application.
+ *
+ * If the length of the name, which determines the required value of
+ * \p size, is unknown, a preliminary H5DSget_scale_name() call can
+ * be made by setting \p name to NULL. The return value of this call
+ * will be the size of the scale name; that value plus one (1) can then
+ * be assigned to \p size for a second H5DSget_scale_name() call,
+ * which will retrieve the actual name. (The value passed in with the
+ * parameter \p size must be one greater than size in bytes of the actual
+ * name in order to accommodate the null terminator;
+ * if \p size is set to the exact size of the name, the last byte
+ * passed back will contain the null terminator and the last character
+ * will be missing from the name passed back to the calling application.)
+ */
H5_HLDLL ssize_t H5DSget_scale_name(hid_t did, char *name, size_t size);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Determines whether \p did is a Dimension Scale.
+ *
+ * \param[in] did The dataset to query
+ *
+ * \return \htri_t
+ *
+ * \details H5DSis_scale() determines if \p did is a Dimension Scale,
+ * i.e., has class="DIMENSION_SCALE").
+ *
+ */
H5_HLDLL htri_t H5DSis_scale(hid_t did);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Iterates the operation visitor through the scales
+ * attached to dimension \p dim.
+ *
+ * \param[in] did The dataset
+ * \param[in] dim The dimension of dataset \p did
+ * \param[in,out] idx Input the index to start iterating,
+ * output the next index to visit.
+ * If NULL, start at the first position.
+ * \param[in] visitor The visitor function
+ * \param[in] visitor_data Arbitrary data to pass to the
+ * visitor function
+ *
+ * \return Returns the return value of the last operator if it was
+ * non-zero, or zero if all scales were processed.
+ *
+ * \details H5DSiterate_scales() iterates over the scales attached to
+ * dimension \p dim of dataset \p did. For each scale in the
+ * list, the \p visitor_data and some additional information,
+ * specified below, are passed to the \p visitor function.
+ * The iteration begins with the \p idx object in the
+ * group and the next element to be processed by the operator
+ * is returned in \p idx. If \p idx is NULL, then the
+ * iterator starts at the first group member; since no
+ * stopping point is returned in this case,
+ * the iterator cannot be restarted if one of the calls
+ * to its operator returns non-zero.
+ *
+ * The prototype for \ref H5DS_iterate_t is:
+ * \snippet this H5DS_iterate_t_snip
+ *
+ * The operation receives the Dimension Scale dataset
+ * identifier, \p scale, and the pointer to the operator
+ * data passed in to H5DSiterate_scales(), \p visitor_data.
+ *
+ * The return values from an operator are:
+ *
+ * - Zero causes the iterator to continue, returning zero
+ * when all group members have been processed.
+ * - Positive causes the iterator to immediately return that
+ * positive value, indicating short-circuit success.
+ * The iterator can be restarted at the next group member.
+ * - Negative causes the iterator to immediately return
+ * that value, indicating failure. The iterator can be
+ * restarted at the next group member.
+ * .
+ *
+ * H5DSiterate_scales() assumes that the scales of the
+ * dimension identified by \p dim remain unchanged through
+ * the iteration. If the membership changes during the iteration,
+ * the function's behavior is undefined.
+ */
H5_HLDLL herr_t H5DSiterate_scales(hid_t did, unsigned int dim, int *idx, H5DS_iterate_t visitor,
void *visitor_data);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5DS
+ *
+ * \brief Report if dimension scale \p dsid is currently attached to
+ * dimension \p idx of dataset \p did.
+ *
+ * \param[in] did The dataset
+ * \param[in] dsid The scale to be attached
+ * \param[in] idx The dimension of \p did that \p dsid is associated with
+ *
+ * \return \htri_t
+ *
+ * \details Report if dimension scale \p dsid is currently attached to
+ * dimension \p idx of dataset \p did.
+ *
+ * Fails if:
+ * - Bad arguments
+ * - If \p dsid is not a Dimension Scale
+ * - The \p dsid is not a Dimension Scale
+ * - If \p did is a Dimension Scale (A Dimension Scale cannot have scales.)
+ * .
+ *
+ */
H5_HLDLL htri_t H5DSis_attached(hid_t did, hid_t dsid, unsigned int idx);
#ifdef __cplusplus
diff --git a/hl/src/H5IMpublic.h b/hl/src/H5IMpublic.h
index 2843942..2129509 100644
--- a/hl/src/H5IMpublic.h
+++ b/hl/src/H5IMpublic.h
@@ -18,33 +18,326 @@
extern "C" {
#endif
+/**\defgroup H5IM Images
+ *
+ * <em>Creating and manipulating HDF5 datasets intended to be
+ * interpreted as images (H5IM)</em>
+ *
+ * The specification for the Images API is presented in another
+ * document: \ref IMG
+ * This version of the API is primarily concerned with two dimensional raster
+ * data similar to HDF4 Raster Images.
+ * The HDF5 Images API uses the \ref H5LT HDF5 API.
+ *
+ * \note \Bold{Programming hints:}
+ * \note To use any of these functions or subroutines,
+ * you must first include the relevant include file (C) or
+ * module (Fortran) in your application.
+ * \note The following line includes the HDF5 Images package, H5IM,
+ * in C applications:
+ * \code #include "hdf5_hl.h" \endcode
+ * \note This line includes the H5IM module in Fortran applications:
+ * \code use h5im \endcode
+ *
+ * - \ref H5IMget_image_info
+ * \n Gets information about an image dataset (dimensions,
+ * interlace mode and number of associated palettes).
+ * - \ref H5IMget_npalettes
+ * \n Gets the number of palettes associated to an image.
+ * - \ref H5IMget_palette
+ * \n Gets the palette dataset.
+ * - \ref H5IMget_palette_info
+ * \n Gets information about a palette dataset (dimensions).
+ * - \ref H5IMis_image
+ * \n Inquires if a dataset is an image
+ * - \ref H5IMis_palette
+ * \n Inquires if a dataset is a palette.
+ * - \ref H5IMlink_palette
+ * \n Attaches a palette to an image.
+ * - \ref H5IMmake_image_8bit
+ * \n Creates and writes an image.
+ * - \ref H5IMmake_image_24bit
+ * \n Creates and writes a true color image.
+ * - \ref H5IMmake_palette
+ * \n Creates and writes a palette.
+ * - \ref H5IMread_image
+ * \n Reads image data from disk.
+ * - \ref H5IMunlink_palette
+ * \n Dettaches a palette from an image.
+ * .
+ *
+ */
+
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Creates and writes an image.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to create
+ * \param[in] width The width of the image
+ * \param[in] height The height of the image
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5IMmake_image_8bit() creates and writes a dataset named
+ * \p dset_name attached to the file or group specified by the
+ * identifier \p loc_id. Attributes conforming to the HDF5 Image
+ * and Palette specification for an indexed image are attached to
+ * the dataset, thus identifying it as an image. The image data is
+ * of the type #H5T_NATIVE_UCHAR. An indexed image is an image in
+ * which each each pixel information storage is an index to a
+ * table palette.
+ *
+ */
H5_HLDLL herr_t H5IMmake_image_8bit(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t height,
const unsigned char *buffer);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Creates and writes a true color image.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to create
+ * \param[in] width The width of the image
+ * \param[in] height The height of the image
+ * \param[in] interlace String defining the interlace mode
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5IMmake_image_24bit() creates and writes a dataset named
+ * \p dset_name attached to the file or group specified by the
+ * identifier \p loc_id. This function defines a true color image
+ * conforming to the HDF5 Image and Palette specification.
+ * The function assumes that the image data is of the type
+ * #H5T_NATIVE_UCHAR.
+ *
+ * A true color image is an image where the pixel storage contains
+ * several color planes. In a 24 bit RGB color model, these planes
+ * are red, green and blue. In a true color image the stream of bytes
+ * can be stored in several different ways, thus defining the
+ * interlace (or interleaving) mode. The 2 most used types of interlace mode
+ * are interlace by pixel and interlace by plane. In the 24 bit RGB color
+ * model example, interlace by plane means all the red components for the
+ * entire dataset are stored first, followed by all the green components,
+ * and then by all the blue components. Interlace by pixel in this example
+ * means that for each pixel the sequence red, green, blue is defined.
+ * In this function, the interlace mode is defined in the parameter
+ * \p interlace, a string that can have the values INTERLACE_PIXEL
+ * or INTERLACE_PLANE.
+ *
+ */
H5_HLDLL herr_t H5IMmake_image_24bit(hid_t loc_id, const char *dset_name, hsize_t width, hsize_t height,
const char *interlace, const unsigned char *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Gets information about an image dataset
+ * (dimensions, interlace mode and number of associated palettes).
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset
+ * \param[out] width The width of the image
+ * \param[out] height The height of the image
+ * \param[out] planes The number of color planes of the image
+ * \param[out] interlace The interlace mode of the image
+ * \param[out] npals The number of palettes associated to the image
+ *
+ * \return \herr_t
+ *
+ * \details H5IMget_image_info() gets information about an image
+ * named \p dset_name attached to the file or group specified
+ * by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5IMget_image_info(hid_t loc_id, const char *dset_name, hsize_t *width, hsize_t *height,
hsize_t *planes, char *interlace, hssize_t *npals);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Reads image data from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to create
+ * \param[out] buffer Buffer with data to store the image
+ *
+ * \return \herr_t
+ *
+ * \details H5IMread_image() reads a dataset named \p dset_name
+ * attached to the file or group specified by the
+ * identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5IMread_image(hid_t loc_id, const char *dset_name, unsigned char *buffer);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Creates and writes a palette.
+ *
+ * \fg_loc_id
+ * \param[in] pal_name The name of the palette
+ * \param[in] pal_dims An array of the size of the palette dimensions
+ * \param[in] pal_data Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5IMmake_palette() creates and writes a dataset
+ * named \p pal_name. Attributes conforming to the HDF5 Image and
+ * Palette specification are attached to the dataset, thus
+ * identifying it as a palette. The palette data is of the
+ * type #H5T_NATIVE_UCHAR.
+ *
+ */
H5_HLDLL herr_t H5IMmake_palette(hid_t loc_id, const char *pal_name, const hsize_t *pal_dims,
const unsigned char *pal_data);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Attaches a palette to an image.
+ *
+ * \fg_loc_id
+ * \param[in] image_name The name of the dataset to attach the palette to
+ * \param[in] pal_name The name of the palette
+ *
+ * \return \herr_t
+ *
+ * \details H5IMlink_palette() attaches a palette named \p pal_name
+ * to an image specified by \p image_name. The image dataset
+ * may or not already have an attached palette. If it has,
+ * the array of palette references is extended to hold the reference
+ * to the new palette.
+ *
+ */
H5_HLDLL herr_t H5IMlink_palette(hid_t loc_id, const char *image_name, const char *pal_name);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Dettaches a palette from an image.
+ *
+ * \fg_loc_id
+ * \param[in] image_name The name of the image dataset
+ * \param[in] pal_name The name of the palette
+ *
+ * \return \herr_t
+ *
+ * \details H5IMunlink_palette() dettaches a palette from an image
+ * specified by \p image_name.
+ *
+ */
H5_HLDLL herr_t H5IMunlink_palette(hid_t loc_id, const char *image_name, const char *pal_name);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Gets the number of palettes associated to an image.
+ *
+ * \fg_loc_id
+ * \param[in] image_name The name of the image dataset
+ * \param[out] npals The number of palettes
+ *
+ * \return \herr_t
+ *
+ * \details H5IMget_npalettes() gets the number of palettes associated to
+ * an image specified by \p image_name.
+ *
+ */
H5_HLDLL herr_t H5IMget_npalettes(hid_t loc_id, const char *image_name, hssize_t *npals);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Gets information about a palette dataset (dimensions).
+ *
+ * \fg_loc_id
+ * \param[in] image_name The name of the image dataset
+ * \param[in] pal_number The zero based index that identifies
+ * the palette
+ * \param[out] pal_dims The dimensions of the palette dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5IMget_palette_info() gets the dimensions of the palette
+ * dataset identified by \p pal_number (a zero based index)
+ * associated to an image specified by \p image_name.
+ *
+ */
H5_HLDLL herr_t H5IMget_palette_info(hid_t loc_id, const char *image_name, int pal_number, hsize_t *pal_dims);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Gets the palette dataset.
+ *
+ * \fg_loc_id
+ * \param[in] image_name The name of the image dataset
+ * \param[in] pal_number The zero based index that identifies
+ * the palette
+ * \param[out] pal_data The palette dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5IMget_palette() gets the palette dataset identified
+ * by \p pal_number (a zero based index) associated to an
+ * image specified by \p image_name.
+ *
+ */
H5_HLDLL herr_t H5IMget_palette(hid_t loc_id, const char *image_name, int pal_number,
unsigned char *pal_data);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Inquires if a dataset is an image.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset
+ *
+ * \return \htri_t
+ *
+ * \details H5IMis_image() inquires if a dataset named \p dset_name,
+ * attached to the file or group specified by the identifier
+ * \p loc_id, is an image based on the HDF5 Image and Palette
+ * Specification.
+ *
+ */
H5_HLDLL herr_t H5IMis_image(hid_t loc_id, const char *dset_name);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5IM
+ *
+ * \brief Inquires if a dataset is a palette
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset
+ *
+ * \return \htri_t
+ *
+ * \details H5IMis_palette() inquires if a dataset named \p dset_name,
+ * attached to the file or group specified by the
+ * identifier \p loc_id, is a palette based on the HDF5
+ * Image and Palette Specification.
+ *
+ */
H5_HLDLL herr_t H5IMis_palette(hid_t loc_id, const char *dset_name);
#ifdef __cplusplus
diff --git a/hl/src/H5LDpublic.h b/hl/src/H5LDpublic.h
index 011b208..826da40 100644
--- a/hl/src/H5LDpublic.h
+++ b/hl/src/H5LDpublic.h
@@ -18,8 +18,149 @@
extern "C" {
#endif
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Retrieves the current dimension sizes of a dataset.
+ *
+ * \param[in] did The dataset identifier
+ * \param[out] cur_dims The current dimension sizes of the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LDget_dset_dims() retrieves the current dimension sizes
+ * for the dataset \p did through the parameter \p cur_dims.
+ * It will return failure if \p cur_dims is NULL.
+ *
+ * \note See Also:
+ * \note Dataset Watch functions (used with \ref h5watch):
+ * - H5LDget_dset_dims()
+ * - H5LDget_dset_elmts()
+ * - H5LDget_dset_type_size()
+ * .
+ *
+ * \par Example:
+ * See the example code in H5LDget_dset_elmts() for usage of this routine.
+ *
+ * \since 1.10.0
+ *
+ */
H5_HLDLL herr_t H5LDget_dset_dims(hid_t did, hsize_t *cur_dims);
+
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Returns the size in bytes of the dataset’s datatype
+ *
+ * \param[in] did The dataset identifier
+ * \param[in] fields The pointer to a comma-separated list of fields for a compound datatype
+ *
+ * \return If successful, returns the size in bytes of the
+ * dataset’s datatype. Otherwise, returns 0.
+ *
+ * \details H5LDget_dset_type_size() allows the user to find out the datatype
+ * size for the dataset associated with \p did. If the
+ * parameter \p fields is NULL, this routine just returns the size
+ * of the dataset’s datatype. If the dataset has a compound datatype
+ * and \p fields is non-NULL, this routine returns the size of the
+ * datatype(s) for the selected fields specified in \p fields.
+ * Note that ’,’ is the separator for the fields of a compound
+ * datatype while ’.’ (dot) is the separator for a nested field.
+ * Use a backslash ( \ ) to escape characters in field names that
+ * conflict with these two separators.
+ *
+ * \note See Also:
+ * \note Dataset Watch functions (used with \ref h5watch):
+ * - H5LDget_dset_dims()
+ * - H5LDget_dset_elmts()
+ * - H5LDget_dset_type_size()
+ * .
+ *
+ * \par Example:
+ * See the example code in H5LDget_dset_elmts() for usage of this routine.
+ *
+ * \since 1.10.0
+ *
+ */
H5_HLDLL size_t H5LDget_dset_type_size(hid_t did, const char *fields);
+
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Retrieves selected data from the dataset
+ *
+ * \param[in] did The dataset identifier
+ * \param[in] prev_dims The previous dimension size of the dataset
+ * \param[in] cur_dims The current dimension sizes of the dataset
+ * \param[in] fields A string containing a comma-separated list
+ * of fields for a compound datatype
+ * \param[out] buf Buffer for storing data retrieved from the
+ * dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LDget_dset_dims() retrieves selected data of the dataset
+ * \p did and stores the data in the parameter \p buf.
+ * The difference between the parameters \p prev_dims and
+ * \p cur_dims indicates the dimension sizes of the data to be
+ * selected from the dataset. Note that \p cur_dims must have
+ * at least one dimension whose size is greater than the
+ * corresponding dimension in \p prev_dims. Users can
+ * determine the size of buf by multipling the datatype
+ * size of the dataset by the number of selected elements.
+ *
+ * If the parameter \p fields is NULL, this routine returns
+ * data for the selected elements of the dataset. If \p fields
+ * is not NULL and the dataset has a compound datatype, \p fields
+ * is a string containing a comma-separated list of fields.
+ * Each name in \p fields specifies a field in the compound
+ * datatype, and this routine returns data of the selected fields
+ * for the dataset's selected elements. Note that ’,’ is the
+ * separator for the fields of a compound datatype while
+ * ’.’ is the separator for a nested field. Use backslash to
+ * escape characters in field names that conflict with these
+ * two separators.
+ *
+ * \note See Also:
+ * \note Dataset Watch functions (used with \ref h5watch):
+ * - H5LDget_dset_dims()
+ * - H5LDget_dset_elmts()
+ * - H5LDget_dset_type_size()
+ * .
+ *
+ * \par Examples:
+ *
+ * For the first example, \c DSET1 is a two-dimensional chunked dataset with atomic type defined below:
+ * \snippet H5LDget_dset_elmts.c first_declare
+ *
+ * The following coding sample illustrates the reading of
+ * data elements appended to the dataset \c DSET1:
+ * \snippet H5LDget_dset_elmts.c first_reading
+ *
+ * The output buffer will contain data elements selected from
+ * \c DSET1 as follows:
+ * \snippet H5LDget_dset_elmts.c first_output
+ *
+ * For the second example, DSET2 is a one-dimensional chunked dataset
+ * with compound type defined below:
+ * \snippet H5LDget_dset_elmts.c second_declare
+ *
+ * The following coding sample illustrates the reading of data elements
+ * appended to the dataset \c DSET2 with compound datatype.
+ * This example selects only 2 fields: the fourth field \c d and a
+ * subfield of the sixth field \c s2.c:
+ * \snippet H5LDget_dset_elmts.c second_reading
+ *
+ * The output buffer will contain data for \c d and \c s2.c
+ * selected from \c DSET2 as follows:
+ * \snippet H5LDget_dset_elmts.c second_output
+ *
+ * \since 1.10.0
+ *
+ */
H5_HLDLL herr_t H5LDget_dset_elmts(hid_t did, const hsize_t *prev_dims, const hsize_t *cur_dims,
const char *fields, void *buf);
diff --git a/hl/src/H5LTanalyze.c b/hl/src/H5LTanalyze.c
index 875a37a..4928efe 100644
--- a/hl/src/H5LTanalyze.c
+++ b/hl/src/H5LTanalyze.c
@@ -28,9 +28,14 @@
#elif defined _MSC_VER
#pragma warning(push, 1)
#endif
-#line 1 "hl/src/H5LTanalyze.c"
+#line 2 "./hl/src/H5LTanalyze.c"
+/* Quiet warnings about integer type macro redifinitions on Visual Studio
+ * (MSVC doesn't define STDC_VERSION, but has inttypes.h). This is an
+ * issue that is apparently fixed in flex 2.6.5.
+ */
+#include <stdint.h>
-#line 3 "hl/src/H5LTanalyze.c"
+#line 9 "./hl/src/H5LTanalyze.c"
#define YY_INT_ALIGNED short int
@@ -888,7 +893,7 @@ int yy_flex_debug = 0;
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "hl/src/H5LTanalyze.l"
+#line 1 "./hl/src/H5LTanalyze.l"
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
@@ -906,7 +911,8 @@ char *yytext;
* If you make any changes to H5LTanalyze.l, please run bin/genparser to
* recreate the output files.
*/
-#line 21 "hl/src/H5LTanalyze.l"
+
+#line 29 "./hl/src/H5LTanalyze.l"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -930,8 +936,8 @@ static int my_yyinput(char *, int);
extern char *myinput;
extern size_t input_len;
-#line 903 "hl/src/H5LTanalyze.c"
-#line 904 "hl/src/H5LTanalyze.c"
+#line 910 "./hl/src/H5LTanalyze.c"
+#line 911 "./hl/src/H5LTanalyze.c"
#define INITIAL 0
@@ -1140,10 +1146,10 @@ YY_DECL
}
{
-#line 46 "hl/src/H5LTanalyze.l"
+#line 54 "./hl/src/H5LTanalyze.l"
-#line 1116 "hl/src/H5LTanalyze.c"
+#line 1123 "./hl/src/H5LTanalyze.c"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1202,277 +1208,277 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 48 "hl/src/H5LTanalyze.l"
+#line 56 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I8BE_TOKEN);}
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 49 "hl/src/H5LTanalyze.l"
+#line 57 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I8LE_TOKEN);}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 50 "hl/src/H5LTanalyze.l"
+#line 58 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I16BE_TOKEN);}
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 51 "hl/src/H5LTanalyze.l"
+#line 59 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I16LE_TOKEN);}
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 52 "hl/src/H5LTanalyze.l"
+#line 60 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I32BE_TOKEN);}
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 53 "hl/src/H5LTanalyze.l"
+#line 61 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I32LE_TOKEN);}
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 54 "hl/src/H5LTanalyze.l"
+#line 62 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I64BE_TOKEN);}
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 55 "hl/src/H5LTanalyze.l"
+#line 63 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_I64LE_TOKEN);}
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 57 "hl/src/H5LTanalyze.l"
+#line 65 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U8BE_TOKEN);}
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 58 "hl/src/H5LTanalyze.l"
+#line 66 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U8LE_TOKEN);}
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 59 "hl/src/H5LTanalyze.l"
+#line 67 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U16BE_TOKEN);}
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 60 "hl/src/H5LTanalyze.l"
+#line 68 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U16LE_TOKEN);}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 61 "hl/src/H5LTanalyze.l"
+#line 69 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U32BE_TOKEN);}
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 62 "hl/src/H5LTanalyze.l"
+#line 70 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U32LE_TOKEN);}
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 63 "hl/src/H5LTanalyze.l"
+#line 71 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U64BE_TOKEN);}
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 64 "hl/src/H5LTanalyze.l"
+#line 72 "./hl/src/H5LTanalyze.l"
{return hid(H5T_STD_U64LE_TOKEN);}
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 66 "hl/src/H5LTanalyze.l"
+#line 74 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_CHAR_TOKEN);}
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 67 "hl/src/H5LTanalyze.l"
+#line 75 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_SCHAR_TOKEN);}
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 68 "hl/src/H5LTanalyze.l"
+#line 76 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_UCHAR_TOKEN);}
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 69 "hl/src/H5LTanalyze.l"
+#line 77 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_SHORT_TOKEN);}
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 70 "hl/src/H5LTanalyze.l"
+#line 78 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_USHORT_TOKEN);}
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 71 "hl/src/H5LTanalyze.l"
+#line 79 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_INT_TOKEN);}
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 72 "hl/src/H5LTanalyze.l"
+#line 80 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_UINT_TOKEN);}
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 73 "hl/src/H5LTanalyze.l"
+#line 81 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_LONG_TOKEN);}
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 74 "hl/src/H5LTanalyze.l"
+#line 82 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_ULONG_TOKEN);}
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 75 "hl/src/H5LTanalyze.l"
+#line 83 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_LLONG_TOKEN);}
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 76 "hl/src/H5LTanalyze.l"
+#line 84 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_ULLONG_TOKEN);}
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 78 "hl/src/H5LTanalyze.l"
+#line 86 "./hl/src/H5LTanalyze.l"
{return hid(H5T_IEEE_F32BE_TOKEN);}
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 79 "hl/src/H5LTanalyze.l"
+#line 87 "./hl/src/H5LTanalyze.l"
{return hid(H5T_IEEE_F32LE_TOKEN);}
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 80 "hl/src/H5LTanalyze.l"
+#line 88 "./hl/src/H5LTanalyze.l"
{return hid(H5T_IEEE_F64BE_TOKEN);}
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 81 "hl/src/H5LTanalyze.l"
+#line 89 "./hl/src/H5LTanalyze.l"
{return hid(H5T_IEEE_F64LE_TOKEN);}
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 82 "hl/src/H5LTanalyze.l"
+#line 90 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_FLOAT_TOKEN);}
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 83 "hl/src/H5LTanalyze.l"
+#line 91 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_DOUBLE_TOKEN);}
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 84 "hl/src/H5LTanalyze.l"
+#line 92 "./hl/src/H5LTanalyze.l"
{return hid(H5T_NATIVE_LDOUBLE_TOKEN);}
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 86 "hl/src/H5LTanalyze.l"
+#line 94 "./hl/src/H5LTanalyze.l"
{return token(H5T_STRING_TOKEN);}
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 87 "hl/src/H5LTanalyze.l"
+#line 95 "./hl/src/H5LTanalyze.l"
{return token(STRSIZE_TOKEN);}
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 88 "hl/src/H5LTanalyze.l"
+#line 96 "./hl/src/H5LTanalyze.l"
{return token(STRPAD_TOKEN);}
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 89 "hl/src/H5LTanalyze.l"
+#line 97 "./hl/src/H5LTanalyze.l"
{return token(CSET_TOKEN);}
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 90 "hl/src/H5LTanalyze.l"
+#line 98 "./hl/src/H5LTanalyze.l"
{return token(CTYPE_TOKEN);}
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 91 "hl/src/H5LTanalyze.l"
+#line 99 "./hl/src/H5LTanalyze.l"
{return token(H5T_STR_NULLTERM_TOKEN);}
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 92 "hl/src/H5LTanalyze.l"
+#line 100 "./hl/src/H5LTanalyze.l"
{return token(H5T_STR_NULLPAD_TOKEN);}
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 93 "hl/src/H5LTanalyze.l"
+#line 101 "./hl/src/H5LTanalyze.l"
{return token(H5T_STR_SPACEPAD_TOKEN);}
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 94 "hl/src/H5LTanalyze.l"
+#line 102 "./hl/src/H5LTanalyze.l"
{return token(H5T_CSET_ASCII_TOKEN);}
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 95 "hl/src/H5LTanalyze.l"
+#line 103 "./hl/src/H5LTanalyze.l"
{return token(H5T_CSET_UTF8_TOKEN);}
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 96 "hl/src/H5LTanalyze.l"
+#line 104 "./hl/src/H5LTanalyze.l"
{return token(H5T_C_S1_TOKEN);}
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 97 "hl/src/H5LTanalyze.l"
+#line 105 "./hl/src/H5LTanalyze.l"
{return token(H5T_FORTRAN_S1_TOKEN);}
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 98 "hl/src/H5LTanalyze.l"
+#line 106 "./hl/src/H5LTanalyze.l"
{return token(H5T_VARIABLE_TOKEN);}
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 100 "hl/src/H5LTanalyze.l"
+#line 108 "./hl/src/H5LTanalyze.l"
{return token(H5T_COMPOUND_TOKEN);}
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 101 "hl/src/H5LTanalyze.l"
+#line 109 "./hl/src/H5LTanalyze.l"
{return token(H5T_ENUM_TOKEN);}
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 102 "hl/src/H5LTanalyze.l"
+#line 110 "./hl/src/H5LTanalyze.l"
{return token(H5T_ARRAY_TOKEN);}
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 103 "hl/src/H5LTanalyze.l"
+#line 111 "./hl/src/H5LTanalyze.l"
{return token(H5T_VLEN_TOKEN);}
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 105 "hl/src/H5LTanalyze.l"
+#line 113 "./hl/src/H5LTanalyze.l"
{return token(H5T_OPAQUE_TOKEN);}
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 106 "hl/src/H5LTanalyze.l"
+#line 114 "./hl/src/H5LTanalyze.l"
{return token(OPQ_SIZE_TOKEN);}
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 107 "hl/src/H5LTanalyze.l"
+#line 115 "./hl/src/H5LTanalyze.l"
{return token(OPQ_TAG_TOKEN);}
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 109 "hl/src/H5LTanalyze.l"
+#line 117 "./hl/src/H5LTanalyze.l"
{
H5LTyylval.ival = HDatoi(yytext);
return NUMBER;
@@ -1481,7 +1487,7 @@ YY_RULE_SETUP
case 56:
/* rule 56 can match eol */
YY_RULE_SETUP
-#line 114 "hl/src/H5LTanalyze.l"
+#line 122 "./hl/src/H5LTanalyze.l"
{
H5LTyylval.sval = trim_quotes(yytext);
return STRING;
@@ -1489,46 +1495,46 @@ YY_RULE_SETUP
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 119 "hl/src/H5LTanalyze.l"
+#line 127 "./hl/src/H5LTanalyze.l"
{return token('{');}
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 120 "hl/src/H5LTanalyze.l"
+#line 128 "./hl/src/H5LTanalyze.l"
{return token('}');}
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 121 "hl/src/H5LTanalyze.l"
+#line 129 "./hl/src/H5LTanalyze.l"
{return token('[');}
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 122 "hl/src/H5LTanalyze.l"
+#line 130 "./hl/src/H5LTanalyze.l"
{return token(']');}
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 123 "hl/src/H5LTanalyze.l"
+#line 131 "./hl/src/H5LTanalyze.l"
{return token(':');}
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 124 "hl/src/H5LTanalyze.l"
+#line 132 "./hl/src/H5LTanalyze.l"
{return token(';');}
YY_BREAK
case 63:
/* rule 63 can match eol */
YY_RULE_SETUP
-#line 125 "hl/src/H5LTanalyze.l"
+#line 133 "./hl/src/H5LTanalyze.l"
;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 127 "hl/src/H5LTanalyze.l"
+#line 135 "./hl/src/H5LTanalyze.l"
ECHO;
YY_BREAK
-#line 1501 "hl/src/H5LTanalyze.c"
+#line 1508 "./hl/src/H5LTanalyze.c"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -2533,7 +2539,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 127 "hl/src/H5LTanalyze.l"
+#line 135 "./hl/src/H5LTanalyze.l"
/* Allocate a copy of `quoted` with the double quote character at
diff --git a/hl/src/H5LTanalyze.l b/hl/src/H5LTanalyze.l
index 5006612..fd014a4 100644
--- a/hl/src/H5LTanalyze.l
+++ b/hl/src/H5LTanalyze.l
@@ -17,6 +17,14 @@
* recreate the output files.
*/
+%top{
+/* Quiet warnings about integer type macro redifinitions on Visual Studio
+ * (MSVC doesn't define STDC_VERSION, but has inttypes.h). This is an
+ * issue that is apparently fixed in flex 2.6.5.
+ */
+#include <stdint.h>
+}
+
%{
#include <assert.h>
#include <stdlib.h>
diff --git a/hl/src/H5LTparse.c b/hl/src/H5LTparse.c
index 7f552d8..cb1d480 100644
--- a/hl/src/H5LTparse.c
+++ b/hl/src/H5LTparse.c
@@ -28,11 +28,12 @@
#elif defined _MSC_VER
#pragma warning(push, 1)
#endif
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 3.5.1. */
/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -70,11 +71,14 @@
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
+/* Undocumented macros, especially those whose name start with YY_,
+ are private implementation details. Do not rely on them. */
+
/* Identify Bison output. */
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "3.5.1"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -95,12 +99,11 @@
#define yyerror H5LTyyerror
#define yydebug H5LTyydebug
#define yynerrs H5LTyynerrs
-
#define yylval H5LTyylval
#define yychar H5LTyychar
-/* Copy the first part of user declarations. */
-#line 20 "hl/src/H5LTparse.y" /* yacc.c:339 */
+/* First part of user prologue. */
+#line 20 "./hl/src/H5LTparse.y"
#include <stdio.h>
#include <string.h>
@@ -150,13 +153,26 @@ static hbool_t is_enum_memb = 0; /*flag to lexer for enum member*/
static char* enum_memb_symbol; /*enum member symbol string*/
-#line 124 "hl/src/H5LTparse.c" /* yacc.c:339 */
+#line 127 "./hl/src/H5LTparse.c"
+# ifndef YY_CAST
+# ifdef __cplusplus
+# define YY_CAST(Type, Val) static_cast<Type> (Val)
+# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
+# else
+# define YY_CAST(Type, Val) ((Type) (Val))
+# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
+# endif
+# endif
# ifndef YY_NULLPTR
-# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
+# if defined __cplusplus
+# if 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
# else
-# define YY_NULLPTR 0
+# define YY_NULLPTR ((void*)0)
# endif
# endif
@@ -168,8 +184,8 @@ static char* enum_memb_symbol; /*enum member symbol string*/
# define YYERROR_VERBOSE 0
#endif
-/* In a future release of Bison, this section will be replaced
- by #include "H5LTparse.h". */
+/* Use api.header.include to #include this header
+ instead of duplicating it here. */
#ifndef YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
# define YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
/* Debug traces. */
@@ -246,18 +262,17 @@ extern int H5LTyydebug;
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
union YYSTYPE
{
-#line 69 "hl/src/H5LTparse.y" /* yacc.c:355 */
+#line 69 "./hl/src/H5LTparse.y"
int ival; /*for integer token*/
char *sval; /*for name string*/
hid_t hid; /*for hid_t token*/
-#line 229 "hl/src/H5LTparse.c" /* yacc.c:355 */
-};
+#line 244 "./hl/src/H5LTparse.c"
+};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
@@ -270,36 +285,81 @@ hid_t H5LTyyparse (void);
#endif /* !YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED */
-/* Copy the second part of user declarations. */
-#line 246 "hl/src/H5LTparse.c" /* yacc.c:358 */
#ifdef short
# undef short
#endif
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
+/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
+ <limits.h> and (if available) <stdint.h> are included
+ so that the code can choose integer types of a good width. */
+
+#ifndef __PTRDIFF_MAX__
+# include <limits.h> /* INFRINGES ON USER NAME SPACE */
+# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
+# include <stdint.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_STDINT_H
+# endif
#endif
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
+/* Narrow types that promote to a signed type and that can represent a
+ signed or unsigned integer of at least N bits. In tables they can
+ save space and decrease cache pressure. Promoting to a signed type
+ helps avoid bugs in integer arithmetic. */
+
+#ifdef __INT_LEAST8_MAX__
+typedef __INT_LEAST8_TYPE__ yytype_int8;
+#elif defined YY_STDINT_H
+typedef int_least8_t yytype_int8;
#else
typedef signed char yytype_int8;
#endif
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
+#ifdef __INT_LEAST16_MAX__
+typedef __INT_LEAST16_TYPE__ yytype_int16;
+#elif defined YY_STDINT_H
+typedef int_least16_t yytype_int16;
#else
-typedef unsigned short int yytype_uint16;
+typedef short yytype_int16;
#endif
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
+#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST8_TYPE__ yytype_uint8;
+#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST8_MAX <= INT_MAX)
+typedef uint_least8_t yytype_uint8;
+#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
+typedef unsigned char yytype_uint8;
#else
-typedef short int yytype_int16;
+typedef short yytype_uint8;
+#endif
+
+#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
+typedef __UINT_LEAST16_TYPE__ yytype_uint16;
+#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
+ && UINT_LEAST16_MAX <= INT_MAX)
+typedef uint_least16_t yytype_uint16;
+#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
+typedef unsigned short yytype_uint16;
+#else
+typedef int yytype_uint16;
+#endif
+
+#ifndef YYPTRDIFF_T
+# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
+# define YYPTRDIFF_T __PTRDIFF_TYPE__
+# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
+# elif defined PTRDIFF_MAX
+# ifndef ptrdiff_t
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# endif
+# define YYPTRDIFF_T ptrdiff_t
+# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
+# else
+# define YYPTRDIFF_T long
+# define YYPTRDIFF_MAXIMUM LONG_MAX
+# endif
#endif
#ifndef YYSIZE_T
@@ -307,15 +367,27 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
-# define YYSIZE_T unsigned int
+# define YYSIZE_T unsigned
# endif
#endif
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+#define YYSIZE_MAXIMUM \
+ YY_CAST (YYPTRDIFF_T, \
+ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
+ ? YYPTRDIFF_MAXIMUM \
+ : YY_CAST (YYSIZE_T, -1)))
+
+#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
+
+/* Stored state numbers (used for stacks). */
+typedef yytype_uint8 yy_state_t;
+
+/* State numbers in computations. */
+typedef int yy_state_fast_t;
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
@@ -329,30 +401,19 @@ typedef short int yytype_int16;
# endif
#endif
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__ \
- && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
- || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+#ifndef YY_ATTRIBUTE_PURE
+# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
# else
-# define YY_ATTRIBUTE(Spec) /* empty */
+# define YY_ATTRIBUTE_PURE
# endif
#endif
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
-#endif
-
#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
- && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-# define _Noreturn __declspec (noreturn)
+# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
+# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
# else
-# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# define YY_ATTRIBUTE_UNUSED
# endif
#endif
@@ -363,13 +424,13 @@ typedef short int yytype_int16;
# define YYUSE(E) /* empty */
#endif
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
@@ -382,6 +443,20 @@ typedef short int yytype_int16;
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
+#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
+# define YY_IGNORE_USELESS_CAST_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
+# define YY_IGNORE_USELESS_CAST_END \
+ _Pragma ("GCC diagnostic pop")
+#endif
+#ifndef YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_BEGIN
+# define YY_IGNORE_USELESS_CAST_END
+#endif
+
+
+#define YY_ASSERT(E) ((void) (0 && (E)))
#if ! defined yyoverflow || YYERROR_VERBOSE
@@ -458,17 +533,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
/* A type that is properly aligned for any stack member. */
union yyalloc
{
- yytype_int16 yyss_alloc;
+ yy_state_t yyss_alloc;
YYSTYPE yyvs_alloc;
};
/* The size of the maximum gap between one aligned stack and the next. */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
/* The size of an array large to enough to hold all stacks, each with
N elements. */
# define YYSTACK_BYTES(N) \
- ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
# define YYCOPY_NEEDED 1
@@ -481,11 +556,11 @@ union yyalloc
# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
do \
{ \
- YYSIZE_T yynewbytes; \
+ YYPTRDIFF_T yynewbytes; \
YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
+ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / YYSIZEOF (*yyptr); \
} \
while (0)
@@ -497,12 +572,12 @@ union yyalloc
# ifndef YYCOPY
# if defined __GNUC__ && 1 < __GNUC__
# define YYCOPY(Dst, Src, Count) \
- __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
# else
# define YYCOPY(Dst, Src, Count) \
do \
{ \
- YYSIZE_T yyi; \
+ YYPTRDIFF_T yyi; \
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
@@ -525,17 +600,18 @@ union yyalloc
/* YYNSTATES -- Number of states. */
#define YYNSTATES 134
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
#define YYMAXUTOK 313
+
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
-static const yytype_uint8 yytranslate[] =
+ as returned by yylex. */
+static const yytype_int8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -573,7 +649,7 @@ static const yytype_uint8 yytranslate[] =
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
-static const yytype_uint16 yyrline[] =
+static const yytype_int16 yyrline[] =
{
0, 102, 102, 103, 105, 106, 107, 108, 110, 111,
112, 113, 114, 117, 118, 119, 120, 121, 122, 123,
@@ -628,7 +704,7 @@ static const char *const yytname[] =
# ifdef YYPRINT
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
(internal) symbol number NUM (which must be that of a token). */
-static const yytype_uint16 yytoknum[] =
+static const yytype_int16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
@@ -640,14 +716,14 @@ static const yytype_uint16 yytoknum[] =
};
# endif
-#define YYPACT_NINF -25
+#define YYPACT_NINF (-25)
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-25)))
+#define yypact_value_is_default(Yyn) \
+ ((Yyn) == YYPACT_NINF)
-#define YYTABLE_NINF -1
+#define YYTABLE_NINF (-1)
-#define yytable_value_is_error(Yytable_value) \
+#define yytable_value_is_error(Yyn) \
0
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -673,7 +749,7 @@ static const yytype_int16 yypact[] =
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
Performed when YYTABLE does not specify something else to do. Zero
means the default is an error. */
-static const yytype_uint8 yydefact[] =
+static const yytype_int8 yydefact[] =
{
2, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
@@ -738,7 +814,7 @@ static const yytype_uint8 yytable[] =
20, 21, 22, 23, 24, 25, 26, 27
};
-static const yytype_uint8 yycheck[] =
+static const yytype_int8 yycheck[] =
{
3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
@@ -764,7 +840,7 @@ static const yytype_uint8 yycheck[] =
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
+static const yytype_int8 yystos[] =
{
0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
@@ -783,7 +859,7 @@ static const yytype_uint8 yystos[] =
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
+static const yytype_int8 yyr1[] =
{
0, 65, 66, 66, 67, 67, 67, 67, 68, 68,
68, 68, 68, 69, 69, 69, 69, 69, 69, 69,
@@ -798,7 +874,7 @@ static const yytype_uint8 yyr1[] =
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
+static const yytype_int8 yyr2[] =
{
0, 2, 0, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -825,22 +901,22 @@ static const yytype_uint8 yyr2[] =
#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(Token, Value) \
-do \
- if (yychar == YYEMPTY) \
- { \
- yychar = (Token); \
- yylval = (Value); \
- YYPOPSTACK (yylen); \
- yystate = *yyssp; \
- goto yybackup; \
- } \
- else \
- { \
- yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (0)
+#define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+ while (0)
/* Error token number */
#define YYTERROR 1
@@ -880,37 +956,39 @@ do { \
} while (0)
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT. |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO. |
+`-----------------------------------*/
static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
{
- FILE *yyo = yyoutput;
- YYUSE (yyo);
+ FILE *yyoutput = yyo;
+ YYUSE (yyoutput);
if (!yyvaluep)
return;
# ifdef YYPRINT
if (yytype < YYNTOKENS)
- YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+ YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
# endif
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
}
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO. |
+`---------------------------*/
static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
{
- YYFPRINTF (yyoutput, "%s %s (",
+ YYFPRINTF (yyo, "%s %s (",
yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
- yy_symbol_value_print (yyoutput, yytype, yyvaluep);
- YYFPRINTF (yyoutput, ")");
+ yy_symbol_value_print (yyo, yytype, yyvaluep);
+ YYFPRINTF (yyo, ")");
}
/*------------------------------------------------------------------.
@@ -919,7 +997,7 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
`------------------------------------------------------------------*/
static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -942,20 +1020,20 @@ do { \
`------------------------------------------------*/
static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
{
- unsigned long int yylno = yyrline[yyrule];
+ int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
- YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr,
- yystos[yyssp[yyi + 1 - yynrhs]],
- &(yyvsp[(yyi + 1) - (yynrhs)])
+ yystos[+yyssp[yyi + 1 - yynrhs]],
+ &yyvsp[(yyi + 1) - (yynrhs)]
);
YYFPRINTF (stderr, "\n");
}
@@ -999,13 +1077,13 @@ int yydebug;
# ifndef yystrlen
# if defined __GLIBC__ && defined _STRING_H
-# define yystrlen strlen
+# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
# else
/* Return the length of YYSTR. */
-static YYSIZE_T
+static YYPTRDIFF_T
yystrlen (const char *yystr)
{
- YYSIZE_T yylen;
+ YYPTRDIFF_T yylen;
for (yylen = 0; yystr[yylen]; yylen++)
continue;
return yylen;
@@ -1041,12 +1119,12 @@ yystpcpy (char *yydest, const char *yysrc)
backslash-backslash). YYSTR is taken from yytname. If YYRES is
null, do not copy; instead, return the length of what the result
would have been. */
-static YYSIZE_T
+static YYPTRDIFF_T
yytnamerr (char *yyres, const char *yystr)
{
if (*yystr == '"')
{
- YYSIZE_T yyn = 0;
+ YYPTRDIFF_T yyn = 0;
char const *yyp = yystr;
for (;;)
@@ -1059,7 +1137,10 @@ yytnamerr (char *yyres, const char *yystr)
case '\\':
if (*++yyp != '\\')
goto do_not_strip_quotes;
- /* Fall through. */
+ else
+ goto append;
+
+ append:
default:
if (yyres)
yyres[yyn] = *yyp;
@@ -1074,10 +1155,10 @@ yytnamerr (char *yyres, const char *yystr)
do_not_strip_quotes: ;
}
- if (! yyres)
+ if (yyres)
+ return yystpcpy (yyres, yystr) - yyres;
+ else
return yystrlen (yystr);
-
- return yystpcpy (yyres, yystr) - yyres;
}
# endif
@@ -1090,19 +1171,19 @@ yytnamerr (char *yyres, const char *yystr)
*YYMSG_ALLOC to the required number of bytes. Return 2 if the
required number of bytes is too large to store. */
static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
- yytype_int16 *yyssp, int yytoken)
+yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
+ yy_state_t *yyssp, int yytoken)
{
- YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
- YYSIZE_T yysize = yysize0;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
const char *yyformat = YY_NULLPTR;
- /* Arguments of yyformat. */
+ /* Arguments of yyformat: reported tokens (one for the "unexpected",
+ one per "expected"). */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- /* Number of reported tokens (one for the "unexpected", one per
- "expected"). */
+ /* Actual size of YYARG. */
int yycount = 0;
+ /* Cumulated lengths of YYARG. */
+ YYPTRDIFF_T yysize = 0;
/* There are many possibilities here to consider:
- If this state is a consistent state with a default action, then
@@ -1129,7 +1210,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
*/
if (yytoken != YYEMPTY)
{
- int yyn = yypact[*yyssp];
+ int yyn = yypact[+*yyssp];
+ YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+ yysize = yysize0;
yyarg[yycount++] = yytname[yytoken];
if (!yypact_value_is_default (yyn))
{
@@ -1154,11 +1237,12 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
}
yyarg[yycount++] = yytname[yyx];
{
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
- if (! (yysize <= yysize1
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ YYPTRDIFF_T yysize1
+ = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+ yysize = yysize1;
+ else
return 2;
- yysize = yysize1;
}
}
}
@@ -1170,6 +1254,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
case N: \
yyformat = S; \
break
+ default: /* Avoid compiler warnings. */
YYCASE_(0, YY_("syntax error"));
YYCASE_(1, YY_("syntax error, unexpected %s"));
YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1180,10 +1265,13 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
}
{
- YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ /* Don't count the "%s"s in the final size, but reserve room for
+ the terminator. */
+ YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
+ if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+ yysize = yysize1;
+ else
return 2;
- yysize = yysize1;
}
if (*yymsg_alloc < yysize)
@@ -1209,8 +1297,8 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
}
else
{
- yyp++;
- yyformat++;
+ ++yyp;
+ ++yyformat;
}
}
return 0;
@@ -1253,7 +1341,7 @@ int yynerrs;
hid_t
yyparse (void)
{
- int yystate;
+ yy_state_fast_t yystate;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
@@ -1265,16 +1353,16 @@ yyparse (void)
to reallocate them elsewhere. */
/* The state stack. */
- yytype_int16 yyssa[YYINITDEPTH];
- yytype_int16 *yyss;
- yytype_int16 *yyssp;
+ yy_state_t yyssa[YYINITDEPTH];
+ yy_state_t *yyss;
+ yy_state_t *yyssp;
/* The semantic value stack. */
YYSTYPE yyvsa[YYINITDEPTH];
YYSTYPE *yyvs;
YYSTYPE *yyvsp;
- YYSIZE_T yystacksize;
+ YYPTRDIFF_T yystacksize;
int yyn;
int yyresult;
@@ -1288,7 +1376,7 @@ yyparse (void)
/* Buffer for error messages, and its allocated size. */
char yymsgbuf[128];
char *yymsg = yymsgbuf;
- YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+ YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
#endif
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
@@ -1309,46 +1397,54 @@ yyparse (void)
yychar = YYEMPTY; /* Cause a token to be read. */
goto yysetstate;
+
/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate. |
+| yynewstate -- push a new state, which is found in yystate. |
`------------------------------------------------------------*/
- yynewstate:
+yynewstate:
/* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;
- yysetstate:
- *yyssp = yystate;
+
+/*--------------------------------------------------------------------.
+| yysetstate -- set current state (the top of the stack) to yystate. |
+`--------------------------------------------------------------------*/
+yysetstate:
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
+ YY_IGNORE_USELESS_CAST_BEGIN
+ *yyssp = YY_CAST (yy_state_t, yystate);
+ YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+#else
{
/* Get the current used size of the three stacks, in elements. */
- YYSIZE_T yysize = yyssp - yyss + 1;
+ YYPTRDIFF_T yysize = yyssp - yyss + 1;
-#ifdef yyoverflow
+# if defined yyoverflow
{
/* Give user a chance to reallocate the stack. Use copies of
these so that the &'s don't force the real ones into
memory. */
+ yy_state_t *yyss1 = yyss;
YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
/* Each stack pointer address is followed by the size of the
data in use in that stack, in bytes. This used to be a
conditional around just the two extra args, but that might
be undefined if yyoverflow is a macro. */
yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
+ &yyss1, yysize * YYSIZEOF (*yyssp),
+ &yyvs1, yysize * YYSIZEOF (*yyvsp),
&yystacksize);
-
yyss = yyss1;
yyvs = yyvs1;
}
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
- goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
goto yyexhaustedlab;
@@ -1357,42 +1453,43 @@ yyparse (void)
yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
+ yy_state_t *yyss1 = yyss;
union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ YY_CAST (union yyalloc *,
+ YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
if (! yyptr)
goto yyexhaustedlab;
YYSTACK_RELOCATE (yyss_alloc, yyss);
YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-# undef YYSTACK_RELOCATE
+# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
# endif
-#endif /* no yyoverflow */
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
- YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ YY_IGNORE_USELESS_CAST_BEGIN
+ YYDPRINTF ((stderr, "Stack size increased to %ld\n",
+ YY_CAST (long, yystacksize)));
+ YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
YYABORT;
}
-
- YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
if (yystate == YYFINAL)
YYACCEPT;
goto yybackup;
+
/*-----------.
| yybackup. |
`-----------*/
yybackup:
-
/* Do appropriate processing given the current state. Read a
lookahead token if we need one and don't already have one. */
@@ -1442,15 +1539,13 @@ yybackup:
/* Shift the lookahead token. */
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
- /* Discard the shifted token. */
- yychar = YYEMPTY;
-
yystate = yyn;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
goto yynewstate;
@@ -1465,7 +1560,7 @@ yydefault:
/*-----------------------------.
-| yyreduce -- Do a reduction. |
+| yyreduce -- do a reduction. |
`-----------------------------*/
yyreduce:
/* yyn is the number of a rule to reduce with. */
@@ -1485,247 +1580,247 @@ yyreduce:
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
- case 2:
-#line 102 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
-#line 1462 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+ case 2:
+#line 102 "./hl/src/H5LTparse.y"
+ { memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
+#line 1557 "./hl/src/H5LTparse.c"
break;
case 3:
-#line 103 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { return (yyval.hid);}
-#line 1468 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 103 "./hl/src/H5LTparse.y"
+ { return (yyval.hid);}
+#line 1563 "./hl/src/H5LTparse.c"
break;
case 13:
-#line 117 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I8BE); }
-#line 1474 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 117 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I8BE); }
+#line 1569 "./hl/src/H5LTparse.c"
break;
case 14:
-#line 118 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I8LE); }
-#line 1480 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 118 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I8LE); }
+#line 1575 "./hl/src/H5LTparse.c"
break;
case 15:
-#line 119 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I16BE); }
-#line 1486 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 119 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I16BE); }
+#line 1581 "./hl/src/H5LTparse.c"
break;
case 16:
-#line 120 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I16LE); }
-#line 1492 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 120 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I16LE); }
+#line 1587 "./hl/src/H5LTparse.c"
break;
case 17:
-#line 121 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I32BE); }
-#line 1498 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 121 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I32BE); }
+#line 1593 "./hl/src/H5LTparse.c"
break;
case 18:
-#line 122 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I32LE); }
-#line 1504 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 122 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I32LE); }
+#line 1599 "./hl/src/H5LTparse.c"
break;
case 19:
-#line 123 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I64BE); }
-#line 1510 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 123 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I64BE); }
+#line 1605 "./hl/src/H5LTparse.c"
break;
case 20:
-#line 124 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_I64LE); }
-#line 1516 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 124 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_I64LE); }
+#line 1611 "./hl/src/H5LTparse.c"
break;
case 21:
-#line 125 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U8BE); }
-#line 1522 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 125 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U8BE); }
+#line 1617 "./hl/src/H5LTparse.c"
break;
case 22:
-#line 126 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U8LE); }
-#line 1528 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 126 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U8LE); }
+#line 1623 "./hl/src/H5LTparse.c"
break;
case 23:
-#line 127 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U16BE); }
-#line 1534 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 127 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U16BE); }
+#line 1629 "./hl/src/H5LTparse.c"
break;
case 24:
-#line 128 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U16LE); }
-#line 1540 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 128 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U16LE); }
+#line 1635 "./hl/src/H5LTparse.c"
break;
case 25:
-#line 129 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U32BE); }
-#line 1546 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 129 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U32BE); }
+#line 1641 "./hl/src/H5LTparse.c"
break;
case 26:
-#line 130 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U32LE); }
-#line 1552 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 130 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U32LE); }
+#line 1647 "./hl/src/H5LTparse.c"
break;
case 27:
-#line 131 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U64BE); }
-#line 1558 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 131 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U64BE); }
+#line 1653 "./hl/src/H5LTparse.c"
break;
case 28:
-#line 132 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_STD_U64LE); }
-#line 1564 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 132 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_STD_U64LE); }
+#line 1659 "./hl/src/H5LTparse.c"
break;
case 29:
-#line 133 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_CHAR); }
-#line 1570 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 133 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_CHAR); }
+#line 1665 "./hl/src/H5LTparse.c"
break;
case 30:
-#line 134 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_SCHAR); }
-#line 1576 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 134 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_SCHAR); }
+#line 1671 "./hl/src/H5LTparse.c"
break;
case 31:
-#line 135 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_UCHAR); }
-#line 1582 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 135 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_UCHAR); }
+#line 1677 "./hl/src/H5LTparse.c"
break;
case 32:
-#line 136 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_SHORT); }
-#line 1588 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 136 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_SHORT); }
+#line 1683 "./hl/src/H5LTparse.c"
break;
case 33:
-#line 137 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_USHORT); }
-#line 1594 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 137 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_USHORT); }
+#line 1689 "./hl/src/H5LTparse.c"
break;
case 34:
-#line 138 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_INT); }
-#line 1600 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 138 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_INT); }
+#line 1695 "./hl/src/H5LTparse.c"
break;
case 35:
-#line 139 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_UINT); }
-#line 1606 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 139 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_UINT); }
+#line 1701 "./hl/src/H5LTparse.c"
break;
case 36:
-#line 140 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_LONG); }
-#line 1612 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 140 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_LONG); }
+#line 1707 "./hl/src/H5LTparse.c"
break;
case 37:
-#line 141 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULONG); }
-#line 1618 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 141 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULONG); }
+#line 1713 "./hl/src/H5LTparse.c"
break;
case 38:
-#line 142 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_LLONG); }
-#line 1624 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 142 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_LLONG); }
+#line 1719 "./hl/src/H5LTparse.c"
break;
case 39:
-#line 143 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULLONG); }
-#line 1630 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 143 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_ULLONG); }
+#line 1725 "./hl/src/H5LTparse.c"
break;
case 40:
-#line 146 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_IEEE_F32BE); }
-#line 1636 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 146 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F32BE); }
+#line 1731 "./hl/src/H5LTparse.c"
break;
case 41:
-#line 147 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_IEEE_F32LE); }
-#line 1642 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 147 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F32LE); }
+#line 1737 "./hl/src/H5LTparse.c"
break;
case 42:
-#line 148 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_IEEE_F64BE); }
-#line 1648 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 148 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F64BE); }
+#line 1743 "./hl/src/H5LTparse.c"
break;
case 43:
-#line 149 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_IEEE_F64LE); }
-#line 1654 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 149 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_IEEE_F64LE); }
+#line 1749 "./hl/src/H5LTparse.c"
break;
case 44:
-#line 150 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_FLOAT); }
-#line 1660 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 150 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_FLOAT); }
+#line 1755 "./hl/src/H5LTparse.c"
break;
case 45:
-#line 151 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_DOUBLE); }
-#line 1666 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 151 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_DOUBLE); }
+#line 1761 "./hl/src/H5LTparse.c"
break;
case 46:
-#line 152 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tcopy(H5T_NATIVE_LDOUBLE); }
-#line 1672 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 152 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tcopy(H5T_NATIVE_LDOUBLE); }
+#line 1767 "./hl/src/H5LTparse.c"
break;
case 47:
-#line 156 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
-#line 1678 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 156 "./hl/src/H5LTparse.y"
+ { csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
+#line 1773 "./hl/src/H5LTparse.c"
break;
case 48:
-#line 158 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = cmpd_stack[csindex].id;
+#line 158 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = cmpd_stack[csindex].id;
cmpd_stack[csindex].id = 0;
cmpd_stack[csindex].first_memb = 1;
csindex--;
}
-#line 1688 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1783 "./hl/src/H5LTparse.c"
break;
case 51:
-#line 167 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ }
-#line 1694 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 167 "./hl/src/H5LTparse.y"
+ { cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ }
+#line 1789 "./hl/src/H5LTparse.c"
break;
case 52:
-#line 169 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 169 "./hl/src/H5LTparse.y"
+ {
size_t origin_size, new_size;
hid_t dtype_id = cmpd_stack[csindex].id;
@@ -1759,109 +1854,109 @@ yyreduce:
new_size = H5Tget_size(dtype_id);
}
-#line 1733 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1828 "./hl/src/H5LTparse.c"
break;
case 53:
-#line 205 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 205 "./hl/src/H5LTparse.y"
+ {
(yyval.sval) = HDstrdup(yylval.sval);
HDfree(yylval.sval);
yylval.sval = NULL;
}
-#line 1743 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1838 "./hl/src/H5LTparse.c"
break;
case 54:
-#line 212 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.ival) = 0; }
-#line 1749 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 212 "./hl/src/H5LTparse.y"
+ { (yyval.ival) = 0; }
+#line 1844 "./hl/src/H5LTparse.c"
break;
case 55:
-#line 214 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.ival) = yylval.ival; }
-#line 1755 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 214 "./hl/src/H5LTparse.y"
+ { (yyval.ival) = yylval.ival; }
+#line 1850 "./hl/src/H5LTparse.c"
break;
case 57:
-#line 218 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { asindex++; /*pushd onto the stack*/ }
-#line 1761 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 218 "./hl/src/H5LTparse.y"
+ { asindex++; /*pushd onto the stack*/ }
+#line 1856 "./hl/src/H5LTparse.c"
break;
case 58:
-#line 220 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 220 "./hl/src/H5LTparse.y"
+ {
(yyval.hid) = H5Tarray_create2((yyvsp[-1].hid), arr_stack[asindex].ndims, arr_stack[asindex].dims);
arr_stack[asindex].ndims = 0;
asindex--;
H5Tclose((yyvsp[-1].hid));
}
-#line 1772 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1867 "./hl/src/H5LTparse.c"
break;
case 61:
-#line 230 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ }
-#line 1778 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 230 "./hl/src/H5LTparse.y"
+ { arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ }
+#line 1873 "./hl/src/H5LTparse.c"
break;
case 62:
-#line 231 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { unsigned ndims = arr_stack[asindex].ndims;
+#line 231 "./hl/src/H5LTparse.y"
+ { unsigned ndims = arr_stack[asindex].ndims;
arr_stack[asindex].dims[ndims] = (hsize_t)yylval.ival;
arr_stack[asindex].ndims++;
arr_stack[asindex].is_dim = 0;
}
-#line 1788 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1883 "./hl/src/H5LTparse.c"
break;
case 65:
-#line 242 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = H5Tvlen_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); }
-#line 1794 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 242 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = H5Tvlen_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); }
+#line 1889 "./hl/src/H5LTparse.c"
break;
case 66:
-#line 248 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 248 "./hl/src/H5LTparse.y"
+ {
size_t size = (size_t)yylval.ival;
(yyval.hid) = H5Tcreate(H5T_OPAQUE, size);
}
-#line 1803 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1898 "./hl/src/H5LTparse.c"
break;
case 67:
-#line 253 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 253 "./hl/src/H5LTparse.y"
+ {
H5Tset_tag((yyvsp[-3].hid), yylval.sval);
HDfree(yylval.sval);
yylval.sval = NULL;
}
-#line 1813 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1908 "./hl/src/H5LTparse.c"
break;
case 68:
-#line 258 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { (yyval.hid) = (yyvsp[-5].hid); }
-#line 1819 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 258 "./hl/src/H5LTparse.y"
+ { (yyval.hid) = (yyvsp[-5].hid); }
+#line 1914 "./hl/src/H5LTparse.c"
break;
case 71:
-#line 267 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 267 "./hl/src/H5LTparse.y"
+ {
if((yyvsp[-1].ival) == H5T_VARIABLE_TOKEN)
is_variable = 1;
else
str_size = yylval.ival;
}
-#line 1830 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1925 "./hl/src/H5LTparse.c"
break;
case 72:
-#line 274 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 274 "./hl/src/H5LTparse.y"
+ {
if((yyvsp[-1].ival) == H5T_STR_NULLTERM_TOKEN)
str_pad = H5T_STR_NULLTERM;
else if((yyvsp[-1].ival) == H5T_STR_NULLPAD_TOKEN)
@@ -1869,34 +1964,34 @@ yyreduce:
else if((yyvsp[-1].ival) == H5T_STR_SPACEPAD_TOKEN)
str_pad = H5T_STR_SPACEPAD;
}
-#line 1843 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1938 "./hl/src/H5LTparse.c"
break;
case 73:
-#line 283 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 283 "./hl/src/H5LTparse.y"
+ {
if((yyvsp[-1].ival) == H5T_CSET_ASCII_TOKEN)
str_cset = H5T_CSET_ASCII;
else if((yyvsp[-1].ival) == H5T_CSET_UTF8_TOKEN)
str_cset = H5T_CSET_UTF8;
}
-#line 1854 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1949 "./hl/src/H5LTparse.c"
break;
case 74:
-#line 290 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 290 "./hl/src/H5LTparse.y"
+ {
if((yyvsp[-1].hid) == H5T_C_S1_TOKEN)
(yyval.hid) = H5Tcopy(H5T_C_S1);
else if((yyvsp[-1].hid) == H5T_FORTRAN_S1_TOKEN)
(yyval.hid) = H5Tcopy(H5T_FORTRAN_S1);
}
-#line 1865 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1960 "./hl/src/H5LTparse.c"
break;
case 75:
-#line 297 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 297 "./hl/src/H5LTparse.y"
+ {
hid_t str_id = (yyvsp[-1].hid);
/*set string size*/
@@ -1912,83 +2007,83 @@ yyreduce:
(yyval.hid) = str_id;
}
-#line 1886 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 1981 "./hl/src/H5LTparse.c"
break;
case 76:
-#line 314 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.ival) = H5T_VARIABLE_TOKEN;}
-#line 1892 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 314 "./hl/src/H5LTparse.y"
+ {(yyval.ival) = H5T_VARIABLE_TOKEN;}
+#line 1987 "./hl/src/H5LTparse.c"
break;
case 78:
-#line 317 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.ival) = H5T_STR_NULLTERM_TOKEN;}
-#line 1898 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 317 "./hl/src/H5LTparse.y"
+ {(yyval.ival) = H5T_STR_NULLTERM_TOKEN;}
+#line 1993 "./hl/src/H5LTparse.c"
break;
case 79:
-#line 318 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.ival) = H5T_STR_NULLPAD_TOKEN;}
-#line 1904 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 318 "./hl/src/H5LTparse.y"
+ {(yyval.ival) = H5T_STR_NULLPAD_TOKEN;}
+#line 1999 "./hl/src/H5LTparse.c"
break;
case 80:
-#line 319 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.ival) = H5T_STR_SPACEPAD_TOKEN;}
-#line 1910 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 319 "./hl/src/H5LTparse.y"
+ {(yyval.ival) = H5T_STR_SPACEPAD_TOKEN;}
+#line 2005 "./hl/src/H5LTparse.c"
break;
case 81:
-#line 321 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.ival) = H5T_CSET_ASCII_TOKEN;}
-#line 1916 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 321 "./hl/src/H5LTparse.y"
+ {(yyval.ival) = H5T_CSET_ASCII_TOKEN;}
+#line 2011 "./hl/src/H5LTparse.c"
break;
case 82:
-#line 322 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.ival) = H5T_CSET_UTF8_TOKEN;}
-#line 1922 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 322 "./hl/src/H5LTparse.y"
+ {(yyval.ival) = H5T_CSET_UTF8_TOKEN;}
+#line 2017 "./hl/src/H5LTparse.c"
break;
case 83:
-#line 324 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.hid) = H5T_C_S1_TOKEN;}
-#line 1928 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 324 "./hl/src/H5LTparse.y"
+ {(yyval.hid) = H5T_C_S1_TOKEN;}
+#line 2023 "./hl/src/H5LTparse.c"
break;
case 84:
-#line 325 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {(yyval.hid) = H5T_FORTRAN_S1_TOKEN;}
-#line 1934 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 325 "./hl/src/H5LTparse.y"
+ {(yyval.hid) = H5T_FORTRAN_S1_TOKEN;}
+#line 2029 "./hl/src/H5LTparse.c"
break;
case 85:
-#line 329 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { is_enum = 1; enum_id = H5Tenum_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); }
-#line 1940 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 329 "./hl/src/H5LTparse.y"
+ { is_enum = 1; enum_id = H5Tenum_create((yyvsp[-1].hid)); H5Tclose((yyvsp[-1].hid)); }
+#line 2035 "./hl/src/H5LTparse.c"
break;
case 86:
-#line 331 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- { is_enum = 0; /*reset*/ (yyval.hid) = enum_id; }
-#line 1946 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 331 "./hl/src/H5LTparse.y"
+ { is_enum = 0; /*reset*/ (yyval.hid) = enum_id; }
+#line 2041 "./hl/src/H5LTparse.c"
break;
case 89:
-#line 336 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 336 "./hl/src/H5LTparse.y"
+ {
is_enum_memb = 1; /*indicate member of enum*/
enum_memb_symbol = HDstrdup(yylval.sval);
HDfree(yylval.sval);
yylval.sval = NULL;
}
-#line 1957 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 2052 "./hl/src/H5LTparse.c"
break;
case 90:
-#line 343 "hl/src/H5LTparse.y" /* yacc.c:1646 */
- {
+#line 343 "./hl/src/H5LTparse.y"
+ {
char char_val=(char)yylval.ival;
short short_val=(short)yylval.ival;
int int_val=(int)yylval.ival;
@@ -2030,11 +2125,12 @@ yyreduce:
H5Tclose(super);
H5Tclose(native);
}
-#line 2004 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 2099 "./hl/src/H5LTparse.c"
break;
-#line 2008 "hl/src/H5LTparse.c" /* yacc.c:1646 */
+#line 2103 "./hl/src/H5LTparse.c"
+
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -2059,14 +2155,13 @@ yyreduce:
/* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
- if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTOKENS];
+ {
+ const int yylhs = yyr1[yyn] - YYNTOKENS;
+ const int yyi = yypgoto[yylhs] + *yyssp;
+ yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+ ? yytable[yyi]
+ : yydefgoto[yylhs]);
+ }
goto yynewstate;
@@ -2098,7 +2193,7 @@ yyerrlab:
{
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
if (!yymsg)
{
yymsg = yymsgbuf;
@@ -2149,12 +2244,10 @@ yyerrlab:
| yyerrorlab -- error raised explicitly by YYERROR. |
`---------------------------------------------------*/
yyerrorlab:
-
- /* Pacify compilers like GCC when the user code never invokes
- YYERROR and the label yyerrorlab therefore never appears in user
- code. */
- if (/*CONSTCOND*/ 0)
- goto yyerrorlab;
+ /* Pacify compilers when the user code never invokes YYERROR and the
+ label yyerrorlab therefore never appears in user code. */
+ if (0)
+ YYERROR;
/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
@@ -2216,6 +2309,7 @@ yyacceptlab:
yyresult = 0;
goto yyreturn;
+
/*-----------------------------------.
| yyabortlab -- YYABORT comes here. |
`-----------------------------------*/
@@ -2223,6 +2317,7 @@ yyabortlab:
yyresult = 1;
goto yyreturn;
+
#if !defined yyoverflow || YYERROR_VERBOSE
/*-------------------------------------------------.
| yyexhaustedlab -- memory exhaustion comes here. |
@@ -2233,6 +2328,10 @@ yyexhaustedlab:
/* Fall through. */
#endif
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result. |
+`-----------------------------------------------------*/
yyreturn:
if (yychar != YYEMPTY)
{
@@ -2249,7 +2348,7 @@ yyreturn:
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
+ yystos[+*yyssp], yyvsp);
YYPOPSTACK (1);
}
#ifndef yyoverflow
diff --git a/hl/src/H5LTparse.h b/hl/src/H5LTparse.h
index 9dd2fba..6464f26 100644
--- a/hl/src/H5LTparse.h
+++ b/hl/src/H5LTparse.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 3.5.1. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -30,6 +31,9 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+/* Undocumented macros, especially those whose name start with YY_,
+ are private implementation details. Do not rely on them. */
+
#ifndef YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
# define YY_H5LTYY_HL_SRC_H5LTPARSE_H_INCLUDED
/* Debug traces. */
@@ -106,18 +110,17 @@ extern int H5LTyydebug;
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
union YYSTYPE
{
-#line 69 "hl/src/H5LTparse.y" /* yacc.c:1909 */
+#line 69 "./hl/src/H5LTparse.y"
int ival; /*for integer token*/
char *sval; /*for name string*/
hid_t hid; /*for hid_t token*/
-#line 119 "hl/src/H5LTparse.h" /* yacc.c:1909 */
-};
+#line 122 "./hl/src/H5LTparse.h"
+};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
diff --git a/hl/src/H5LTpublic.h b/hl/src/H5LTpublic.h
index a6c7c84..2f87944 100644
--- a/hl/src/H5LTpublic.h
+++ b/hl/src/H5LTpublic.h
@@ -35,6 +35,116 @@ typedef enum H5LT_lang_t {
extern "C" {
#endif
+/**\defgroup H5LT Lite
+ * <em>Functions used to simplify creating and manipulating datasets,
+ * attributes and other features (H5LT, H5LD)</em>
+ *
+ * The HDF5 Lite API consists of higher-level functions which do
+ * more operations per call than the basic HDF5 interface.
+ * The purpose is to wrap intuitive functions around certain sets
+ * of features in the existing APIs.
+ * It has the following sets of functions listed below.
+ *
+ * \note \Bold{Programming hints:}
+ * \note To use any of these functions or subroutines,
+ * you must first include the relevant include file (C) or
+ * module (Fortran) in your application.
+ * \note The following line includes the HDF5 Lite package, H5LT,
+ * in C applications:
+ * \code #include "hdf5_hl.h" \endcode
+ * \note This line includes the H5LT module in Fortran applications:
+ * \code use h5lt \endcode
+ *
+ * - Dataset Functions
+ * - Make dataset functions
+ * - \ref H5LTmake_dataset
+ * - \ref H5LTmake_dataset_char
+ * - \ref H5LTmake_dataset_short
+ * - \ref H5LTmake_dataset_int
+ * - \ref H5LTmake_dataset_long
+ * - \ref H5LTmake_dataset_float
+ * - \ref H5LTmake_dataset_double
+ * - \ref H5LTmake_dataset_string
+ * .
+ * - Read dataset functions
+ * - \ref H5LTread_dataset
+ * - \ref H5LTread_dataset_char
+ * - \ref H5LTread_dataset_short
+ * - \ref H5LTread_dataset_int
+ * - \ref H5LTread_dataset_long
+ * - \ref H5LTread_dataset_float
+ * - \ref H5LTread_dataset_double
+ * - \ref H5LTread_dataset_string
+ * .
+ * - Query dataset functions
+ * - \ref H5LTfind_dataset
+ * - \ref H5LTget_dataset_ndims
+ * - \ref H5LTget_dataset_info
+ * .
+ * - Dataset watch functions
+ * - \ref H5LDget_dset_dims
+ * - \ref H5LDget_dset_elmts
+ * - \ref H5LDget_dset_type_size
+ * .
+ * .
+ * - Attribute Functions
+ * - Set attribute functions
+ * - \ref H5LTset_attribute_string
+ * - \ref H5LTset_attribute_char
+ * - \ref H5LTset_attribute_uchar
+ * - \ref H5LTset_attribute_short
+ * - \ref H5LTset_attribute_ushort
+ * - \ref H5LTset_attribute_int
+ * - \ref H5LTset_attribute_uint
+ * - \ref H5LTset_attribute_long
+ * - \ref H5LTset_attribute_long_long
+ * - \ref H5LTset_attribute_ulong
+ * - \ref H5LTset_attribute_ullong
+ * - \ref H5LTset_attribute_float
+ * - \ref H5LTset_attribute_double
+ * - \ref H5LTset_attribute_f (fortran ONLY)
+ * .
+ * - Get attribute functions
+ * - \ref H5LTget_attribute
+ * - \ref H5LTget_attribute_string
+ * - \ref H5LTget_attribute_char
+ * - \ref H5LTget_attribute_uchar
+ * - \ref H5LTget_attribute_short
+ * - \ref H5LTget_attribute_ushort
+ * - \ref H5LTget_attribute_int
+ * - \ref H5LTget_attribute_uint
+ * - \ref H5LTget_attribute_long
+ * - \ref H5LTget_attribute_long_long
+ * - \ref H5LTget_attribute_ulong
+ * - \ref H5LTget_attribute_ullong
+ * - \ref H5LTget_attribute_float
+ * - \ref H5LTget_attribute_double
+ * .
+ * - Query attribute functions
+ * - \ref H5LTfind_attribute
+ * - \ref H5LTget_attribute_info
+ * - \ref H5LTget_attribute_ndims
+ * .
+ * .
+ * - Datatype Functions
+ * - Datatype translation functions
+ * - \ref H5LTtext_to_dtype
+ * - \ref H5LTdtype_to_text
+ * .
+ * .
+ * - File image function
+ * - Open file image function
+ * - \ref H5LTopen_file_image
+ * .
+ * .
+ * - Path and object function
+ * - Query path and object function
+ * - \ref H5LTpath_valid
+ * .
+ * .
+ * .
+ */
+
/*-------------------------------------------------------------------------
*
* Make dataset functions
@@ -42,27 +152,214 @@ extern "C" {
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset of a type \p type_id.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] type_id Identifier of the datatype to use when creating the dataset
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset() creates and writes a dataset named
+ * \p dset_name attached to the object specified by the
+ * identifier \p loc_id.
+ *
+ * The parameter \p type_id can be any valid HDF5 Prdefined \ref PDTNAT;
+ * For example, setting \p type_id to #H5T_NATIVE_INT will result in a dataset
+ * of <em>signed \e integer datatype</em>.
+ *
+ * \version 1.10.0 Fortran 2003 subroutine added to accept a C address of the data buffer.
+ * \version 1.8.7 Fortran subroutine modified in this release to accommodate arrays
+ * with more than three dimensions.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
hid_t type_id, const void *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_char() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be \e character, #H5T_NATIVE_CHAR.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_char(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
const char *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_short() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be <em>short signed integer</em>,
+ * #H5T_NATIVE_SHORT.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_short(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
const short *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_int() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be <em>native signed integer</em>,
+ * #H5T_NATIVE_INT.
+ *
+ * \version Fortran subroutine modified in this release to accommodate
+ * arrays with more than three dimensions.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_int(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
const int *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_long() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be <em>long signed integer</em>,
+ * #H5T_NATIVE_LONG.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_long(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
const long *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_float() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be <em>native floating point</em>,
+ * #H5T_NATIVE_FLOAT.
+ *
+ * \version 1.8.7 Fortran subroutine modified in this release to accommodate
+ * arrays with more than three dimensions.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_float(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
const float *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The Name of the dataset to create
+ * \param[in] rank Number of dimensions of dataspace
+ * \param[in] dims An array of the size of each dimension
+ * \param[in] buffer Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_double() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be
+ * <em>native floating-point double</em>, #H5T_NATIVE_DOUBLE.
+ *
+ * \version 1.8.7 Fortran subroutine modified in this release to accommodate
+ * arrays with more than three dimensions.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_double(hid_t loc_id, const char *dset_name, int rank, const hsize_t *dims,
const double *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a dataset with string datatype.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to create
+ * \param[in] buf Buffer with data to be written to the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTmake_dataset_string() creates and writes a dataset
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ * The dataset’s datatype will be <em>C string</em>, #H5T_C_S1.
+ *
+ */
H5_HLDLL herr_t H5LTmake_dataset_string(hid_t loc_id, const char *dset_name, const char *buf);
/*-------------------------------------------------------------------------
@@ -72,20 +369,169 @@ H5_HLDLL herr_t H5LTmake_dataset_string(hid_t loc_id, const char *dset_name, con
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[in] type_id Identifier of the datatype to use when reading
+ * the dataset
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ *
+ * \version 1.10.0 Fortran 2003 subroutine added to accept a C
+ * address of the data buffer.
+ * \version 1.8.7 Fortran subroutine modified in this release to
+ * accommodate arrays with more than three dimensions.
+ *
+ */
H5_HLDLL herr_t H5LTread_dataset(hid_t loc_id, const char *dset_name, hid_t type_id, void *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_char() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_NATIVE_CHAR.
+ *
+ */
H5_HLDLL herr_t H5LTread_dataset_char(hid_t loc_id, const char *dset_name, char *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_short() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_NATIVE_SHORT.
+ *
+ */
H5_HLDLL herr_t H5LTread_dataset_short(hid_t loc_id, const char *dset_name, short *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_int() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_NATIVE_INT.
+ *
+ * \version 1.8.7 Fortran subroutine modified in this release to
+ * accommodate arrays with more than three dimensions.
+ *
+ */
H5_HLDLL herr_t H5LTread_dataset_int(hid_t loc_id, const char *dset_name, int *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_long() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_NATIVE_LONG.
+ *
+ */
H5_HLDLL herr_t H5LTread_dataset_long(hid_t loc_id, const char *dset_name, long *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_float() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_NATIVE_FLOAT.
+ *
+ * \version 1.8.7 Fortran subroutine modified in this release to
+ * accommodate arrays with more than three dimensions.
+ */
H5_HLDLL herr_t H5LTread_dataset_float(hid_t loc_id, const char *dset_name, float *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buffer Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_double() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_NATIVE_DOUBLE.
+ *
+ * \version 1.8.7 Fortran subroutine modified in this release to
+ * accommodate arrays with more than three dimensions.
+ */
H5_HLDLL herr_t H5LTread_dataset_double(hid_t loc_id, const char *dset_name, double *buffer);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a dataset from disk.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTread_dataset_string() reads a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ * The HDF5 datatype is #H5T_C_S1.
+ *
+ */
H5_HLDLL herr_t H5LTread_dataset_string(hid_t loc_id, const char *dset_name, char *buf);
/*-------------------------------------------------------------------------
@@ -95,11 +541,67 @@ H5_HLDLL herr_t H5LTread_dataset_string(hid_t loc_id, const char *dset_name, cha
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Gets the dimensionality of a dataset
+ *
+ * \param[in] loc_id Identifier of the object to
+ * locate the dataset within
+ * \param[in] dset_name The dataset name
+ * \param[out] rank The dimensionality of the dataset
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_dataset_ndims() gets the dimensionality of a dataset
+ * named \p dset_name exists attached to the object \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5LTget_dataset_ndims(hid_t loc_id, const char *dset_name, int *rank);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Retrieves information about a dataset
+ *
+ * \param[in] loc_id Identifier of the object to locate
+ * the dataset within
+ * \param[in] dset_name The dataset name
+ * \param[out] dims The dimensions of the dataset
+ * \param[out] type_class The class identifier. #H5T_class_t is defined in
+ * H5Tpublic.h. See H5Tget_class() for a list
+ * of class types.
+ * \param[out] type_size The size of the datatype in bytes
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_dataset_info() retrieves information about a dataset
+ * named \p dset_name attached to the object \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5LTget_dataset_info(hid_t loc_id, const char *dset_name, hsize_t *dims,
H5T_class_t *type_class, size_t *type_size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Determines whether a dataset exists.
+ *
+ * \param[in] loc_id Identifier of the group containing the dataset
+ * \param[in] name Dataset name
+ *
+ * \return \htri_t
+ *
+ * \details H5LTfind_dataset() determines whether a dataset named
+ * \p name exists in the group specified by \p loc_id.
+ *
+ * \p loc_id must be a group identifier and \p name must
+ * specify a dataset that is a member of that group.
+ *
+ */
H5_HLDLL herr_t H5LTfind_dataset(hid_t loc_id, const char *name);
/*-------------------------------------------------------------------------
@@ -109,42 +611,343 @@ H5_HLDLL herr_t H5LTfind_dataset(hid_t loc_id, const char *name);
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes a string attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] attr_data Buffer with data to be written to the attribute
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_string() creates and writes a string attribute
+ * named \p attr_name and attaches it to the object specified by
+ * the name \p obj_name. If the attribute already exists,
+ * it is overwritten.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_string(hid_t loc_id, const char *obj_name, const char *attr_name,
const char *attr_data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_char() creates and writes a numerical attribute
+ * named \p attr_name and attaches it to the object specified by the
+ * name \p obj_name. The attribute has a dimensionality of 1.
+ * The HDF5 datatype of the attribute is #H5T_NATIVE_CHAR.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_char(hid_t loc_id, const char *obj_name, const char *attr_name,
const char *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_uchar() creates and writes a numerical attribute
+ * named \p attr_name and attaches it to the object specified by the
+ * name \p obj_name. The attribute has a dimensionality of 1.
+ * The HDF5 datatype of the attribute is #H5T_NATIVE_UCHAR.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_uchar(hid_t loc_id, const char *obj_name, const char *attr_name,
const unsigned char *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_short() creates and writes a numerical attribute
+ * named \p attr_name and attaches it to the object specified by the
+ * name \p obj_name. The attribute has a dimensionality of 1.
+ * The HDF5 datatype of the attribute is #H5T_NATIVE_SHORT.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_short(hid_t loc_id, const char *obj_name, const char *attr_name,
const short *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_ushort() creates and writes a numerical attribute
+ * named \p attr_name and attaches it to the object specified by the
+ * name \p obj_name. The attribute has a dimensionality of 1.
+ * The HDF5 datatype of the attribute is #H5T_NATIVE_USHORT.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_ushort(hid_t loc_id, const char *obj_name, const char *attr_name,
const unsigned short *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_int() creates and writes a numerical integer
+ * attribute named \p attr_name and attaches it to the object
+ * specified by the name \p obj_name. The attribute has a
+ * dimensionality of 1. The HDF5 datatype of the attribute
+ * is #H5T_NATIVE_INT.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_int(hid_t loc_id, const char *obj_name, const char *attr_name,
const int *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_uint() creates and writes a numerical integer
+ * attribute named \p attr_name and attaches it to the object specified
+ * by the name \p obj_name. The attribute has a dimensionality of 1.
+ * The HDF5 datatype of the attribute is #H5T_NATIVE_UINT.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_uint(hid_t loc_id, const char *obj_name, const char *attr_name,
const unsigned int *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_long() creates and writes a numerical
+ * attribute named \p attr_name and attaches it to the object
+ * specified by the name \p obj_name. The attribute has a
+ * dimensionality of 1. The HDF5 datatype of the attribute
+ * is #H5T_NATIVE_LONG.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_long(hid_t loc_id, const char *obj_name, const char *attr_name,
const long *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Location of the object to which the attribute
+ * is to be attached
+ * \param[in] obj_name That object's name
+ * \param[in] attr_name Attribute name
+ * \param[in] buffer Attribute value
+ * \param[in] size Attribute size
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_long_long() creates and writes a numerical
+ * attribute named \p attr_name and attaches it to the object
+ * specified by the name \p obj_name.
+ *
+ * The attribute has a dimensionality of 1 and its HDF5 datatype
+ * is #H5T_NATIVE_LLONG.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_long_long(hid_t loc_id, const char *obj_name, const char *attr_name,
const long long *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_ulong() creates and writes a numerical
+ * attribute named \p attr_name and attaches it to the object
+ * specified by the name \p obj_name. The attribute has a
+ * dimensionality of 1. The HDF5 datatype of the attribute
+ * is #H5T_NATIVE_ULONG.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_ulong(hid_t loc_id, const char *obj_name, const char *attr_name,
const unsigned long *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Location of the object to which the attribute
+ * is to be attached
+ * \param[in] obj_name That object's name
+ * \param[in] attr_name Attribute name
+ * \param[in] buffer Attribute value
+ * \param[in] size Attribute size
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_ullong() creates and writes a numerical
+ * attribute named \p attr_name and attaches it to the object
+ * specified by the name \p obj_name.
+ *
+ * The attribute has a dimensionality of 1 and its HDF5 datatype
+ * is #H5T_NATIVE_ULLONG.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_ullong(hid_t loc_id, const char *obj_name, const char *attr_name,
const unsigned long long *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_float() creates and writes a numerical
+ * floating point attribute named \p attr_name and attaches
+ * it to the object specified by the name \p obj_name.
+ * The attribute has a dimensionality of 1. The HDF5 datatype
+ * of the attribute is #H5T_NATIVE_FLOAT.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_float(hid_t loc_id, const char *obj_name, const char *attr_name,
const float *buffer, size_t size);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates and writes an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to create the attribute within
+ * \param[in] obj_name The name of the object to attach the attribute
+ * \param[in] attr_name The attribute name
+ * \param[in] buffer Buffer with data to be written to the attribute
+ * \param[in] size The size of the 1D array (one in the case of a
+ * scalar attribute). This value is used by
+ * H5Screate_simple() to create the dataspace.
+ *
+ * \return \herr_t
+ *
+ * \details H5LTset_attribute_double() creates and writes a numerical
+ * attribute named \p attr_name and attaches
+ * it to the object specified by the name \p obj_name.
+ * The attribute has a dimensionality of 1. The HDF5 datatype
+ * of the attribute is #H5T_NATIVE_DOUBLE.
+ *
+ */
H5_HLDLL herr_t H5LTset_attribute_double(hid_t loc_id, const char *obj_name, const char *attr_name,
const double *buffer, size_t size);
@@ -155,42 +958,337 @@ H5_HLDLL herr_t H5LTset_attribute_double(hid_t loc_id, const char *obj_name, con
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[in] mem_type_id Identifier of the memory datatype
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute() reads an attribute named
+ * \p attr_name with the memory type \p mem_type_id.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute(hid_t loc_id, const char *obj_name, const char *attr_name,
hid_t mem_type_id, void *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_string() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The datatype is a string.
+ *
+ * \version 1.8.9 The content of the buffer returned by the Fortran
+ * subroutine has changed in this release:\n
+ * If the returned buffer requires padding,
+ * h5ltget_attribute_string_f() now employs space
+ * padding; this buffer was previously returned with a C NULL terminator.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_string(hid_t loc_id, const char *obj_name, const char *attr_name,
char *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_char() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The datatype of the attribute
+ * is #H5T_NATIVE_CHAR.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_char(hid_t loc_id, const char *obj_name, const char *attr_name, char *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_uchar() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_UCHAR
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_uchar(hid_t loc_id, const char *obj_name, const char *attr_name,
unsigned char *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_short() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_SHORT
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_short(hid_t loc_id, const char *obj_name, const char *attr_name,
short *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_ushort() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_USHORT.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_ushort(hid_t loc_id, const char *obj_name, const char *attr_name,
unsigned short *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_int() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_INT.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_int(hid_t loc_id, const char *obj_name, const char *attr_name, int *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_uint() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_INT.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_uint(hid_t loc_id, const char *obj_name, const char *attr_name,
unsigned int *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_long() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_LONG.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_long(hid_t loc_id, const char *obj_name, const char *attr_name, long *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads a \e long \e long attribute.
+ *
+ * \param[in] loc_id Location of the object to which
+ * the attribute is attached
+ * \param[in] obj_name That object's name
+ * \param[in] attr_name Attribute name
+ * \param[out] data Attribute value
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_long_long() reads the attribute
+ * specified by \p loc_id and \p obj_name.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_long_long(hid_t loc_id, const char *obj_name, const char *attr_name,
long long *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_ulong() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_ULONG.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_ulong(hid_t loc_id, const char *obj_name, const char *attr_name,
unsigned long *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_ullong() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_ULLONG.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_ullong(hid_t loc_id, const char *obj_name, const char *attr_name,
unsigned long long *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_float() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_FLOAT.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_float(hid_t loc_id, const char *obj_name, const char *attr_name,
float *data);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Reads an attribute from disk.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] data Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_double() reads an attribute named
+ * \p attr_name that is attached to the object specified
+ * by the name \p obj_name. The HDF5 datatype of the
+ * attribute is #H5T_NATIVE_DOUBLE.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_double(hid_t loc_id, const char *obj_name, const char *attr_name,
double *data);
@@ -201,8 +1299,55 @@ H5_HLDLL herr_t H5LTget_attribute_double(hid_t loc_id, const char *obj_name, con
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Gets the dimensionality of an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] rank The dimensionality of the attribute
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_ndims() gets the dimensionality of an attribute
+ * named \p attr_name that is attached to the object specified
+ * by the name \p obj_name.
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_ndims(hid_t loc_id, const char *obj_name, const char *attr_name, int *rank);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Gets information about an attribute.
+ *
+ * \param[in] loc_id Identifier of the object (dataset or group)
+ * to read the attribute from
+ * \param[in] obj_name The name of the object that the attribute is
+ * attached to
+ * \param[in] attr_name The attribute name
+ * \param[out] dims The dimensions of the attribute
+ * \param[out] type_class The class identifier. #H5T_class_t is
+ * defined in H5Tpublic.h. For a list of valid class
+ * types see: H5Tget_class().
+ * \param[out] type_size The size of the datatype in bytes
+ *
+ * \return \herr_t
+ *
+ * \details H5LTget_attribute_info() gets information about an attribute
+ * named \p attr_name attached to the object specified by
+ * the name \p obj_name.
+ *
+ * \par Example
+ * \snippet H5LT_examples.c get_attribute_info
+ *
+ */
H5_HLDLL herr_t H5LTget_attribute_info(hid_t loc_id, const char *obj_name, const char *attr_name,
hsize_t *dims, H5T_class_t *type_class, size_t *type_size);
@@ -213,7 +1358,74 @@ H5_HLDLL herr_t H5LTget_attribute_info(hid_t loc_id, const char *obj_name, const
*-------------------------------------------------------------------------
*/
-H5_HLDLL hid_t H5LTtext_to_dtype(const char *text, H5LT_lang_t lang_type);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates an HDF5 datatype given a text description.
+ *
+ * \param[in] text A character string containing a DDL
+ * definition of the datatype to be created
+ * \param[in] lang_type The language used to describe the datatype.
+ * The only currently supported language is
+ * #H5LT_DDL.
+ *
+ * \return Returns the datatype identifier(non-negative) if successful;
+ * otherwise returns a negative value.
+ *
+ * \details Given a text description of a datatype, this function creates
+ * an HDF5 datatype and returns the datatype identifier.
+ * The text description of the datatype has to comply with the
+ * \p lang_type definition of HDF5 datatypes.
+ * Currently, only the DDL(#H5LT_DDL) is supported.
+ * The complete DDL definition of HDF5 datatypes can be found in
+ * the last chapter of the
+ * <a href="https://portal.hdfgroup.org/display/HDF5/HDF5+User+Guides">
+ * HDF5 User's Guide</a>.
+ *
+ * \par Example
+ * An example of DDL definition of \c enum type is shown as follows.
+ * \snippet H5LT_examples.c enum
+ *
+ */
+H5_HLDLL hid_t H5LTtext_to_dtype(const char *text, H5LT_lang_t lang_type);
+
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Creates a text description of an HDF5 datatype.
+ *
+ * \param[in] dtype Identifier of the datatype to be converted
+ * \param[out] str Buffer for the text description of the datatype
+ * \param[in] lang_type The language used to describe the datatype.
+ * The currently supported language is #H5LT_DDL.
+ * \param[out] len The size of buffer needed to store the text description
+ *
+ * \return \herr_t
+ *
+ * \details Given an HDF5 datatype identifier, this function creates
+ * a description of this datatype in \p lang_type language format.
+ * A preliminary H5LTdtype_to_text() call can be made to determine
+ * the size of the buffer needed with a NULL passed in for \p str.
+ * This value is returned as \p len. That value can then be assigned
+ * to len for a second H5Ttype_to_text() call, which will
+ * retrieve the actual text description for the datatype.
+ *
+ * If \p len is not big enough for the description, the text
+ * description will be truncated to fit in the buffer.
+ *
+ * Currently only DDL (#H5LT_DDL) is supported for \p lang_type.
+ * The complete DDL definition of HDF5 data types can be found in
+ * the last chapter of the
+ * <a href="https://portal.hdfgroup.org/display/HDF5/HDF5+User+Guides">
+ * HDF5 User's Guide</a>.
+ *
+ * \par Example
+ * An example of DDL definition of \c enum type is shown as follows.
+ * \snippet H5LT_examples.c enum
+ *
+ */
H5_HLDLL herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type, size_t *len);
/*-------------------------------------------------------------------------
@@ -223,8 +1435,116 @@ H5_HLDLL herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type,
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Determines whether an attribute exists.
+ *
+ * \param[in] loc_id Identifier of the object to which the attribute
+ * is expected to be attached
+ * \param[in] name Attribute name
+ *
+ * \return \htri_t
+ *
+ * \details H5LTfind_attribute() determines whether an attribute named
+ * \p name exists attached to the object specified
+ * by \p loc_id.
+ *
+ * \p loc_id must be an object identifier and \p name
+ * must specify an attribute that is expected to be attached
+ * to that object.
+ *
+ */
H5_HLDLL herr_t H5LTfind_attribute(hid_t loc_id, const char *name);
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Determines whether an HDF5 path is valid and, optionally,
+ * whether the path resolves to an HDF5 object.
+ *
+ * \param[in] loc_id Identifier of an object in the file
+ * \param[in] path The path to the object to check;
+ * links in \p path may be of any type.
+ * \param[in] check_object_valid If TRUE, determine whether the final
+ * component of \p path resolves to
+ * an object; if FALSE, do not check.
+ *
+ * \return Upon success:
+ * \return If \p check_object_valid is set to \c FALSE:
+ * \return Returns \c TRUE if the path is valid;
+ * otherwise returns \c FALSE.
+ * \return If \p check_object_valid is set to \c TRUE:
+ * \return Returns \c TRUE if the path is valid and
+ * resolves to an HDF5 object;
+ * otherwise returns \c FALSE.
+ *
+ * \return Upon error, returns a negative value.
+ *
+ * \details H5LTpath_valid() checks the validity of \p path relative
+ * to the identifier of an object, \p loc_id. Optionally,
+ * \p check_object_valid can be set to determine whether the
+ * final component of \p path resolves to an HDF5 object;
+ * if not, the final component is a dangling link.
+ *
+ * The meaning of the function’s return value depends on the
+ * value of \p check_object_valid:
+ *
+ * If \p check_object_valid is set to \c FALSE, H5LTpath_valid()
+ * will check all links in \p path to verify that they exist.
+ * If all the links in \p path exist, the function will
+ * return \c TRUE; otherwise the function will return \c FALSE.
+ *
+ * If \p check_object_valid is set to \c TRUE,
+ * H5LTpath_valid() will first check the links in \p path,
+ * as described above. If all the links exist,
+ * \p check_object_valid will then determine whether the final
+ * component of \p path resolves to an actual HDF5 object.
+ * H5LTpath_valid() will return \c TRUE if all the links in
+ * \p path exist and the final component resolves to an
+ * actual object; otherwise, it will return \c FALSE.
+ *
+ * \p path can be any one of the following:
+ *
+ * - An absolute path, which starts with a slash (\c /)
+ * indicating the file’s root group, followed by the members
+ * - A relative path with respect to \p loc_id
+ * - A dot (\c .), if \p loc_id is the object identifier for
+ * the object itself
+ * .
+ *
+ * If \p path is an absolute path, then \p loc_id can be an
+ * identifier for any object in the file as it is used only to
+ * identify the file. If \p path is a relative path, then
+ * \p loc_id must be a file or a group identifier.
+ *
+ * \note
+ * <b>Note on Behavior Change:</b>
+ * The behavior of H5LTpath_valid() was changed in the 1.10.0 release
+ * in the case where the root group, “/”, is the value of path.
+ * This change is described below:
+ * - Let \p loc_id denote a valid HDF5 file identifier, and let
+ * \p check_object_valid be set to true or false.
+ * A call to H5LTpath_valid() with arguments \p loc_id, “/”,
+ * and \p check_object_valid returns a positive value;
+ * in other words, H5LTpath_valid(loc_id, "/", check_object_valid)
+ * returns a positive value.
+ * In HDF5 version 1.8.16, this function returns 0.
+ * - Let ‘root’ denote a valid HDF5 group identifier that refers
+ * to the root group of an HDF5 file, and let \p check_object_valid
+ * be set to true or false.
+ * A call to H5LTpath_valid() with arguments ‘root’, “/”, and
+ * \p check_object_valid returns a positive value;
+ * in other words, H5LTpath_valid(root, "/", check_object_valid)
+ * returns a positive value.
+ * In HDF5 version 1.8.16, this function returns 0.
+ *
+ * \version 1.10.0 Function behavior changed in this release.
+ * See the “Note on Behavior Change” section above.
+ *
+ */
H5_HLDLL htri_t H5LTpath_valid(hid_t loc_id, const char *path, hbool_t check_object_valid);
/*-------------------------------------------------------------------------
@@ -234,6 +1554,82 @@ H5_HLDLL htri_t H5LTpath_valid(hid_t loc_id, const char *path, hbool_t check_obj
*-------------------------------------------------------------------------
*/
+/**
+ *-------------------------------------------------------------------------
+ * \ingroup H5LT
+ *
+ * \brief Opens an HDF5 file image in memory.
+ *
+ * \param[in] buf_ptr A pointer to the supplied initial image
+ * \param[in] buf_size Size of the supplied buffer
+ * \param[in] flags Flags specifying whether to open the image
+ * read-only or read/write, whether HDF5 is to
+ * take control of the buffer, and instruction
+ * regarding releasing the buffer.
+ *
+ * \return Returns a file identifier if successful;
+ * otherwise returns a negative value.
+ * \warning \Bold{Failure Modes:}
+ * \warning H5LTopen_file_image() will fail if either \p buf_ptr is NULL
+ * or \p buf_size equals 0 (zero).
+ *
+ *
+ * \details H5LTopen_file_image() opens the HDF5 file image that is
+ * located in system memory at the address indicated by
+ * \p buf_ptr of size \p buf_size.
+ * H5LTopen_file_image() opens a file image with the
+ * Core driver, #H5FD_CORE.
+ *
+ * A value of NULL for \p buf_ptr is invalid and will
+ * cause the function to fail.
+ *
+ * A value of 0 for \p buf_size is invalid and will cause
+ * the function to fail.
+ *
+ * The flags passed in \p flags specify whether to open the image
+ * read-only or read/write, whether HDF5 is to take control of the
+ * buffer, and instruction regarding releasing the buffer.
+ * Valid values are:
+ * - #H5LT_FILE_IMAGE_OPEN_RW
+ * - Specifies opening the file image in read/write mode.
+ * - Default without this flag: File image will be opened read-only.
+ * .
+ * - #H5LT_FILE_IMAGE_DONT_COPY
+ * - Specifies to not copy the provided file image buffer;
+ * the buffer will be used directly. HDF5 will release the
+ * file image when finished.
+ * - Default without this flag: Copy the file image buffer and
+ * open the copied file image.
+ * .
+ * - #H5LT_FILE_IMAGE_DONT_RELEASE
+ * - Specifies that HDF5 is not to release the buffer when
+ * the file opened with H5LTopen_file_image() is closed;
+ * releasing the buffer will be left to the application.
+ * - Default without this flag: HDF5 will automatically
+ * release the file image buffer after the file image is
+ * closed. This flag is valid only when used with
+ * #H5LT_FILE_IMAGE_DONT_COPY.
+ * .
+ * .
+ *
+ * \note **Motivation:**
+ * \note H5LTopen_file_image() and other elements of HDF5
+ * are used to load an image of an HDF5 file into system memory
+ * and open that image as a regular HDF5 file. An application can
+ * then use the file without the overhead of disk I/O.
+ *
+ * \note **Recommended Reading:**
+ * \note This function is part of the file image operations feature set.
+ * It is highly recommended to study the guide
+ * <a href="https://portal.hdfgroup.org/display/HDF5/HDF5+File+Image+Operations">
+ * HDF5 File Image Operations</a> before using this feature set.\n
+ * See the “See Also” section below for links to other elements of
+ * HDF5 file image operations.
+ *
+ * \todo There is no "See Also" section???
+ *
+ * \since 1.8.9
+ */
H5_HLDLL hid_t H5LTopen_file_image(void *buf_ptr, size_t buf_size, unsigned flags);
#ifdef __cplusplus
diff --git a/hl/src/H5PTpublic.h b/hl/src/H5PTpublic.h
index d74baa5..b881b25 100644
--- a/hl/src/H5PTpublic.h
+++ b/hl/src/H5PTpublic.h
@@ -18,19 +18,201 @@
extern "C" {
#endif
+/**\defgroup H5PT Packet Table
+ *
+ * <em>Creating and manipulating HDF5 datasets to support append-
+ * and read-only operations on table data (H5PT)</em>
+ *
+ * The HDF5 Packet Table API is designed to allow records to be
+ * appended to and read from a table. Packet Table datasets are
+ * chunked, allowing them to grow as needed.
+ *
+ * The Packet Table API, with the H5PT prefix, is not to be confused with
+ * the H5TB Table API (H5TB prefix). The H5TB APIs are stateless
+ * (H5TB Tables do not need to be opened or closed) but H5PT Packet Tables
+ * require less performance overhead. Also, H5TB Tables support insertions
+ * and deletions, while H5PT Packet Tables support only append operations.
+ * H5TB functions should not be called on tables created with the
+ * H5PT API, or vice versa.
+ *
+ * Packet Tables are datasets in an HDF5 file, so while their contents
+ * should not be changed outside of the H5PT API calls, the datatypes of
+ * Packet Tables can be queried using \ref H5Dget_type.
+ * Packet Tables can also be given attributes using the normal HDF5 APIs.
+ *
+ * \note \Bold{Programming hints:}
+ * \note The following line includes the HDF5 Packet Table package, H5PT,
+ * in C applications:
+ * \code #include "hdf5_hl.h" \endcode
+ * Without this include, an application will not have access to
+ * these functions.
+ *
+ * - \ref H5PTappend
+ * \n Appends packets to the end of a packet table.
+ * - \ref H5PTclose
+ * \n Closes an open packet table.
+ * - \ref H5PTcreate
+ * \n Creates a packet table to store fixed-length
+ * or variable-length packets.
+ * - \ref H5PTcreate_fl
+ * \n Creates a packet table to store fixed-length packets.
+ * - \ref H5PTcreate_index
+ * \n Resets a packet table's index to the first packet.
+ * - \ref H5PTfree_vlen_buff
+ * \n Releases memory allocated in the process of
+ * reading variable-length packets.
+ * - \ref H5PTget_dataset
+ * \n Returns the backend dataset of this packet table.
+ * - \ref H5PTget_index
+ * \n Gets the current record index for a packet table
+ * - \ref H5PTget_next
+ * \n Reads packets from a packet table starting at the
+ * current index.
+ * - \ref H5PTget_num_packets
+ * \n Returns the number of packets in a packet table.
+ * - \ref H5PTget_type
+ * \n Returns the backend datatype of this packet table.
+ * - \ref H5PTis_valid
+ * \n Determines whether an identifier points to a packet table.
+ * - \ref H5PTis_varlen
+ * \n Determines whether a packet table contains variable-length
+ * or fixed-length packets.
+ * - \ref H5PTopen
+ * \n Opens an existing packet table.
+ * - \ref H5PTread_packets
+ * \n Reads a number of packets from a packet table.
+ * - \ref H5PTset_index
+ * \n Sets a packet table's index.
+ * .
+ *
+ */
+
/*-------------------------------------------------------------------------
* Create/Open/Close functions
*-------------------------------------------------------------------------
*/
/* NOTE: H5PTcreate is replacing H5PTcreate_fl for better name due to the
removal of H5PTcreate_vl. H5PTcreate_fl may be retired in 1.8.19. */
+
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Creates a packet table to store fixed-length or
+ * variable-length packets.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the packet table to create
+ * \param[in] dtype_id The datatype of the packet
+ * \param[in] chunk_size The size in number of table entries per chunk
+ * \param[in] plist_id Identifier of the property list. Can be used to
+ * specify the compression of the packet table.
+ *
+ * \return Returns an identifier for the new packet table or
+ * #H5I_INVALID_HID on error.
+ *
+ * \details The H5PTcreate() creates and opens a packet table named
+ * \p dset_name attached to the object specified by the
+ * identifier \p loc_id. The created packet table should be closed
+ * with H5PTclose(), eventually.
+ *
+ * The datatype, \p dtype_id, may specify any datatype, including
+ * variable-length data. If \p dtype_id specifies a compound
+ * datatype, one or more fields in that compound type may be
+ * variable-length.
+ *
+ * \p chunk_size is the size in number of table entries per chunk.
+ * Packet table datasets use HDF5 chunked storage
+ * to allow them to grow. This value allows the user
+ * to set the size of a chunk. The chunk size affects
+ * performance.
+ *
+ * \since 1.10.0 and 1.8.17
+ *
+ */
H5_HLDLL hid_t H5PTcreate(hid_t loc_id, const char *dset_name, hid_t dtype_id, hsize_t chunk_size,
hid_t plist_id);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Opens an existing packet table.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the packet table to open
+ *
+ * \return Returns an identifier for the packet table or
+ * #H5I_INVALID_HID on error.
+ *
+ * \details H5PTopen() opens an existing packet table in the file or group
+ * specified by \p loc_id. \p dset_name is the name of the packet
+ * table and is used to identify it in the file. This function is
+ * used to open both fixed-length packet tables and variable-length
+ * packet tables. The packet table should later be closed with
+ * H5PTclose().
+ *
+ */
H5_HLDLL hid_t H5PTopen(hid_t loc_id, const char *dset_name);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Closes an open packet table.
+ *
+ * \param[in] table_id Identifier of packet table to be closed
+ *
+ * \return \herr_t
+ *
+ * \details The H5PTclose() ends access to a packet table specified
+ * by \p table_id.
+ *
+ */
H5_HLDLL herr_t H5PTclose(hid_t table_id);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Creates a packet table to store fixed-length packets
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to create
+ * \param[in] dtype_id The datatype of a packet.
+ * \param[in] chunk_size The size in number of table entries per
+ * chunk.
+ * \param[in] compression The compression level;
+ * a value of 0 through 9.
+ *
+ * \return Returns an identifier for the packet table or
+ * #H5I_INVALID_HID on error.
+ *
+ * \deprecated This function was deprecated in favor of the function
+ * H5PTcreate().
+ *
+ * \details The H5PTcreate_fl() creates and opens a packet table
+ * named \p dset_name attached to the object specified by
+ * the identifier \p loc_id. It should be closed
+ * with H5PTclose().
+ *
+ * The datatype, \p dtype_id, may specify any datatype,
+ * including variable-length data. If \p dtype_id specifies a
+ * compound datatype, one or more fields in that compound type
+ * may be variable-length.
+ *
+ * \p chunk_size is the size in number of table entries per chunk.
+ * Packet table datasets use HDF5 chunked storage
+ * to allow them to grow. This value allows the user
+ * to set the size of a chunk. The chunk size affects
+ * performance.
+ *
+ * \p compression is the compression level, a value of 0 through 9.
+ * Level 0 is faster but offers the least compression;
+ * level 9 is slower but offers maximum compression.
+ * A setting of -1 indicates that no compression is desired.
+
+ */
/* This function may be removed from the packet table in release 1.8.19. */
H5_HLDLL hid_t H5PTcreate_fl(hid_t loc_id, const char *dset_name, hid_t dtype_id, hsize_t chunk_size,
int compression);
@@ -39,24 +221,148 @@ H5_HLDLL hid_t H5PTcreate_fl(hid_t loc_id, const char *dset_name, hid_t dtype_id
* Write functions
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Appends packets to the end of a packet table.
+ *
+ * \param[in] table_id Identifier of packet table to which
+ * packets should be appended
+ * \param[in] nrecords Number of packets to be appended
+ * \param[in] data Buffer holding data to write
+ *
+ * \return \herr_t
+ *
+ * \details The H5PTappend() writes \p nrecords packets to the end of a
+ * packet table specified by \p table_id. \p data is a buffer
+ * containing the data to be written. For a packet table holding
+ * fixed-length packets, this data should be in the packet
+ * table's datatype. For a variable-length packet table,
+ * the data should be in the form of #hvl_t structs.
+ *
+ */
H5_HLDLL herr_t H5PTappend(hid_t table_id, size_t nrecords, const void *data);
/*-------------------------------------------------------------------------
* Read functions
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Reads packets from a packet table starting at the current index.
+ *
+ * \param[in] table_id Identifier of packet table to read from
+ * \param[in] nrecords Number of packets to be read
+ * \param[out] data Buffer into which to read data
+ *
+ * \return \herr_t
+ *
+ * \details The H5PTget_next() reads \p nrecords packets starting with
+ * the "current index" from a packet table specified by \p table_id.
+ * The packet table's index is set and reset with H5PTset_index()
+ * and H5PTcreate_index(). \p data is a buffer into which the
+ * data should be read.
+ *
+ * For a packet table holding variable-length records, the data
+ * returned in the buffer will be in form of a #hvl_t struct
+ * containing the length of the data and a pointer to it in memory.
+ * The memory used by this data must be freed using H5PTfree_vlen_buff().
+ *
+ */
H5_HLDLL herr_t H5PTget_next(hid_t table_id, size_t nrecords, void *data);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Reads a number of packets from a packet table.
+ *
+ * \param[in] table_id Identifier of packet table to read from
+ * \param[in] start Packet to start reading from
+ * \param[in] nrecords Number of packets to be read
+ * \param[out] data Buffer into which to read data.
+ *
+ * \return \herr_t
+ *
+ * \details The H5PTread_packets() reads \p nrecords packets starting at
+ * packet number \p start from a packet table specified by
+ * \p table_id. \p data is a buffer into which the data should
+ * be read.
+ *
+ * For a packet table holding variable-length records, the data
+ * returned in the buffer will be in form of #hvl_t structs,
+ * each containing the length of the data and a pointer to it in
+ * memory. The memory used by this data must be freed using
+ * H5PTfree_vlen_buff().
+ *
+ */
H5_HLDLL herr_t H5PTread_packets(hid_t table_id, hsize_t start, size_t nrecords, void *data);
/*-------------------------------------------------------------------------
* Inquiry functions
*-------------------------------------------------------------------------
*/
+
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Returns the number of packets in a packet table.
+ *
+ * \param[in] table_id Identifier of packet table to query
+ * \param[out] nrecords Number of packets in packet table
+ *
+ * \return \herr_t
+ *
+ * \details The H5PTget_num_packets() returns by reference the number
+ * of packets in a packet table specified by \p table_id.
+ *
+ */
H5_HLDLL herr_t H5PTget_num_packets(hid_t table_id, hsize_t *nrecords);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Determines whether an identifier points to a packet table.
+ *
+ * \param[in] table_id Identifier to query
+ *
+ * \return Returns a non-negative value if \p table_id is
+ * a valid packet table, otherwise returns a negative value.
+ *
+ * \details The H5PTis_valid() returns a non-negative value if
+ * \p table_id corresponds to an open packet table,
+ * and returns a negative value otherwise.
+ *
+ */
H5_HLDLL herr_t H5PTis_valid(hid_t table_id);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Determines whether a packet table contains
+ * variable-length or fixed-length packets.
+ *
+ * \param[in] table_id Packet table to query
+ *
+ * \return Returns 1 for a variable-length packet table,
+ * 0 for fixed-length, or a negative value on error.
+ *
+ * \details The H5PTis_varlen() returns 1 (TRUE) if \p table_id is
+ * a packet table containing variable-length records.
+ * It returns 0 (FALSE) if \p table_id is a packet table
+ * containing fixed-length records. If \p table_id is not a
+ * packet table, a negative value is returned.
+ *
+ * \version 1.10.0 and 1.8.17 Function re-introduced.
+ * Function had been removed in 1.8.3.
+ *
+ */
H5_HLDLL herr_t H5PTis_varlen(hid_t table_id);
/*-------------------------------------------------------------------------
@@ -66,8 +372,42 @@ H5_HLDLL herr_t H5PTis_varlen(hid_t table_id);
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Returns the backend dataset of this packet table.
+ *
+ * \param[in] table_id Identifier of the packet table
+ *
+ * \return Returns a dataset identifier or H5I_INVALID_HID on error.
+ *
+ * \details The H5PTget_dataset() returns the identifier of the dataset
+ * storing the packet table \p table_id. This dataset identifier
+ * will be closed by H5PTclose().
+ *
+ * \since 1.10.0 and 1.8.17
+ *
+ */
H5_HLDLL hid_t H5PTget_dataset(hid_t table_id);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Returns the backend datatype of this packet table.
+ *
+ * \param[in] table_id Identifier of the packet table
+ *
+ * \return Returns a datatype identifier or H5I_INVALID_HID on error.
+ *
+ * \details The H5PTget_type() returns the identifier of the datatype
+ * used by the packet table \p table_id. This datatype
+ * identifier will be closed by H5PTclose().
+ *
+ * \since 1.10.0 and 1.8.17
+ *
+ */
H5_HLDLL hid_t H5PTget_type(hid_t table_id);
/*-------------------------------------------------------------------------
@@ -77,10 +417,63 @@ H5_HLDLL hid_t H5PTget_type(hid_t table_id);
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Resets a packet table's index to the first packet.
+ *
+ * \param[in] table_id Identifier of packet table whose index
+ * should be initialized.
+ *
+ * \return \herr_t
+ *
+ * \details Each packet table keeps an index of the "current" packet
+ * so that \c get_next can iterate through the packets in order.
+ * H5PTcreate_index() initializes a packet table's index, and
+ * should be called before using \c get_next. The index must be
+ * initialized every time a packet table is created or opened;
+ * this information is lost when the packet table is closed.
+ *
+ */
H5_HLDLL herr_t H5PTcreate_index(hid_t table_id);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Sets a packet table's index.
+ *
+ * \param[in] table_id Identifier of packet table whose index is to be set
+ * \param[in] pt_index The packet to which the index should point
+ *
+ * \return \herr_t
+ *
+ * \details Each packet table keeps an index of the "current" packet
+ * so that \c get_next can iterate through the packets in order.
+ * H5PTset_index() sets this index to point to a user-specified
+ * packet (the packets are zero-indexed).
+ *
+ */
H5_HLDLL herr_t H5PTset_index(hid_t table_id, hsize_t pt_index);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Gets the current record index for a packet table.
+ *
+ * \param[in] table_id Table identifier
+ * \param[out] pt_index Current record index
+ *
+ * \return \herr_t
+ *
+ * \details The H5PTget_index() returns the current record index
+ * \p pt_index for the table identified by \p table_id.
+ *
+ * \since 1.8.0
+ *
+ */
H5_HLDLL herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index);
/*-------------------------------------------------------------------------
@@ -90,6 +483,29 @@ H5_HLDLL herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index);
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5PT
+ *
+ * \brief Releases memory allocated in the process of reading
+ * variable-length packets.
+ *
+ * \param[in] table_id Packet table whose memory should be freed.
+ * \param[in] bufflen Size of \p buff
+ * \param[in] buff Buffer that was used to read in variable-length
+ * packets
+ *
+ * \return \herr_t
+ *
+ * \details When variable-length packets are read, memory is automatically
+ * allocated to hold them, and must be freed. H5PTfree_vlen_buff()
+ * frees this memory, and should be called whenever packets are
+ * read from a variable-length packet table.
+ *
+ * \version 1.10.0 and 1.8.17 Function re-introduced.
+ * Function had been removed in 1.8.3.
+ *
+ */
H5_HLDLL herr_t H5PTfree_vlen_buff(hid_t table_id, size_t bufflen, void *buff);
#ifdef __cplusplus
diff --git a/hl/src/H5TBpublic.h b/hl/src/H5TBpublic.h
index 1750490..042bf99 100644
--- a/hl/src/H5TBpublic.h
+++ b/hl/src/H5TBpublic.h
@@ -18,6 +18,64 @@
extern "C" {
#endif
+/**\defgroup H5TB Table
+ *
+ * <em>Creating and manipulating HDF5 datasets intended to be
+ * interpreted as tables (H5TB)</em>
+ *
+ * The HDF5 Table API defines a standard storage for HDF5 datasets
+ * that are intended to be interpreted as tables. A table is defined
+ * as a collection of records whose values are stored in fixed-length
+ * fields. All records have the same structure, and all values in
+ * each field have the same data type.
+ *
+ * \note \Bold{Programming hints:}
+ * \note To use any of these functions or subroutines,
+ * you must first include the relevant include file (C) or
+ * module (Fortran) in your application.
+ * \note The following line includes the HDF5 Table package, H5TB,
+ * in C applications:
+ * \code #include "hdf5_hl.h" \endcode
+ * \note To include the H5TB module in Fortran applications specify:
+ * \code use h5tb \endcode
+ * Fortran applications must also include \ref H5open before
+ * any HDF5 calls to initialize global variables and \ref H5close
+ * after all HDF5 calls to close the Fortran interface.
+ *
+ * - Creation
+ * - \ref H5TBmake_table
+ * - Storage
+ * - \ref H5TBappend_records (No Fortran)
+ * - \ref H5TBwrite_records (No Fortran)
+ * - \ref H5TBwrite_fields_name
+ * - \ref H5TBwrite_fields_index
+ * .
+ * - Modification
+ * - \ref H5TBdelete_record (No Fortran)
+ * - \ref H5TBinsert_record (No Fortran)
+ * - \ref H5TBadd_records_from (No Fortran)
+ * - \ref H5TBcombine_tables (No Fortran)
+ * - \ref H5TBinsert_field
+ * - \ref H5TBdelete_field
+ * .
+ * - Retrieval
+ * - \ref H5TBread_table
+ * - \ref H5TBread_records (No Fortran)
+ * - \ref H5TBread_fields_name
+ * - \ref H5TBread_fields_index
+ * .
+ * - Query
+ * - \ref H5TBget_table_info
+ * - \ref H5TBget_field_info
+ * .
+ * - Query Table Attributes
+ * - \ref H5TBAget_fill
+ * - \ref H5TBAget_title
+ * .
+ * .
+ *
+ */
+
/*-------------------------------------------------------------------------
*
* Create functions
@@ -25,6 +83,38 @@ extern "C" {
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Creates and writes a table
+ *
+ * \param[in] table_title The title of the table
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to create
+ * \param[in] nfields The number of fields
+ * \param[in] nrecords The number of records
+ * \param[in] type_size The size in bytes of the structure
+ * associated with the table;
+ * This value is obtained with \c sizeof().
+ * \param[in] field_names An array containing the names of
+ * the fields
+ * \param[in] field_offset An array containing the offsets of
+ * the fields
+ * \param[in] field_types An array containing the type of
+ * the fields
+ * \param[in] chunk_size The chunk size
+ * \param[in] fill_data Fill values data
+ * \param[in] compress Flag that turns compression on or off
+ * \param[in] buf Buffer with data to be written to the table
+ *
+ * \return \herr_t
+ *
+ * \details H5TBmake_table() creates and writes a dataset named
+ * \p dset_name attached to the object specified by the
+ * identifier loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBmake_table(const char *table_title, hid_t loc_id, const char *dset_name, hsize_t nfields,
hsize_t nrecords, size_t type_size, const char *field_names[],
const size_t *field_offset, const hid_t *field_types, hsize_t chunk_size,
@@ -37,17 +127,128 @@ H5_HLDLL herr_t H5TBmake_table(const char *table_title, hid_t loc_id, const char
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Adds records to the end of the table
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to overwrite
+ * \param[in] nrecords The number of records to append
+ * \param[in] type_size The size of the structure type,
+ * as calculated by \c sizeof().
+ * \param[in] field_offset An array containing the offsets of
+ * the fields. These offsets can be
+ * calculated with the #HOFFSET macro
+ * \param[in] dst_sizes An array containing the sizes of
+ * the fields
+ * \param[in] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBappend_records() adds records to the end of the table
+ * named \p dset_name attached to the object specified by the
+ * identifier \p loc_id. The dataset is extended to hold the
+ * new records.
+ *
+ */
H5_HLDLL herr_t H5TBappend_records(hid_t loc_id, const char *dset_name, hsize_t nrecords, size_t type_size,
const size_t *field_offset, const size_t *dst_sizes, const void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Overwrites records
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to overwrite
+ * \param[in] start The zero index record to start writing
+ * \param[in] nrecords The number of records to write
+ * \param[in] type_size The size of the structure type, as
+ * calculated by \c sizeof().
+ * \param[in] field_offset An array containing the offsets of
+ * the fields. These offsets can be
+ * calculated with the #HOFFSET macro
+ * \param[in] dst_sizes An array containing the sizes of
+ * the fields
+ * \param[in] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBwrite_records() overwrites records starting at the zero
+ * index position start of the table named \p dset_name attached
+ * to the object specified by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBwrite_records(hid_t loc_id, const char *dset_name, hsize_t start, hsize_t nrecords,
size_t type_size, const size_t *field_offset, const size_t *dst_sizes,
const void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Overwrites fields
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to overwrite
+ * \param[in] field_names The names of the fields to write
+ * \param[in] start The zero index record to start writing
+ * \param[in] nrecords The number of records to write
+ * \param[in] type_size The size of the structure type, as
+ * calculated by \c sizeof().
+ * \param[in] field_offset An array containing the offsets of
+ * the fields. These offsets can be
+ * calculated with the #HOFFSET macro
+ * \param[in] dst_sizes An array containing the sizes of
+ * the fields
+ * \param[in] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBwrite_fields_name() overwrites one or several fields
+ * specified by \p field_names with data in \p buf from a
+ * dataset named \p dset_name attached to the object specified
+ * by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBwrite_fields_name(hid_t loc_id, const char *dset_name, const char *field_names,
hsize_t start, hsize_t nrecords, size_t type_size,
const size_t *field_offset, const size_t *dst_sizes, const void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Overwrites fields
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to overwrite
+ * \param[in] nfields The number of fields to overwrite.
+ * This parameter is also the size of the
+ * \p field_index array.
+ * \param[in] field_index The indexes of the fields to write
+ * \param[in] start The zero based index record to start writing
+ * \param[in] nrecords The number of records to write
+ * \param[in] type_size The size of the structure type, as
+ * calculated by \c sizeof().
+ * \param[in] field_offset An array containing the offsets of
+ * the fields. These offsets can be
+ * calculated with the #HOFFSET macro
+ * \param[in] dst_sizes An array containing the sizes of
+ * the fields
+ * \param[in] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBwrite_fields_index() overwrites one or several fields
+ * specified by \p field_index with a buffer \p buf from a
+ * dataset named \p dset_name attached to the object
+ * specified by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBwrite_fields_index(hid_t loc_id, const char *dset_name, hsize_t nfields,
const int *field_index, hsize_t start, hsize_t nrecords,
size_t type_size, const size_t *field_offset, const size_t *dst_sizes,
@@ -60,18 +261,128 @@ H5_HLDLL herr_t H5TBwrite_fields_index(hid_t loc_id, const char *dset_name, hsiz
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Reads a table
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[in] dst_size The size of the structure type,
+ * as calculated by \c sizeof()
+ * \param[in] dst_offset An array containing the offsets of
+ * the fields. These offsets can be
+ * calculated with the #HOFFSET macro
+ * \param[in] dst_sizes An array containing the sizes of
+ * the fields. These sizes can be
+ * calculated with the sizeof() macro.
+ * \param[in] dst_buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBread_table() reads a table named
+ * \p dset_name attached to the object specified by
+ * the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBread_table(hid_t loc_id, const char *dset_name, size_t dst_size, const size_t *dst_offset,
const size_t *dst_sizes, void *dst_buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ * \brief Reads one or several fields. The fields are identified by name.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[in] field_names An array containing the names of the
+ * fields to read
+ * \param[in] start The start record to read from
+ * \param[in] nrecords The number of records to read
+ * \param[in] type_size The size in bytes of the structure associated
+ * with the table
+ * (This value is obtained with \c sizeof().)
+ * \param[in] field_offset An array containing the offsets of the fields
+ * \param[in] dst_sizes An array containing the size in bytes of
+ * the fields
+ * \param[out] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBread_fields_name() reads the fields identified
+ * by \p field_names from a dataset named \p dset_name
+ * attached to the object specified by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBread_fields_name(hid_t loc_id, const char *dset_name, const char *field_names,
hsize_t start, hsize_t nrecords, size_t type_size,
const size_t *field_offset, const size_t *dst_sizes, void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Reads one or several fields. The fields are identified by index.
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[in] nfields The number of fields to read
+ * (This parameter is also the size of the
+ * \p field_index array.)
+ * fields to read
+ * \param[in] field_index The indexes of the fields to read
+ * \param[in] start The start record to read from
+ * \param[in] nrecords The number of records to read
+ * \param[in] type_size The size in bytes of the structure associated
+ * with the table
+ * (This value is obtained with \c sizeof())
+ * \param[in] field_offset An array containing the offsets of the fields
+ * \param[in] dst_sizes An array containing the size in bytes of
+ * the fields
+ * \param[out] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBread_fields_index() reads the fields identified
+ * by \p field_index from a dataset named \p dset_name attached
+ * to the object specified by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBread_fields_index(hid_t loc_id, const char *dset_name, hsize_t nfields,
const int *field_index, hsize_t start, hsize_t nrecords,
size_t type_size, const size_t *field_offset, const size_t *dst_sizes,
void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Reads records
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[in] start The start record to read from
+ * \param[in] nrecords The number of records to read
+ * \param[in] type_size The size of the structure type,
+ * as calculated by \c sizeof()
+ * \param[in] dst_offset An array containing the offsets of the
+ * fields. These offsets can be calculated
+ * with the #HOFFSET macro
+ * \param[in] dst_sizes An array containing the size in bytes of
+ * the fields
+ * \param[out] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBread_records() reads some records identified from a dataset
+ * named \p dset_name attached to the object specified by the
+ * identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBread_records(hid_t loc_id, const char *dset_name, hsize_t start, hsize_t nrecords,
size_t type_size, const size_t *dst_offset, const size_t *dst_sizes,
void *buf);
@@ -83,8 +394,52 @@ H5_HLDLL herr_t H5TBread_records(hid_t loc_id, const char *dset_name, hsize_t st
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Gets the table dimensions
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] nfields The number of fields
+ * \param[out] nrecords The number of records
+ *
+ * \return \herr_t
+ *
+ * \details H5TBget_table_info() retrieves the table dimensions from a
+ * dataset named \p dset_name attached to the object specified
+ * by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBget_table_info(hid_t loc_id, const char *dset_name, hsize_t *nfields, hsize_t *nrecords);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Gets information about a table
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset to read
+ * \param[out] field_names An array containing the names of the fields
+ * \param[out] field_sizes An array containing the size of the fields
+ * \param[out] field_offsets An array containing the offsets of the fields
+ * \param[out] type_size The size of the HDF5 datatype associated
+ * with the table. (More specifically,
+ * the size in bytes of the HDF5 compound
+ * datatype used to define a row, or record,
+ * in the table)
+ *
+ * \return \herr_t
+ *
+ * \details H5TBget_field_info() gets information about a dataset
+ * named \p dset_name attached to the object specified
+ * by the identifier \p loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBget_field_info(hid_t loc_id, const char *dset_name, char *field_names[],
size_t *field_sizes, size_t *field_offsets, size_t *type_size);
@@ -95,21 +450,162 @@ H5_HLDLL herr_t H5TBget_field_info(hid_t loc_id, const char *dset_name, char *fi
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Delete records
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset
+ * \param[in] start The start record to delete from
+ * \param[in] nrecords The number of records to delete
+ *
+ * \return \herr_t
+ *
+ * \details H5TBdelete_record() deletes nrecords number of records starting
+ * from \p start from the middle of the table \p dset_name
+ * ("pulling up" all the records after it).
+ *
+ */
H5_HLDLL herr_t H5TBdelete_record(hid_t loc_id, const char *dset_name, hsize_t start, hsize_t nrecords);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Insert records
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the dataset
+ * \param[in] start The position to insert
+ * \param[in] nrecords The number of records to insert
+ * \param[in] dst_size The size in bytes of the structure
+ * associated with the table
+ * \param[in] dst_offset An array containing the offsets of the
+ * fields
+ * \param[in] dst_sizes An array containing the size in bytes of
+ * the fields
+ * \param[in] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBinsert_record() inserts records into the middle of the table
+ * ("pushing down" all the records after it)
+ *
+ */
H5_HLDLL herr_t H5TBinsert_record(hid_t loc_id, const char *dset_name, hsize_t start, hsize_t nrecords,
size_t dst_size, const size_t *dst_offset, const size_t *dst_sizes,
void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Add records from first table to second table
+ *
+ * \fg_loc_id
+ * \param[in] dset_name1 The name of the dataset to read the records
+ * \param[in] start1 The position to read the records from the
+ * first table
+ * \param[in] nrecords The number of records to read from the first
+ * table
+ * \param[in] dset_name2 The name of the dataset to write the records
+ * \param[in] start2 The position to write the records on the
+ * second table
+ *
+ * \return \herr_t
+ *
+ * \details H5TBadd_records_from() adds records from a dataset named
+ * \p dset_name1 to a dataset named \p dset_name2. Both tables
+ * are attached to the object specified by the identifier loc_id.
+ *
+ */
H5_HLDLL herr_t H5TBadd_records_from(hid_t loc_id, const char *dset_name1, hsize_t start1, hsize_t nrecords,
const char *dset_name2, hsize_t start2);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Combines records from two tables into a third
+ *
+ * \param[in] loc_id1 Identifier of the file or group in which
+ * the first table is located
+ * \param[in] dset_name1 The name of the first table to combine
+ * \param[in] loc_id2 Identifier of the file or group in which
+ * the second table is located
+ * \param[in] dset_name2 The name of the second table to combine
+ * \param[in] dset_name3 The name of the new table
+ *
+ * \return \herr_t
+ *
+ * \details H5TBcombine_tables() combines records from two datasets named
+ * \p dset_name1 and \p dset_name2, to a new table named
+ * \p dset_name3. These tables can be located on different files,
+ * identified by \p loc_id1 and \p loc_id2 (identifiers obtained
+ * with H5Fcreate()). They can also be located on the same file.
+ * In this case one uses the same identifier for both parameters
+ * \p loc_id1 and \p loc_id2. If two files are used, the third
+ * table is written in the first file.
+ *
+ */
H5_HLDLL herr_t H5TBcombine_tables(hid_t loc_id1, const char *dset_name1, hid_t loc_id2,
const char *dset_name2, const char *dset_name3);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Insert a new field into a table
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the table
+ * \param[in] field_name The name of the field to insert
+ * \param[in] field_type The data type of the field
+ * \param[in] position The zero based index position where to
+ * insert the field
+ * \param[in] fill_data Fill value data for the field. This parameter
+ * can be NULL
+ * \param[in] buf Buffer with data
+ *
+ * \return \herr_t
+ *
+ * \details H5TBinsert_field() inserts a new field named \p field_name into
+ * the table \p dset_name. Note: this function requires the table
+ * to be re-created and rewritten in its entirety, and this can result
+ * in some unused space in the file, and can also take a great deal of
+ * time if the table is large.
+ *
+ */
H5_HLDLL herr_t H5TBinsert_field(hid_t loc_id, const char *dset_name, const char *field_name,
hid_t field_type, hsize_t position, const void *fill_data, const void *buf);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Deletes a field from a table
+ *
+ * \fg_loc_id
+ * \param[in] dset_name The name of the table
+ * \param[in] field_name The name of the field to delete
+ *
+ * \return \herr_t
+ *
+ * \details H5TBdelete_field() deletes a field named \p field_name from the
+ * table \p dset_name. Note: this function requires the table to be
+ * re-created and rewritten in its entirety, and this can result in
+ * some unused space in the file, and can also take a great deal of
+ * time if the table is large.
+ *
+ */
H5_HLDLL herr_t H5TBdelete_field(hid_t loc_id, const char *dset_name, const char *field_name);
/*-------------------------------------------------------------------------
@@ -119,8 +615,51 @@ H5_HLDLL herr_t H5TBdelete_field(hid_t loc_id, const char *dset_name, const char
*-------------------------------------------------------------------------
*/
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Reads a table's title
+ *
+ * \fg_loc_id
+ * \param[out] table_title Buffer for title name
+ *
+ * \return \herr_t
+ *
+ * \details H5TBget_title() returns the title of the table identified
+ * by \p loc_id in a buffer \p table_title.
+ *
+ */
H5_HLDLL herr_t H5TBAget_title(hid_t loc_id, char *table_title);
+/**
+ * --------------------------------------------------------------------------
+ * \ingroup H5TB
+ *
+ *
+ * \brief Reads the table attribute fill values
+ *
+ * \fg_loc_id
+ * \param[in] dset_name Name of table
+ * \param[in] dset_id Table identifier
+ * \param[out] dst_buf Buffer of fill values for table fields
+ *
+ * \return
+ * \return A return value of 1 indicates that a fill value is present.
+ * \return A return value of 0 indicates a fill value is not present.
+ * \return A return value <0 indicates an error.
+ *
+ *
+ * \details H5TBget_fill() reads the table attribute fill values into
+ * the buffer \p dst_buf for the table specified by \p dset_id
+ * and \p dset_name located in \p loc_id.
+ *
+ *
+ * \par Example
+ * \include H5TBAget_fill.c
+ *
+ */
H5_HLDLL htri_t H5TBAget_fill(hid_t loc_id, const char *dset_name, hid_t dset_id, unsigned char *dst_buf);
#ifdef __cplusplus