123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930 |
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the COPYING file, which can be found at the root of the source code *
- * distribution tree, or in https://www.hdfgroup.org/licenses. *
- * If you do not have access to either file, you may request a copy from *
- * help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- /*
- * This file contains public declarations for the H5R module.
- */
- #ifndef H5Rpublic_H
- #define H5Rpublic_H
- /* Public headers needed by this file */
- #include "H5public.h"
- #include "H5Gpublic.h"
- #include "H5Ipublic.h"
- /*****************/
- /* Public Macros */
- /*****************/
- /* Deprecated reference buffer sizes that are kept for backward compatibility */
- #define H5R_OBJ_REF_BUF_SIZE sizeof(haddr_t)
- #define H5R_DSET_REG_REF_BUF_SIZE (sizeof(haddr_t) + 4)
- /**
- * Default reference buffer size.
- *
- * \internal Note! Be careful with the sizes of the references because they
- * should really depend on the run-time values in the file.
- */
- #define H5R_REF_BUF_SIZE (64)
- /*******************/
- /* Public Typedefs */
- /*******************/
- //! <!-- [H5R_type_t_snip] -->
- /**
- * Reference types allowed.
- *
- * \internal DO NOT CHANGE THE ORDER or VALUES as reference type values are
- * encoded into the datatype message header.
- */
- typedef enum {
- H5R_BADTYPE = (-1), /**< Invalid reference type */
- H5R_OBJECT1 = 0, /**< Backward compatibility (object) */
- H5R_DATASET_REGION1 = 1, /**< Backward compatibility (region) */
- H5R_OBJECT2 = 2, /**< Object reference */
- H5R_DATASET_REGION2 = 3, /**< Region reference */
- H5R_ATTR = 4, /**< Attribute Reference */
- H5R_MAXTYPE = 5 /**< Highest type (invalid) */
- } H5R_type_t;
- //! <!-- [H5R_type_t_snip] -->
- /* Deprecated types are kept for backward compatibility with previous versions */
- //! <!-- [hobj_ref_t_snip] -->
- /**
- * \deprecated Deprecated object reference type that is used with deprecated
- * reference APIs.
- *
- * \note This type can only be used with the "native" HDF5 VOL connector.
- */
- typedef haddr_t hobj_ref_t;
- //! <!-- [hobj_ref_t_snip] -->
- //! <!-- [hdset_reg_ref_t_snip] -->
- /**
- * Buffer to store heap ID and index
- *
- * This needs to be large enough to store largest #haddr_t in a worst case
- * machine (8 bytes currently) plus an int.
- *
- * \deprecated Dataset region reference type that is used with deprecated
- * reference APIs.
- *
- * \note This type can only be used with the "native" HDF5 VOL connector.
- */
- typedef struct {
- uint8_t __data[H5R_DSET_REG_REF_BUF_SIZE];
- } hdset_reg_ref_t;
- //! <!-- [hdset_reg_ref_t_snip] -->
- //! <!-- [H5R_ref_t_snip] -->
- /**
- * Opaque reference type. The same reference type is used for object,
- * dataset region and attribute references. This is the type that
- * should always be used with the current reference API.
- */
- typedef struct {
- union {
- uint8_t __data[H5R_REF_BUF_SIZE]; /**< opaque data */
- int64_t align; /**< ensures alignment */
- } u;
- } H5R_ref_t;
- //! <!-- [H5R_ref_t_snip] -->
- /********************/
- /* Public Variables */
- /********************/
- /*********************/
- /* Public Prototypes */
- /*********************/
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Constructors */
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Creates an object reference
- *
- * \fgdta_loc_id
- * \param[in] name Name of object
- * \oapl_id
- * \param[out] ref_ptr Pointer to reference
- *
- * \return \herr_t
- *
- * \details H5Rcreate_object() creates a reference pointing to the
- * object named \p name located at \p loc_id. The parameters \p
- * loc_id and \p name are used to locate the object.
- *
- * The parameter \p oapl_id is an object access property list
- * identifier for the referenced object. The access property list
- * must be of the same type as the object being referenced, that is
- * a group, dataset or committed datatype property list.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- * H5Rdestroy() should be used to release the resource from the
- * reference.
- *
- */
- H5_DLL herr_t H5Rcreate_object(hid_t loc_id, const char *name, hid_t oapl_id, H5R_ref_t *ref_ptr);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Creates a region reference
- *
- * \fgdta_loc_id
- * \param[in] name Name of object
- * \space_id
- * \oapl_id
- * \param[out] ref_ptr Pointer to reference
- *
- * \return \herr_t
- *
- * \details H5Rcreate_region() creates the reference, \p ref_ptr,
- * pointing to the region represented by \p space_id within the
- * object named name located at \p loc_id.
- *
- * The parameters \p loc_id and \p name are used to locate the
- * object. The parameter \p space_id identifies the dataset region
- * that a dataset region reference points to.
- *
- * The parameter \p oapl_id is an object access property list
- * identifier for the referenced object. The access property list
- * must be of the same type as the object being referenced, that is
- * a dataset property list in this case.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- * H5Rdestroy() should be used to release the resource from the
- * reference.
- *
- */
- H5_DLL herr_t H5Rcreate_region(hid_t loc_id, const char *name, hid_t space_id, hid_t oapl_id,
- H5R_ref_t *ref_ptr);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Creates an attribute reference
- *
- * \fgdta_loc_id
- * \param[in] name Name of object
- * \param[in] attr_name Name of attribute
- * \oapl_id
- * \param[out] ref_ptr Pointer to reference
- *
- * \return \herr_t
- *
- * \details H5Rcreate_attr() creates the reference, \p ref_ptr, pointing
- * to the attribute named \p attr_name and attached to the object
- * named \p name located at \p loc_id.
- *
- * The parameters \p loc_id and \p name locate the object. The
- * parameter \p attr_name specifies the attribute within the object.
- *
- * The parameter \p oapl_id is an object access property list
- * identifier for the object that the referenced attribute is
- * attached to. The access property list must be of the same type
- * as that object, that is a group, dataset or committed datatype
- * property list.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- * H5Rdestroy() should be used to release the resource from the
- * reference.
- *
- */
- H5_DLL herr_t H5Rcreate_attr(hid_t loc_id, const char *name, const char *attr_name, hid_t oapl_id,
- H5R_ref_t *ref_ptr);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Closes a reference
- *
- * \param[in] ref_ptr Pointer to reference
- *
- * \return \herr_t
- *
- * \details Given a reference, \p ref_ptr, to an object, region or attribute
- * attached to an object, H5Rdestroy() releases allocated resources
- * from a previous create call.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- */
- H5_DLL herr_t H5Rdestroy(H5R_ref_t *ref_ptr);
- /* Info */
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the type of a reference
- *
- * \param[in] ref_ptr Pointer to reference
- *
- * \return Returns a valid reference type if successful; otherwise returns #H5R_BADTYPE .
- *
- * \details Given a reference, \p ref_ptr, H5Rget_type() returns the
- * type of the reference.
- *
- * Valid returned reference types are:
- * \snippet this H5R_type_t_snip
- *
- * Note that #H5R_OBJECT1 and #H5R_DATASET_REGION1 can never be
- * associated to an \ref H5R_ref_t reference and can therefore never be
- * returned through that function.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- */
- H5_DLL H5R_type_t H5Rget_type(const H5R_ref_t *ref_ptr);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Determines whether two references are equal
- *
- * \param[in] ref1_ptr Pointer to reference to compare
- * \param[in] ref2_ptr Pointer to reference to compare
- *
- * \return Returns a positive value if the references are equal. Returns
- * 0 if the references are not equal. Returns a negative value when the
- * function fails.
- *
- * \details H5Requal() determines whether two references point to the
- * same object, region or attribute.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- */
- H5_DLL htri_t H5Requal(const H5R_ref_t *ref1_ptr, const H5R_ref_t *ref2_ptr);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Copies an existing reference
- *
- * \param[in] src_ref_ptr Pointer to reference to copy
- * \param[out] dst_ref_ptr Pointer to output reference
- *
- * \return \herr_t
- *
- * \details H5Rcopy() creates a copy of an existing reference.
- * \p src_ref_ptr points to the reference to copy and \p dst_ref_ptr is the
- * pointer to the destination reference.
- *
- */
- H5_DLL herr_t H5Rcopy(const H5R_ref_t *src_ref_ptr, H5R_ref_t *dst_ref_ptr);
- /* Dereference */
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Opens the HDF5 object referenced
- *
- * \param[in] ref_ptr Pointer to reference to open
- * \rapl_id
- * \oapl_id
- *
- * \return \hid_t{object}
- *
- * \details Given a reference, \p ref_ptr, to an object, a region in
- * an object, or an attribute attached to an object, H5Ropen_object()
- * opens that object and returns an identifier.
- *
- * The parameter \p oapl_id is an object access property list
- * identifier for the referenced object. The access property list
- * must be of the same type as the object being referenced, that is
- * a group or dataset property list.
- *
- * \ref H5R_ref_t is defined in H5Rpublic.h as:
- * \snippet this H5R_ref_t_snip
- *
- * The object opened with this function should be closed when it
- * is no longer needed so that resource leaks will not develop. Use
- * the appropriate close function such as H5Oclose() or H5Dclose()
- * for datasets.
- *
- */
- H5_DLL hid_t H5Ropen_object(H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t oapl_id);
- /**
- * --------------------------------------------------------------------------
- * \ingroup ASYNC
- * \async_variant_of{H5Ropen}
- */
- H5_DLL hid_t H5Ropen_object_async(const char *app_file, const char *app_func, unsigned app_line,
- H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t oapl_id, hid_t es_id);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Sets up a dataspace and selection as specified by a region reference.
- *
- * \param[in] ref_ptr Pointer to reference to open
- * \rapl_id
- * \oapl_id
- *
- * \return \hid_t{dataspace}
- *
- * \details H5Ropen_region() creates a copy of the dataspace of the
- * dataset pointed to by a region reference, \p ref_ptr, and defines
- * a selection matching the selection pointed to by \p ref_ptr within
- * the dataspace copy.
- *
- * The parameter \p rapl id is a reference access property list
- * identifier for the reference. The access property list can
- * be used to access external files that the reference points to
- * (through a file access property list).
- *
- * The parameter \p oapl id is an object access property list
- * identifier for the referenced object. The access property list
- * must be of the same type as the object being referenced, that is
- * a dataset property list in that case.
- *
- * Use H5Sclose() to release the dataspace identifier returned by
- * this function when the identifier is no longer needed.
- *
- */
- H5_DLL hid_t H5Ropen_region(H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t oapl_id);
- /**
- * --------------------------------------------------------------------------
- * \ingroup ASYNC
- * \async_variant_of{H5Ropen_region}
- */
- H5_DLL hid_t H5Ropen_region_async(const char *app_file, const char *app_func, unsigned app_line,
- H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t oapl_id, hid_t es_id);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Opens the HDF5 attribute referenced
- *
- * \param[in] ref_ptr Pointer to reference to open
- * \rapl_id
- * \aapl_id
- *
- * \return \hid_t{attribute}
- *
- * \details Given a reference, \p ref_ptr, to an attribute attached to
- * an object, H5Ropen_attr() opens the attribute attached to that
- * object and returns an identifier.
- *
- * The parameter \p rapl id is a reference access property list
- * identifier for the reference. The access property list can
- * be used to access external files that the reference points to
- * (through a file access property list).
- *
- * The parameter \p aapl_id is an attribute access property list
- * identifier for the referenced attribute.
- *
- * The attribute opened with this function should be closed with
- * H5Aclose() when it is no longer needed.
- *
- */
- H5_DLL hid_t H5Ropen_attr(H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t aapl_id);
- /**
- * --------------------------------------------------------------------------
- * \ingroup ASYNC
- * \async_variant_of{H5Ropen_attr}
- */
- H5_DLL hid_t H5Ropen_attr_async(const char *app_file, const char *app_func, unsigned app_line,
- H5R_ref_t *ref_ptr, hid_t rapl_id, hid_t aapl_id, hid_t es_id);
- /* Get type */
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the type of object that an object reference points to
- *
- * \param[in] ref_ptr Pointer to reference to query
- * \rapl_id
- * \param[out] obj_type Type of referenced object
- *
- * \return \herr_t
- *
- * \details Given a reference, \p ref_ptr, H5Rget_obj_type3() retrieves
- * the type of the referenced object in \p obj_type.
- *
- * The parameter \p rapl id is a reference access property list
- * identifier for the reference. The access property list can
- * be used to access external files that the reference points to
- * (through a file access property list).
- *
- * Upon success, the function returns in \p obj_type the type of
- * the object that the reference points to. Valid values for this
- * referenced object type are as followed (defined in H5Opublic.h):
- * \snippet H5Opublic.h H5O_type_t_snip
- *
- */
- H5_DLL herr_t H5Rget_obj_type3(H5R_ref_t *ref_ptr, hid_t rapl_id, H5O_type_t *obj_type);
- /* Get name */
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the file name for a referenced object
- *
- * \param[in] ref_ptr Pointer to reference to query
- * \param[in,out] name Buffer to place the file name of the reference
- * \param[in] size Size of the \p name buffer
- *
- * \return Returns the length of the name if successful, otherwise, a negative value.
- *
- * \details H5Rget_file_name() retrieves the file name for the object,
- * region or attribute reference pointed to by \p ref_ptr.
- *
- * Up to \p size characters of the 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 size, is unknown, a preliminary
- * H5Rget_file_name() call can be made. The return value of this
- * call will be the size of the file name. That value can then be
- * passed in for size in the second call to H5Rget_file_name(),
- * which will retrieve the actual name.
- *
- */
- H5_DLL ssize_t H5Rget_file_name(const H5R_ref_t *ref_ptr, char *name, size_t size);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the object name for a referenced object
- *
- * \param[in] ref_ptr Pointer to reference to query
- * \rapl_id
- * \param[in,out] name Buffer to place the file name of the reference
- * \param[in] size Size of the \p name buffer
- *
- * \return Returns the length of the name if successful, returning
- * 0 (zero) if no name is associated with the identifier. Otherwise
- * returns a negative value.
- *
- * \details H5Rget_obj_name() retrieves the object name for the object,
- * region or attribute reference pointed to by \p ref_ptr.
- *
- * The parameter \p rapl_id is a reference access property list
- * identifier for the reference. The access property list can
- * be used to access external files that the reference points to
- * (through a file access property list).
- *
- * Up to size characters of the 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 call to H5Rget_obj_name() call
- * can be made. The return value of this call will be the size of the
- * object name. That value can then be passed in for \p size in the
- * second call to H5Rget_obj_name(), which will retrieve the actual
- * name. If there is no name associated with the object identifier
- * or if the name is NULL, H5Rget_obj_name() returns the size of
- * the name buffer (the size does not include the \c \0 terminator).
- *
- * If \p ref_ptr is an object reference, \p name will be returned with
- * a name for the referenced object. If \p ref_ptr is a dataset region
- * reference, \p name will contain a name for the object containing
- * the referenced region. If \p ref_ptr is an attribute reference, \p
- * name will contain a name for the object the attribute is attached
- * to. Note that an object in an HDF5 file may have multiple paths
- * if there are multiple links pointing to it. This function may
- * return any one of these paths.
- *
- */
- H5_DLL ssize_t H5Rget_obj_name(H5R_ref_t *ref_ptr, hid_t rapl_id, char *name, size_t size);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the attribute name for a referenced object
- *
- * \param[in] ref_ptr Pointer to reference to query
- * \param[in,out] name Buffer to place the attribute name of the reference
- * \param[in] size Size of the \p name buffer
- *
- * \return Returns the length of the name if successful, otherwise, a negative value.
- *
- * \details H5Rget_attr_name() retrieves the attribute name for the
- * attribute reference pointed to by \p ref_ptr.
- *
- * Up to size characters of the 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
- * H5Rget_attr_name() call can be made. The return value of this
- * call will be the size of the attribute name. That value can then
- * be passed in for size in the second call to H5Rget_attr_name(),
- * which will retrieve the actual name.
- *
- */
- H5_DLL ssize_t H5Rget_attr_name(const H5R_ref_t *ref_ptr, char *name, size_t size);
- /// \cond DEV
- /* API Wrappers for async routines */
- /* (Must be defined _after_ the function prototype) */
- /* (And must only defined when included in application code, not the library) */
- #ifndef H5R_MODULE
- #define H5Ropen_object_async(...) H5Ropen_object_async(__FILE__, __func__, __LINE__, __VA_ARGS__)
- #define H5Ropen_region_async(...) H5Ropen_region_async(__FILE__, __func__, __LINE__, __VA_ARGS__)
- #define H5Ropen_attr_async(...) H5Ropen_attr_async(__FILE__, __func__, __LINE__, __VA_ARGS__)
- /* Define "wrapper" versions of function calls, to allow compile-time values to
- * be passed in by language wrapper or library layer on top of HDF5. */
- #define H5Ropen_object_async_wrap H5_NO_EXPAND(H5Ropen_object_async)
- #define H5Ropen_region_async_wrap H5_NO_EXPAND(H5Ropen_region_async)
- #define H5Ropen_attr_async_wrap H5_NO_EXPAND(H5Ropen_attr_async)
- #endif /* H5R_MODULE */
- /// \endcond
- /* Symbols defined for compatibility with previous versions of the HDF5 API.
- *
- * Use of these symbols is or will be deprecated.
- */
- /* Macros */
- /* Versions for compatibility */
- #define H5R_OBJECT H5R_OBJECT1
- #define H5R_DATASET_REGION H5R_DATASET_REGION1
- /* Function prototypes */
- #ifndef H5_NO_DEPRECATED_SYMBOLS
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the type of object that an object reference points to
- *
- * \param[in] id The dataset containing the reference object or the group
- * containing that dataset
- * \param[in] ref_type Type of reference to query
- * \param[in] ref Reference to query
- *
- * \return Returns a valid object type if successful; otherwise returns a
- * negative value (#H5G_UNKNOWN).
- *
- * \deprecated This function has been renamed from H5Rget_obj_type() and is
- * deprecated in favor of the macro H5Rget_obj_type() or the
- * function H5Rget_obj_type2().
- *
- * \details Given an object reference, \p ref, H5Rget_obj_type1() returns the
- * type of the referenced object.
- *
- * A \Emph{reference type} is the type of reference, either an object
- * reference or a dataset region reference. An \Emph{object reference}
- * points to an HDF5 object while a \Emph{dataset region reference}
- * points to a defined region within a dataset.
- *
- * The \Emph{referenced object} is the object the reference points
- * to. The \Emph{referenced object type}, or the type of the referenced
- * object, is the type of the object that the reference points to.
- *
- * The location identifier, \p id, is the identifier for either the
- * dataset containing the object reference or the group containing that
- * dataset.
- *
- * Valid reference types, to pass in as \p ref_type, include the
- * following:
- * \snippet this H5R_type_t_snip
- *
- * If the application does not already know the object reference type,
- * that can be determined with three preliminary calls:
- *
- * \li Call H5Dget_type() on the dataset containing the reference to
- * get a datatype identifier for the dataset’s datatype.
- * \li Using that datatype identifier, H5Tget_class() returns a datatype
- * class.\n If the datatype class is #H5T_REFERENCE, H5Tequal() can
- * then be used to determine whether the reference’s datatype is
- * #H5T_STD_REF_OBJ or #H5T_STD_REF_DSETREG:
- * - If the datatype is #H5T_STD_REF_OBJ, the reference object type
- * is #H5R_OBJECT.
- * - If the datatype is #H5T_STD_REF_DSETREG, the reference object
- * type is #H5R_DATASET_REGION.
- *
- * When the function completes successfully, it returns one of the
- * following valid object type values (defined in H5Gpublic.h):
- * \snippet H5Gpublic.h H5G_obj_t_snip
- *
- * \version 1.8.0 Function H5Rget_obj_type() renamed to H5Rget_obj_type1() and
- * deprecated in this release.
- * \since 1.6.0
- *
- */
- H5_DLL H5G_obj_t H5Rget_obj_type1(hid_t id, H5R_type_t ref_type, const void *ref);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Opens the HDF5 object referenced
- *
- * \obj_id
- * \param[in] ref_type The reference type of \p ref
- * \param[in] ref Reference to open
- *
- * \return Returns identifier of referenced object if successful; otherwise
- * returns a negative value.
- *
- * \deprecated This function has been renamed from H5Rdereference() and is
- * deprecated in favor of the macro H5Rdereference() or the function
- * H5Rdereference2().
- *
- * \details Given a reference, \p ref, to an object or a region in an object,
- * H5Rdereference1() opens that object and returns an identifier.
- *
- * The parameter \p obj_id must be a valid identifier for an object in
- * the HDF5 file containing the referenced object, including the file
- * identifier.
- *
- * The parameter \p ref_type specifies the reference type of the
- * reference \p ref. \p ref_type may contain either of the following
- * values:
- * - #H5R_OBJECT
- * - #H5R_DATASET_REGION
- *
- * The object opened with this function should be closed when it is no
- * longer needed so that resource leaks will not develop. Use the
- * appropriate close function such as H5Oclose() or H5Dclose() for
- * datasets.
- *
- * \version 1.10.0 Function H5Rdereference() renamed to H5Rdereference1() and
- * deprecated in this release.
- * \since 1.8.0
- *
- */
- H5_DLL hid_t H5Rdereference1(hid_t obj_id, H5R_type_t ref_type, const void *ref);
- #endif /* H5_NO_DEPRECATED_SYMBOLS */
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Creates a reference
- *
- * \param[out] ref Reference created by the function call
- * \param[in] loc_id Location identifier used to locate the object being pointed to
- * \param[in] name Name of object at location \p loc_id
- * \param[in] ref_type Type of reference
- * \param[in] space_id Dataspace identifier with selection. Used only for
- * dataset region references; pass as -1 if reference is
- * an object reference, i.e., of type #H5R_OBJECT
- *
- * \return \herr_t
- *
- * \details H5Rcreate() creates the reference, \p ref, of the type specified in
- * \p ref_type, pointing to the object \p name located at \p loc_id.
- *
- * The HDF5 library maps the void type specified above for \p ref to
- * the type specified in \p ref_type, which will be one of the following:
- * \snippet this H5R_type_t_snip
- *
- * The parameters \p loc_id and \p name are used to locate the object.
- *
- * The parameter \p space_id identifies the dataset region that a
- * dataset region reference points to. This parameter is used only with
- * dataset region references and should be set to -1 if the reference
- * is an object reference, #H5R_OBJECT.
- *
- * \since 1.8.0
- */
- H5_DLL herr_t H5Rcreate(void *ref, hid_t loc_id, const char *name, H5R_type_t ref_type, hid_t space_id);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves the type of object that an object reference points to
- *
- * \param[in] id The dataset containing the reference object or the group
- * containing that dataset
- * \param[in] ref_type Type of reference to query
- * \param[in] ref Reference to query
- * \param[out] obj_type Type of referenced object
- *
- * \return \herr_t
- *
- * \details Given an object reference, \p ref, H5Rget_obj_type2() returns the
- * type of the referenced object in \p obj_type.
- *
- * A \Emph{reference type} is the type of reference, either an object
- * reference or a dataset region reference. An \Emph{object reference}
- * points to an HDF5 object while a \Emph{dataset region reference}
- * points to a defined region within a dataset.
- *
- * The \Emph{referenced object} is the object the reference points
- * to. The \Emph{referenced object type}, or the type of the referenced
- * object, is the type of the object that the reference points to.
- *
- * The location identifier, \p id, is the identifier for either the
- * dataset containing the object reference or the group containing that
- * dataset.
- *
- * Valid reference types, to pass in as \p ref_type, include the
- * following:
- * \snippet this H5R_type_t_snip
- *
- * If the application does not already know the object reference type,
- * that can be determined with three preliminary calls:
- *
- * \li Call H5Dget_type() on the dataset containing the reference to
- * get a datatype identifier for the dataset’s datatype.
- * \li Using that datatype identifier, H5Tget_class() returns a datatype
- * class.\n If the datatype class is #H5T_REFERENCE, H5Tequal() can
- * then be used to determine whether the reference’s datatype is
- * #H5T_STD_REF_OBJ or #H5T_STD_REF_DSETREG:
- * - If the datatype is #H5T_STD_REF_OBJ, the reference object type
- * is #H5R_OBJECT.
- * - If the datatype is #H5T_STD_REF_DSETREG, the reference object
- * type is #H5R_DATASET_REGION.
- *
- * When the function completes successfully, it returns one of the
- * following valid object type values (defined in H5Opublic.h):
- * \snippet H5Opublic.h H5O_type_t_snip
- *
- * \since 1.8.0
- *
- */
- H5_DLL herr_t H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *ref, H5O_type_t *obj_type);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Opens the HDF5 object referenced
- *
- * \obj_id
- * \oapl_id
- * \param[in] ref_type The reference type of \p ref
- * \param[in] ref Reference to open
- *
- * \return Returns identifier of referenced object if successful; otherwise
- * returns a negative value.
- *
- * \details Given a reference, \p ref, to an object or a region in an object,
- * H5Rdereference2() opens that object and returns an identifier.
- *
- * The parameter \p obj_id must be a valid identifier for the HDF5 file
- * containing the referenced object or for any object in that HDF5
- * file.
- *
- * The parameter \p oapl_id is an object access property list
- * identifier for the referenced object. The access property list must
- * be of the same type as the object being referenced, that is a group,
- * dataset, or datatype property list.
- *
- * The parameter \p ref_type specifies the reference type of the
- * reference \p ref. \p ref_type may contain either of the following
- * values:
- * - #H5R_OBJECT
- * - #H5R_DATASET_REGION
- *
- * The object opened with this function should be closed when it is no
- * longer needed so that resource leaks will not develop. Use the
- * appropriate close function such as H5Oclose() or H5Dclose() for
- * datasets.
- *
- * \since 1.10.0
- *
- */
- H5_DLL hid_t H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *ref);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Sets up a dataspace and selection as specified by a region reference
- *
- * \param[in] dataset File identifier or identifier for any object in the file
- * containing the referenced region
- * \param[in] ref_type Reference type of \p ref, which must be #H5R_DATASET_REGION
- * \param[in] ref Region reference to open
- *
- * \return Returns a valid dataspace identifier if successful; otherwise returns
- * a negative value.
- *
- * \details H5Rget_region() creates a copy of the dataspace of the dataset
- * pointed to by a region reference, \p ref, and defines a selection
- * matching the selection pointed to by ref within the dataspace copy.
- *
- * \p dataset is used to identify the file containing the referenced
- * region; it can be a file identifier or an identifier for any object
- * in the file.
- *
- * The parameter \p ref_type specifies the reference type of \p ref and
- * must contain the value #H5R_DATASET_REGION.
- *
- * Use H5Sclose() to release the dataspace identifier returned by this
- * function when the identifier is no longer needed.
- *
- */
- H5_DLL hid_t H5Rget_region(hid_t dataset, H5R_type_t ref_type, const void *ref);
- /**
- * --------------------------------------------------------------------------
- * \ingroup H5R
- *
- * \brief Retrieves a name for a referenced object
- *
- * \param[in] loc_id Identifier for the file containing the reference or for
- * any object in that file
- * \param[in] ref_type Type of reference
- * \param[in] ref An object or dataset region reference
- * \param[out] name A buffer to place the name of the referenced object or
- * dataset region. If \c NULL, then this call will return the
- * size in bytes of the name.
- * \param[in] size The size of the \p name buffer. When the size is passed in,
- * the \c NULL terminator needs to be included.
- *
- * \return Returns the length of the name if successful, returning 0 (zero) if
- * no name is associated with the identifier. Otherwise returns a
- * negative value.
- *
- * \details H5Rget_name() retrieves a name for the object identified by \p ref.\n
- * \p loc_id is used to identify the file containing the reference. It
- * can be the file identifier for the file containing the reference or
- * an identifier for any object in that file.
- *
- * \ref H5R_type_t is the reference type of \p ref. Valid values
- * include the following:
- * \snippet this H5R_type_t_snip
- *
- * \p ref is the reference for which the target object’s name is
- * sought.
- *
- * If \p ref is an object reference, \p name will be returned with a
- * name for the referenced object. If \p ref is a dataset region
- * reference, \p name will contain a name for the object containing the
- * referenced region.
- *
- * Up to \p size characters of the 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 H5Rget_name() call can be made. The
- * return value of this call will be the size of the object name. That
- * value can then be assigned to \p size for a second H5Rget_name()
- * call, which will retrieve the actual name.
- *
- * If there is no name associated with the object identifier or if the
- * \p name is \c NULL, H5Rget_name() returns the size of the \p name
- * buffer (the size does not include the \p NULL terminator).
- *
- * Note that an object in an HDF5 file may have multiple paths if there
- * are multiple links pointing to it. This function may return any one
- * of these paths.
- *
- * \since 1.8.0
- */
- H5_DLL ssize_t H5Rget_name(hid_t loc_id, H5R_type_t ref_type, const void *ref, char *name, size_t size);
- #ifdef __cplusplus
- }
- #endif
- #endif /* H5Rpublic_H */
|