Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-18 09:16:06

0001 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
0002  * Copyright by The HDF Group.                                               *
0003  * All rights reserved.                                                      *
0004  *                                                                           *
0005  * This file is part of HDF5.  The full HDF5 copyright notice, including     *
0006  * terms governing use, modification, and redistribution, is contained in    *
0007  * the COPYING file, which can be found at the root of the source code       *
0008  * distribution tree, or in https://www.hdfgroup.org/licenses.               *
0009  * If you do not have access to either file, you may request a copy from     *
0010  * help@hdfgroup.org.                                                        *
0011  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
0012 
0013 /*
0014  * This file contains public declarations for the H5T module.
0015  */
0016 #ifndef H5Tpublic_H
0017 #define H5Tpublic_H
0018 
0019 #include "H5public.h"  /* Generic Functions                        */
0020 #include "H5Ipublic.h" /* Identifiers                              */
0021 
0022 #define HOFFSET(S, M) (offsetof(S, M))
0023 
0024 /**
0025  * These are the various classes of datatypes
0026  * internal If this goes over 16 types (0-15), the file format will need to
0027  *          change.
0028  */
0029 //! <!-- [H5T_class_t_snip] -->
0030 typedef enum H5T_class_t {
0031     H5T_NO_CLASS  = -1, /**< error                                   */
0032     H5T_INTEGER   = 0,  /**< integer types                           */
0033     H5T_FLOAT     = 1,  /**< floating-point types                    */
0034     H5T_TIME      = 2,  /**< date and time types                     */
0035     H5T_STRING    = 3,  /**< character string types                  */
0036     H5T_BITFIELD  = 4,  /**< bit field types                         */
0037     H5T_OPAQUE    = 5,  /**< opaque types                            */
0038     H5T_COMPOUND  = 6,  /**< compound types                          */
0039     H5T_REFERENCE = 7,  /**< reference types                         */
0040     H5T_ENUM      = 8,  /**< enumeration types                       */
0041     H5T_VLEN      = 9,  /**< variable-Length types                   */
0042     H5T_ARRAY     = 10, /**< array types                             */
0043 
0044     H5T_NCLASSES /**< sentinel: this must be last             */
0045 } H5T_class_t;
0046 //! <!-- [H5T_class_t_snip] -->
0047 
0048 /**
0049  * Byte orders
0050  */
0051 //! <!-- [H5T_order_t_snip] -->
0052 typedef enum H5T_order_t {
0053     H5T_ORDER_ERROR = -1, /**< error                                   */
0054     H5T_ORDER_LE    = 0,  /**< little endian                           */
0055     H5T_ORDER_BE    = 1,  /**< big endian                              */
0056     H5T_ORDER_VAX   = 2,  /**< VAX mixed endian                        */
0057     H5T_ORDER_MIXED = 3,  /**< Compound type with mixed member orders  */
0058     H5T_ORDER_NONE  = 4   /**< no particular order (strings, bits,..)  */
0059     /*H5T_ORDER_NONE must be last */
0060 } H5T_order_t;
0061 //! <!-- [H5T_order_t_snip] -->
0062 
0063 /**
0064  * Types of integer sign schemes
0065  */
0066 //! <!-- [H5T_sign_t_snip] -->
0067 typedef enum H5T_sign_t {
0068     H5T_SGN_ERROR = -1, /**< error                                   */
0069     H5T_SGN_NONE  = 0,  /**< this is an unsigned type                */
0070     H5T_SGN_2     = 1,  /**< two's complement                        */
0071 
0072     H5T_NSGN = 2 /** sentinel: this must be last!             */
0073 } H5T_sign_t;
0074 //! <!-- [H5T_sign_t_snip] -->
0075 
0076 /**
0077  * Floating-point normalization schemes
0078  */
0079 //! <!-- [H5T_norm_t_snip] -->
0080 typedef enum H5T_norm_t {
0081     H5T_NORM_ERROR   = -1, /**< error                                   */
0082     H5T_NORM_IMPLIED = 0,  /**< msb of mantissa isn't stored, always 1  */
0083     H5T_NORM_MSBSET  = 1,  /**< msb of mantissa is always 1             */
0084     H5T_NORM_NONE    = 2   /**< not normalized                          */
0085     /*H5T_NORM_NONE must be last */
0086 } H5T_norm_t;
0087 //! <!-- [H5T_norm_t_snip] -->
0088 
0089 /**
0090  * Character set to use for text strings.
0091  * \internal Do not change these values since they appear in HDF5 files!
0092  */
0093 typedef enum H5T_cset_t {
0094     H5T_CSET_ERROR       = -1, /**< error                           */
0095     H5T_CSET_ASCII       = 0,  /**< US ASCII                        */
0096     H5T_CSET_UTF8        = 1,  /**< UTF-8 Unicode encoding           */
0097     H5T_CSET_RESERVED_2  = 2,  /**< reserved for later use           */
0098     H5T_CSET_RESERVED_3  = 3,  /**< reserved for later use           */
0099     H5T_CSET_RESERVED_4  = 4,  /**< reserved for later use           */
0100     H5T_CSET_RESERVED_5  = 5,  /**< reserved for later use           */
0101     H5T_CSET_RESERVED_6  = 6,  /**< reserved for later use           */
0102     H5T_CSET_RESERVED_7  = 7,  /**< reserved for later use           */
0103     H5T_CSET_RESERVED_8  = 8,  /**< reserved for later use           */
0104     H5T_CSET_RESERVED_9  = 9,  /**< reserved for later use           */
0105     H5T_CSET_RESERVED_10 = 10, /**< reserved for later use           */
0106     H5T_CSET_RESERVED_11 = 11, /**< reserved for later use           */
0107     H5T_CSET_RESERVED_12 = 12, /**< reserved for later use           */
0108     H5T_CSET_RESERVED_13 = 13, /**< reserved for later use           */
0109     H5T_CSET_RESERVED_14 = 14, /**< reserved for later use           */
0110     H5T_CSET_RESERVED_15 = 15  /**< reserved for later use           */
0111 } H5T_cset_t;
0112 #define H5T_NCSET H5T_CSET_RESERVED_2 /*Number of character sets actually defined  */
0113 
0114 /**
0115  * Type of padding to use in character strings.
0116  * \internal  Do not change these values since they appear in HDF5 files!
0117  */
0118 typedef enum H5T_str_t {
0119     H5T_STR_ERROR       = -1, /**< error                           */
0120     H5T_STR_NULLTERM    = 0,  /**< null terminate like in C        */
0121     H5T_STR_NULLPAD     = 1,  /**< pad with nulls                  */
0122     H5T_STR_SPACEPAD    = 2,  /**< pad with spaces like in Fortran */
0123     H5T_STR_RESERVED_3  = 3,  /**< reserved for later use            */
0124     H5T_STR_RESERVED_4  = 4,  /**< reserved for later use            */
0125     H5T_STR_RESERVED_5  = 5,  /**< reserved for later use            */
0126     H5T_STR_RESERVED_6  = 6,  /**< reserved for later use            */
0127     H5T_STR_RESERVED_7  = 7,  /**< reserved for later use            */
0128     H5T_STR_RESERVED_8  = 8,  /**< reserved for later use            */
0129     H5T_STR_RESERVED_9  = 9,  /**< reserved for later use            */
0130     H5T_STR_RESERVED_10 = 10, /**< reserved for later use            */
0131     H5T_STR_RESERVED_11 = 11, /**< reserved for later use            */
0132     H5T_STR_RESERVED_12 = 12, /**< reserved for later use            */
0133     H5T_STR_RESERVED_13 = 13, /**< reserved for later use            */
0134     H5T_STR_RESERVED_14 = 14, /**< reserved for later use            */
0135     H5T_STR_RESERVED_15 = 15  /**< reserved for later use            */
0136 } H5T_str_t;
0137 #define H5T_NSTR H5T_STR_RESERVED_3 /*num H5T_str_t types actually defined       */
0138 
0139 /**
0140  * Type of padding to use in other atomic types
0141  */
0142 //! <!-- [H5T_pad_t_snip] -->
0143 typedef enum H5T_pad_t {
0144     H5T_PAD_ERROR      = -1, /**< error                           */
0145     H5T_PAD_ZERO       = 0,  /**< always set to zero              */
0146     H5T_PAD_ONE        = 1,  /**< always set to one               */
0147     H5T_PAD_BACKGROUND = 2,  /**< set to background value         */
0148 
0149     H5T_NPAD = 3 /**< sentinel: THIS MUST BE LAST     */
0150 } H5T_pad_t;
0151 //! <!-- [H5T_pad_t_snip] -->
0152 
0153 /**
0154  * The order to retrieve atomic native datatype
0155  */
0156 //! <!-- [H5T_direction_t_snip] -->
0157 typedef enum H5T_direction_t {
0158     H5T_DIR_DEFAULT = 0, /**< default direction is ascending         */
0159     H5T_DIR_ASCEND  = 1, /**< in ascending order                     */
0160     H5T_DIR_DESCEND = 2  /**< in descending order                    */
0161 } H5T_direction_t;
0162 //! <!-- [H5T_direction_t_snip] -->
0163 
0164 /**
0165  * The exception type passed into the conversion callback function
0166  */
0167 typedef enum H5T_conv_except_t {
0168     H5T_CONV_EXCEPT_RANGE_HI = 0,
0169     /**< Source value is greater than destination's range */
0170     H5T_CONV_EXCEPT_RANGE_LOW = 1,
0171     /**< Source value is less than destination's range */
0172     H5T_CONV_EXCEPT_PRECISION = 2,
0173     /**< Source value loses precision in destination */
0174     H5T_CONV_EXCEPT_TRUNCATE = 3,
0175     /**< Source value is truncated in destination */
0176     H5T_CONV_EXCEPT_PINF = 4,
0177     /**< Source value is positive infinity */
0178     H5T_CONV_EXCEPT_NINF = 5,
0179     /**< Source value is negative infinity */
0180     H5T_CONV_EXCEPT_NAN = 6
0181     /**< Source value is \c NaN (not a number, including \c QNaN and \c SNaN) */
0182 } H5T_conv_except_t;
0183 
0184 /**
0185  * The return value from conversion callback function H5T_conv_except_func_t()
0186  */
0187 typedef enum H5T_conv_ret_t {
0188     H5T_CONV_ABORT     = -1, /**< abort conversion                           */
0189     H5T_CONV_UNHANDLED = 0,  /**< callback function failed to handle the exception      */
0190     H5T_CONV_HANDLED   = 1   /**< callback function handled the exception successfully  */
0191 } H5T_conv_ret_t;
0192 
0193 /**
0194  * Variable Length Datatype struct in memory (This is only used for VL
0195  * sequences, not VL strings, which are stored in char *'s)
0196  */
0197 typedef struct {
0198     size_t len; /**< Length of VL data (in base type units) */
0199     void  *p;   /**< Pointer to VL data */
0200 } hvl_t;
0201 
0202 /* Variable Length String information */
0203 /**
0204  * Indicate that a string is variable length (null-terminated in C, instead of
0205  * fixed length)
0206  */
0207 #define H5T_VARIABLE SIZE_MAX
0208 
0209 /* Opaque information */
0210 /**
0211  * Maximum length of an opaque tag
0212  * \internal This could be raised without too much difficulty
0213  */
0214 #define H5T_OPAQUE_TAG_MAX 256
0215 
0216 #ifdef __cplusplus
0217 extern "C" {
0218 #endif
0219 
0220 //! <!-- [H5T_conv_except_func_t_snip] -->
0221 /**
0222  * \brief Exception handler.
0223  *
0224  * \param[in] except_type The kind of exception that occurred
0225  * \param[in] src_id Source datatype identifier
0226  * \param[in] dst_id Destination datatype identifier
0227  * \param[in] src_buf Source data buffer
0228  * \param[in,out] dst_buf Destination data buffer
0229  * \param[in,out] user_data Callback context
0230  * \return Valid callback function return values are #H5T_CONV_ABORT,
0231  *          #H5T_CONV_UNHANDLED and #H5T_CONV_HANDLED.
0232  *
0233  * \details If an exception like overflow happens during conversion, this
0234  *          function is called if it's registered through H5Pset_type_conv_cb().
0235  *
0236  * \since 1.8.0
0237  */
0238 typedef H5T_conv_ret_t (*H5T_conv_except_func_t)(H5T_conv_except_t except_type, hid_t src_id, hid_t dst_id,
0239                                                  void *src_buf, void *dst_buf, void *user_data);
0240 //! <!-- [H5T_conv_except_func_t_snip] -->
0241 
0242 /* When this header is included from a private header, don't make calls to H5open() */
0243 #undef H5OPEN
0244 #ifndef H5private_H
0245 #define H5OPEN H5open(),
0246 #else /* H5private_H */
0247 #define H5OPEN
0248 #endif /* H5private_H */
0249 
0250 /*
0251  * The IEEE floating point types in various byte orders.
0252  */
0253 /**
0254  * \ingroup PDTIEEE
0255  * 16-bit big-endian IEEE floating-point numbers
0256  */
0257 #define H5T_IEEE_F16BE (H5OPEN H5T_IEEE_F16BE_g)
0258 /**
0259  * \ingroup PDTIEEE
0260  * 16-bit little-endian IEEE floating-point numbers
0261  */
0262 #define H5T_IEEE_F16LE (H5OPEN H5T_IEEE_F16LE_g)
0263 /**
0264  * \ingroup PDTIEEE
0265  * 32-bit big-endian IEEE floating-point numbers
0266  */
0267 #define H5T_IEEE_F32BE (H5OPEN H5T_IEEE_F32BE_g)
0268 /**
0269  * \ingroup PDTIEEE
0270  * 32-bit little-endian IEEE floating-point numbers
0271  */
0272 #define H5T_IEEE_F32LE (H5OPEN H5T_IEEE_F32LE_g)
0273 /**
0274  * \ingroup PDTIEEE
0275  * 64-bit big-endian IEEE floating-point numbers
0276  */
0277 #define H5T_IEEE_F64BE (H5OPEN H5T_IEEE_F64BE_g)
0278 /**
0279  * \ingroup PDTIEEE
0280  * 64-bit little-endian IEEE floating-point numbers
0281  */
0282 #define H5T_IEEE_F64LE (H5OPEN H5T_IEEE_F64LE_g)
0283 H5_DLLVAR hid_t H5T_IEEE_F16BE_g;
0284 H5_DLLVAR hid_t H5T_IEEE_F16LE_g;
0285 H5_DLLVAR hid_t H5T_IEEE_F32BE_g;
0286 H5_DLLVAR hid_t H5T_IEEE_F32LE_g;
0287 H5_DLLVAR hid_t H5T_IEEE_F64BE_g;
0288 H5_DLLVAR hid_t H5T_IEEE_F64LE_g;
0289 
0290 /*
0291  * These are "standard" types.  For instance, signed (2's complement) and
0292  * unsigned integers of various sizes and byte orders.
0293  */
0294 /**
0295  * \ingroup PDTSTD
0296  * 8-bit big-endian signed integers
0297  */
0298 #define H5T_STD_I8BE (H5OPEN H5T_STD_I8BE_g)
0299 /**
0300  * \ingroup PDTSTD
0301  * 8-bit little-endian signed integers
0302  */
0303 #define H5T_STD_I8LE (H5OPEN H5T_STD_I8LE_g)
0304 /**
0305  * \ingroup PDTSTD
0306  * 16-bit big-endian signed integers
0307  */
0308 #define H5T_STD_I16BE (H5OPEN H5T_STD_I16BE_g)
0309 /**
0310  * \ingroup PDTSTD
0311  * 16-bit little-endian signed integers
0312  */
0313 #define H5T_STD_I16LE (H5OPEN H5T_STD_I16LE_g)
0314 /**
0315  * \ingroup PDTSTD
0316  * 32-bit big-endian signed integers
0317  */
0318 #define H5T_STD_I32BE (H5OPEN H5T_STD_I32BE_g)
0319 /**
0320  * \ingroup PDTSTD
0321  * 32-bit little-endian signed integers
0322  */
0323 #define H5T_STD_I32LE (H5OPEN H5T_STD_I32LE_g)
0324 /**
0325  * \ingroup PDTSTD
0326  * 64-bit big-endian signed integers
0327  */
0328 #define H5T_STD_I64BE (H5OPEN H5T_STD_I64BE_g)
0329 /**
0330  * \ingroup PDTSTD
0331  * 64-bit little-endian signed integers
0332  */
0333 #define H5T_STD_I64LE (H5OPEN H5T_STD_I64LE_g)
0334 /**
0335  * \ingroup PDTSTD
0336  * 8-bit big-endian unsigned integers
0337  */
0338 #define H5T_STD_U8BE (H5OPEN H5T_STD_U8BE_g)
0339 /**
0340  * \ingroup PDTSTD
0341  * 8-bit little-endian unsigned integers
0342  */
0343 #define H5T_STD_U8LE (H5OPEN H5T_STD_U8LE_g)
0344 /**
0345  * \ingroup PDTSTD
0346  * 16-bit big-endian unsigned integers
0347  */
0348 #define H5T_STD_U16BE (H5OPEN H5T_STD_U16BE_g)
0349 /**
0350  * \ingroup PDTSTD
0351  * 16-bit little-endian unsigned integers
0352  */
0353 #define H5T_STD_U16LE (H5OPEN H5T_STD_U16LE_g)
0354 /**
0355  * \ingroup PDTSTD
0356  * 32-bit big-endian unsigned integers
0357  */
0358 #define H5T_STD_U32BE (H5OPEN H5T_STD_U32BE_g)
0359 /**
0360  * \ingroup PDTSTD
0361  * 32-bit little-endian unsigned integers
0362  */
0363 #define H5T_STD_U32LE (H5OPEN H5T_STD_U32LE_g)
0364 /**
0365  * \ingroup PDTSTD
0366  * 64-bit big-endian unsigned integers
0367  */
0368 #define H5T_STD_U64BE (H5OPEN H5T_STD_U64BE_g)
0369 /**
0370  * \ingroup PDTSTD
0371  * 64-bit little-endian unsigned integers
0372  */
0373 #define H5T_STD_U64LE (H5OPEN H5T_STD_U64LE_g)
0374 /**
0375  * \ingroup PDTSTD
0376  * 8-bit big-endian bitfield
0377  */
0378 #define H5T_STD_B8BE (H5OPEN H5T_STD_B8BE_g)
0379 /**
0380  * \ingroup PDTSTD
0381  * 8-bit little-endian bitfield
0382  */
0383 #define H5T_STD_B8LE (H5OPEN H5T_STD_B8LE_g)
0384 /**
0385  * \ingroup PDTSTD
0386  * 16-bit big-endian bitfield
0387  */
0388 #define H5T_STD_B16BE (H5OPEN H5T_STD_B16BE_g)
0389 /**
0390  * \ingroup PDTSTD
0391  * 16-bit little-endian bitfield
0392  */
0393 #define H5T_STD_B16LE (H5OPEN H5T_STD_B16LE_g)
0394 /**
0395  * \ingroup PDTSTD
0396  * 32-bit big-endian bitfield
0397  */
0398 #define H5T_STD_B32BE (H5OPEN H5T_STD_B32BE_g)
0399 /**
0400  * \ingroup PDTSTD
0401  * 32-bit little-endian bitfield
0402  */
0403 #define H5T_STD_B32LE (H5OPEN H5T_STD_B32LE_g)
0404 /**
0405  * \ingroup PDTSTD
0406  * 64-bit big-endian bitfield
0407  */
0408 #define H5T_STD_B64BE (H5OPEN H5T_STD_B64BE_g)
0409 /**
0410  * \ingroup PDTSTD
0411  * 64-bit little-endian bitfield
0412  */
0413 #define H5T_STD_B64LE (H5OPEN H5T_STD_B64LE_g)
0414 /**
0415  * \ingroup PDTSTD
0416  * Object reference
0417  */
0418 #define H5T_STD_REF_OBJ (H5OPEN H5T_STD_REF_OBJ_g)
0419 /**
0420  * \ingroup PDTSTD
0421  * Dataset region reference
0422  */
0423 #define H5T_STD_REF_DSETREG (H5OPEN H5T_STD_REF_DSETREG_g)
0424 /**
0425  * \ingroup PDTSTD
0426  * Generic reference
0427  */
0428 #define H5T_STD_REF (H5OPEN H5T_STD_REF_g)
0429 H5_DLLVAR hid_t H5T_STD_I8BE_g;
0430 H5_DLLVAR hid_t H5T_STD_I8LE_g;
0431 H5_DLLVAR hid_t H5T_STD_I16BE_g;
0432 H5_DLLVAR hid_t H5T_STD_I16LE_g;
0433 H5_DLLVAR hid_t H5T_STD_I32BE_g;
0434 H5_DLLVAR hid_t H5T_STD_I32LE_g;
0435 H5_DLLVAR hid_t H5T_STD_I64BE_g;
0436 H5_DLLVAR hid_t H5T_STD_I64LE_g;
0437 H5_DLLVAR hid_t H5T_STD_U8BE_g;
0438 H5_DLLVAR hid_t H5T_STD_U8LE_g;
0439 H5_DLLVAR hid_t H5T_STD_U16BE_g;
0440 H5_DLLVAR hid_t H5T_STD_U16LE_g;
0441 H5_DLLVAR hid_t H5T_STD_U32BE_g;
0442 H5_DLLVAR hid_t H5T_STD_U32LE_g;
0443 H5_DLLVAR hid_t H5T_STD_U64BE_g;
0444 H5_DLLVAR hid_t H5T_STD_U64LE_g;
0445 H5_DLLVAR hid_t H5T_STD_B8BE_g;
0446 H5_DLLVAR hid_t H5T_STD_B8LE_g;
0447 H5_DLLVAR hid_t H5T_STD_B16BE_g;
0448 H5_DLLVAR hid_t H5T_STD_B16LE_g;
0449 H5_DLLVAR hid_t H5T_STD_B32BE_g;
0450 H5_DLLVAR hid_t H5T_STD_B32LE_g;
0451 H5_DLLVAR hid_t H5T_STD_B64BE_g;
0452 H5_DLLVAR hid_t H5T_STD_B64LE_g;
0453 H5_DLLVAR hid_t H5T_STD_REF_OBJ_g;
0454 H5_DLLVAR hid_t H5T_STD_REF_DSETREG_g;
0455 H5_DLLVAR hid_t H5T_STD_REF_g;
0456 
0457 /*
0458  * Types which are particular to Unix.
0459  */
0460 /**
0461  * \ingroup PDTUNIX
0462  */
0463 #define H5T_UNIX_D32BE (H5OPEN H5T_UNIX_D32BE_g)
0464 /**
0465  * \ingroup PDTUNIX
0466  */
0467 #define H5T_UNIX_D32LE (H5OPEN H5T_UNIX_D32LE_g)
0468 /**
0469  * \ingroup PDTUNIX
0470  */
0471 #define H5T_UNIX_D64BE (H5OPEN H5T_UNIX_D64BE_g)
0472 /**
0473  * \ingroup PDTUNIX
0474  */
0475 #define H5T_UNIX_D64LE (H5OPEN H5T_UNIX_D64LE_g)
0476 H5_DLLVAR hid_t H5T_UNIX_D32BE_g;
0477 H5_DLLVAR hid_t H5T_UNIX_D32LE_g;
0478 H5_DLLVAR hid_t H5T_UNIX_D64BE_g;
0479 H5_DLLVAR hid_t H5T_UNIX_D64LE_g;
0480 
0481 /*
0482  * Types particular to the C language.  String types use `bytes' instead
0483  * of `bits' as their size.
0484  */
0485 /**
0486  * \ingroup PDTS
0487  * String datatype in C (size defined in bytes rather than in bits)
0488  */
0489 #define H5T_C_S1 (H5OPEN H5T_C_S1_g)
0490 H5_DLLVAR hid_t H5T_C_S1_g;
0491 
0492 /*
0493  * Types particular to Fortran.
0494  */
0495 /**
0496  * \ingroup PDTS
0497  * String datatype in Fortran (as defined for the HDF5 C library)
0498  */
0499 #define H5T_FORTRAN_S1 (H5OPEN H5T_FORTRAN_S1_g)
0500 H5_DLLVAR hid_t H5T_FORTRAN_S1_g;
0501 
0502 /*
0503  * These types are for Intel CPU's.  They are little endian with IEEE
0504  * floating point.
0505  */
0506 /**
0507  * \ingroup PDTX86
0508  * 8-bit little-endian signed (2's complement) integers for Intel CPUs
0509  */
0510 #define H5T_INTEL_I8 H5T_STD_I8LE
0511 /**
0512  * \ingroup PDTX86
0513  * 16-bit little-endian signed (2's complement) integers for Intel CPUs
0514  */
0515 #define H5T_INTEL_I16 H5T_STD_I16LE
0516 /**
0517  * \ingroup PDTX86
0518  * 32-bit little-endian signed (2's complement) integers for Intel CPUs
0519  */
0520 #define H5T_INTEL_I32 H5T_STD_I32LE
0521 /**
0522  * \ingroup PDTX86
0523  * 64-bit little-endian signed (2's complement) integers for Intel CPUs
0524  */
0525 #define H5T_INTEL_I64 H5T_STD_I64LE
0526 /**
0527  * \ingroup PDTX86
0528  * 8-bit little-endian unsigned integers for Intel CPUs
0529  */
0530 #define H5T_INTEL_U8 H5T_STD_U8LE
0531 /**
0532  * \ingroup PDTX86
0533  * 16-bit little-endian unsigned integers for Intel CPUs
0534  */
0535 #define H5T_INTEL_U16 H5T_STD_U16LE
0536 /**
0537  * \ingroup PDTX86
0538  * 32-bit little-endian unsigned integers for Intel CPUs
0539  */
0540 #define H5T_INTEL_U32 H5T_STD_U32LE
0541 /**
0542  * \ingroup PDTX86
0543  * 64-bit little-endian unsigned integers for Intel CPUs
0544  */
0545 #define H5T_INTEL_U64 H5T_STD_U64LE
0546 /**
0547  * \ingroup PDTX86
0548  * 8-bit little-endian bitfield for Intel CPUs
0549  */
0550 #define H5T_INTEL_B8 H5T_STD_B8LE
0551 /**
0552  * \ingroup PDTX86
0553  * 16-bit little-endian bitfield for Intel CPUs
0554  */
0555 #define H5T_INTEL_B16 H5T_STD_B16LE
0556 /**
0557  * \ingroup PDTX86
0558  * 32-bit little-endian bitfield for Intel CPUs
0559  */
0560 #define H5T_INTEL_B32 H5T_STD_B32LE
0561 /**
0562  * \ingroup PDTX86
0563  * 64-bit little-endian bitfield for Intel CPUs
0564  */
0565 #define H5T_INTEL_B64 H5T_STD_B64LE
0566 /**
0567  * \ingroup PDTX86
0568  * 32-bit little-endian IEEE floating-point numbers for Intel CPUs
0569  */
0570 #define H5T_INTEL_F32 H5T_IEEE_F32LE
0571 /**
0572  * \ingroup PDTX86
0573  * 64-bit little-endian IEEE floating-point numbers for Intel CPUs
0574  */
0575 #define H5T_INTEL_F64 H5T_IEEE_F64LE
0576 
0577 /*
0578  * These types are for DEC Alpha CPU's.  They are little endian with IEEE
0579  * floating point.
0580  */
0581 /**
0582  * \ingroup PDTALPHA
0583  * 8-bit little-endian signed (2's complement) integers for DEC Alpha CPUs
0584  */
0585 #define H5T_ALPHA_I8 H5T_STD_I8LE
0586 /**
0587  * \ingroup PDTALPHA
0588  * 16-bit little-endian signed (2's complement) integers for DEC Alpha CPUs
0589  */
0590 #define H5T_ALPHA_I16 H5T_STD_I16LE
0591 /**
0592  * \ingroup PDTALPHA
0593  * 32-bit little-endian signed (2's complement) integers for DEC Alpha CPUs
0594  */
0595 #define H5T_ALPHA_I32 H5T_STD_I32LE
0596 /**
0597  * \ingroup PDTALPHA
0598  * 64-bit little-endian signed (2's complement) integers for DEC Alpha CPUs
0599  */
0600 #define H5T_ALPHA_I64 H5T_STD_I64LE
0601 /**
0602  * \ingroup PDTALPHA
0603  * 8-bit little-endian unsigned integers for DEC Alpha CPUs
0604  */
0605 #define H5T_ALPHA_U8 H5T_STD_U8LE
0606 /**
0607  * \ingroup PDTALPHA
0608  * 16-bit little-endian unsigned integers for DEC Alpha CPUs
0609  */
0610 #define H5T_ALPHA_U16 H5T_STD_U16LE
0611 /**
0612  * \ingroup PDTALPHA
0613  * 32-bit little-endian unsigned integers for DEC Alpha CPUs
0614  */
0615 #define H5T_ALPHA_U32 H5T_STD_U32LE
0616 /**
0617  * \ingroup PDTALPHA
0618  * 64-bit little-endian unsigned integers for DEC Alpha CPUs
0619  */
0620 #define H5T_ALPHA_U64 H5T_STD_U64LE
0621 /**
0622  * \ingroup PDTALPHA
0623  * 8-bit little-endian bitfield for DEC Alpha CPUs
0624  */
0625 #define H5T_ALPHA_B8 H5T_STD_B8LE
0626 /**
0627  * \ingroup PDTALPHA
0628  * 16-bit little-endian bitfield for DEC Alpha CPUs
0629  */
0630 #define H5T_ALPHA_B16 H5T_STD_B16LE
0631 /**
0632  * \ingroup PDTALPHA
0633  * 32-bit little-endian bitfield for DEC Alpha CPUs
0634  */
0635 #define H5T_ALPHA_B32 H5T_STD_B32LE
0636 /**
0637  * \ingroup PDTALPHA
0638  * 64-bit little-endian bitfield for DEC Alpha CPUs
0639  */
0640 #define H5T_ALPHA_B64 H5T_STD_B64LE
0641 /**
0642  * \ingroup PDTALPHA
0643  * 32-bit little-endian IEEE floating-point numbers for DEC Alpha CPUs
0644  */
0645 #define H5T_ALPHA_F32 H5T_IEEE_F32LE
0646 /**
0647  * \ingroup PDTALPHA
0648  * 64-bit little-endian IEEE floating-point numbers for DEC Alpha CPUs
0649  */
0650 #define H5T_ALPHA_F64 H5T_IEEE_F64LE
0651 
0652 /*
0653  * These types are for MIPS cpu's commonly used in SGI systems. They are big
0654  * endian with IEEE floating point.
0655  */
0656 /**
0657  * \ingroup PDTMIPS
0658  * 8-bit big-endian signed (2's complement) integers for SGI MIPS CPUs
0659  */
0660 #define H5T_MIPS_I8 H5T_STD_I8BE
0661 /**
0662  * \ingroup PDTMIPS
0663  * 16-bit big-endian signed (2's complement) integers for SGI MIPS CPUs
0664  */
0665 #define H5T_MIPS_I16 H5T_STD_I16BE
0666 /**
0667  * \ingroup PDTMIPS
0668  * 32-bit big-endian signed (2's complement) integers for SGI MIPS CPUs
0669  */
0670 #define H5T_MIPS_I32 H5T_STD_I32BE
0671 /**
0672  * \ingroup PDTMIPS
0673  * 64-bit big-endian signed (2's complement) integers for SGI MIPS CPUs
0674  */
0675 #define H5T_MIPS_I64 H5T_STD_I64BE
0676 /**
0677  * \ingroup PDTMIPS
0678  * 8-bit big-endian unsigned integers for SGI MIPS CPUs
0679  */
0680 #define H5T_MIPS_U8 H5T_STD_U8BE
0681 /**
0682  * \ingroup PDTMIPS
0683  * 16-bit big-endian unsigned integers for SGI MIPS CPUs
0684  */
0685 #define H5T_MIPS_U16 H5T_STD_U16BE
0686 /**
0687  * \ingroup PDTMIPS
0688  * 32-bit big-endian unsigned integers for SGI MIPS CPUs
0689  */
0690 #define H5T_MIPS_U32 H5T_STD_U32BE
0691 /**
0692  * \ingroup PDTMIPS
0693  * 64-bit big-endian unsigned integers for SGI MIPS CPUs
0694  */
0695 #define H5T_MIPS_U64 H5T_STD_U64BE
0696 /**
0697  * \ingroup PDTMIPS
0698  * 8-bit big-endian bitfield for SGI MIPS CPUs
0699  */
0700 #define H5T_MIPS_B8 H5T_STD_B8BE
0701 /**
0702  * \ingroup PDTMIPS
0703  * 16-bit big-endian bitfield for SGI MIPS CPUs
0704  */
0705 #define H5T_MIPS_B16 H5T_STD_B16BE
0706 /**
0707  * \ingroup PDTMIPS
0708  * 32-bit big-endian bitfield for SGI MIPS CPUs
0709  */
0710 #define H5T_MIPS_B32 H5T_STD_B32BE
0711 /**
0712  * \ingroup PDTMIPS
0713  * 64-bit big-endian bitfield for SGI MIPS CPUs
0714  */
0715 #define H5T_MIPS_B64 H5T_STD_B64BE
0716 /**
0717  * \ingroup PDTMIPS
0718  * 32-bit big-endian IEEE floating-point numbers for MIPS CPUs
0719  */
0720 #define H5T_MIPS_F32 H5T_IEEE_F32BE
0721 /**
0722  * \ingroup PDTMIPS
0723  * 64-bit big-endian IEEE floating-point numbers for MIPS CPUs
0724  */
0725 #define H5T_MIPS_F64 H5T_IEEE_F64BE
0726 
0727 /*
0728  * The VAX floating point types (i.e. in VAX byte order)
0729  */
0730 /**
0731  * \ingroup PDTALPHA
0732  * 32-bit VAX byte order floating-point numbers for OpenVMS on DEC Alpha CPUs
0733  */
0734 #define H5T_VAX_F32 (H5OPEN H5T_VAX_F32_g)
0735 /**
0736  * \ingroup PDTALPHA
0737  * 64-bit VAX byte order floating-point numbers for OpenVMS on DEC Alpha CPUs
0738  */
0739 #define H5T_VAX_F64 (H5OPEN H5T_VAX_F64_g)
0740 H5_DLLVAR hid_t H5T_VAX_F32_g;
0741 H5_DLLVAR hid_t H5T_VAX_F64_g;
0742 
0743 /*
0744  * The predefined native types for this platform. Instead of a class name,
0745  * precision and byte order as the last component, they have a C-like type
0746  * name.  If the type begins with `U' then it is the unsigned version of the
0747  * integer type; other integer types are signed.  The type LLONG corresponds
0748  * to C's `long long' and LDOUBLE is `long double' (these types might be the
0749  * same as `LONG' and `DOUBLE' respectively).
0750  */
0751 /**
0752  * \ingroup PDTNAT
0753  * C-style \c char
0754  */
0755 #define H5T_NATIVE_CHAR (CHAR_MIN ? H5T_NATIVE_SCHAR : H5T_NATIVE_UCHAR)
0756 /**
0757  * \ingroup PDTNAT
0758  * C-style \TText{signed char}
0759  */
0760 #define H5T_NATIVE_SCHAR (H5OPEN H5T_NATIVE_SCHAR_g)
0761 /**
0762  * \ingroup PDTNAT
0763  * C-style \TText{unsigned char}
0764  */
0765 #define H5T_NATIVE_UCHAR (H5OPEN H5T_NATIVE_UCHAR_g)
0766 /**
0767  * \ingroup PDTNAT
0768  * C-style \TText{short}
0769  */
0770 #define H5T_NATIVE_SHORT (H5OPEN H5T_NATIVE_SHORT_g)
0771 /**
0772  * \ingroup PDTNAT
0773  * C-style \TText{unsigned short}
0774  */
0775 #define H5T_NATIVE_USHORT (H5OPEN H5T_NATIVE_USHORT_g)
0776 /**
0777  * \ingroup PDTNAT
0778  * C-style \TText{int}
0779  */
0780 #define H5T_NATIVE_INT (H5OPEN H5T_NATIVE_INT_g)
0781 /**
0782  * \ingroup PDTNAT
0783  * C-style \TText{unsigned int}
0784  */
0785 #define H5T_NATIVE_UINT (H5OPEN H5T_NATIVE_UINT_g)
0786 /**
0787  * \ingroup PDTNAT
0788  * C-style \TText{long}
0789  */
0790 #define H5T_NATIVE_LONG (H5OPEN H5T_NATIVE_LONG_g)
0791 /**
0792  * \ingroup PDTNAT
0793  * C-style \TText{unsigned long}
0794  */
0795 #define H5T_NATIVE_ULONG (H5OPEN H5T_NATIVE_ULONG_g)
0796 /**
0797  * \ingroup PDTNAT
0798  * C-style \TText{long long}
0799  */
0800 #define H5T_NATIVE_LLONG (H5OPEN H5T_NATIVE_LLONG_g)
0801 /**
0802  * \ingroup PDTNAT
0803  * C-style \TText{unsigned long long}
0804  */
0805 #define H5T_NATIVE_ULLONG (H5OPEN H5T_NATIVE_ULLONG_g)
0806 /**
0807  * \ingroup PDTNAT
0808  * C-style \TText{_Float16}
0809  */
0810 #define H5T_NATIVE_FLOAT16 (H5OPEN H5T_NATIVE_FLOAT16_g)
0811 /**
0812  * \ingroup PDTNAT
0813  * C-style \TText{float}
0814  */
0815 #define H5T_NATIVE_FLOAT (H5OPEN H5T_NATIVE_FLOAT_g)
0816 /**
0817  * \ingroup PDTNAT
0818  * C-style \TText{double}
0819  */
0820 #define H5T_NATIVE_DOUBLE (H5OPEN H5T_NATIVE_DOUBLE_g)
0821 /**
0822  * \ingroup PDTNAT
0823  * C-style \TText{long double}
0824  */
0825 #define H5T_NATIVE_LDOUBLE (H5OPEN H5T_NATIVE_LDOUBLE_g)
0826 /**
0827  * \ingroup PDTNAT
0828  * HDF5 8-bit bitfield based on native types
0829  */
0830 #define H5T_NATIVE_B8 (H5OPEN H5T_NATIVE_B8_g)
0831 /**
0832  * \ingroup PDTNAT
0833  * HDF5 16-bit bitfield based on native types
0834  */
0835 #define H5T_NATIVE_B16 (H5OPEN H5T_NATIVE_B16_g)
0836 /**
0837  * \ingroup PDTNAT
0838  * HDF5 32-bit bitfield based on native types
0839  */
0840 #define H5T_NATIVE_B32 (H5OPEN H5T_NATIVE_B32_g)
0841 /**
0842  * \ingroup PDTNAT
0843  * HDF5 64-bit bitfield based on native types
0844  */
0845 #define H5T_NATIVE_B64 (H5OPEN H5T_NATIVE_B64_g)
0846 /**
0847  * \ingroup PDTNAT
0848  * HDF5 opaque unit based on native types
0849  */
0850 #define H5T_NATIVE_OPAQUE (H5OPEN H5T_NATIVE_OPAQUE_g)
0851 /**
0852  * \ingroup PDTNAT
0853  * HDF5 address type based on native types
0854  */
0855 #define H5T_NATIVE_HADDR (H5OPEN H5T_NATIVE_HADDR_g)
0856 /**
0857  * \ingroup PDTNAT
0858  * HDF5 size type based on native types
0859  */
0860 #define H5T_NATIVE_HSIZE (H5OPEN H5T_NATIVE_HSIZE_g)
0861 /**
0862  * \ingroup PDTNAT
0863  * HDF5 signed size type based on native types
0864  */
0865 #define H5T_NATIVE_HSSIZE (H5OPEN H5T_NATIVE_HSSIZE_g)
0866 /**
0867  * \ingroup PDTNAT
0868  * HDF5 error code type based on native types
0869  */
0870 #define H5T_NATIVE_HERR (H5OPEN H5T_NATIVE_HERR_g)
0871 /**
0872  * \ingroup PDTNAT
0873  * HDF5 Boolean type based on native types
0874  */
0875 #define H5T_NATIVE_HBOOL (H5OPEN H5T_NATIVE_HBOOL_g)
0876 H5_DLLVAR hid_t H5T_NATIVE_SCHAR_g;
0877 H5_DLLVAR hid_t H5T_NATIVE_UCHAR_g;
0878 H5_DLLVAR hid_t H5T_NATIVE_SHORT_g;
0879 H5_DLLVAR hid_t H5T_NATIVE_USHORT_g;
0880 H5_DLLVAR hid_t H5T_NATIVE_INT_g;
0881 H5_DLLVAR hid_t H5T_NATIVE_UINT_g;
0882 H5_DLLVAR hid_t H5T_NATIVE_LONG_g;
0883 H5_DLLVAR hid_t H5T_NATIVE_ULONG_g;
0884 H5_DLLVAR hid_t H5T_NATIVE_LLONG_g;
0885 H5_DLLVAR hid_t H5T_NATIVE_ULLONG_g;
0886 H5_DLLVAR hid_t H5T_NATIVE_FLOAT16_g;
0887 H5_DLLVAR hid_t H5T_NATIVE_FLOAT_g;
0888 H5_DLLVAR hid_t H5T_NATIVE_DOUBLE_g;
0889 H5_DLLVAR hid_t H5T_NATIVE_LDOUBLE_g;
0890 H5_DLLVAR hid_t H5T_NATIVE_B8_g;
0891 H5_DLLVAR hid_t H5T_NATIVE_B16_g;
0892 H5_DLLVAR hid_t H5T_NATIVE_B32_g;
0893 H5_DLLVAR hid_t H5T_NATIVE_B64_g;
0894 H5_DLLVAR hid_t H5T_NATIVE_OPAQUE_g;
0895 H5_DLLVAR hid_t H5T_NATIVE_HADDR_g;
0896 H5_DLLVAR hid_t H5T_NATIVE_HSIZE_g;
0897 H5_DLLVAR hid_t H5T_NATIVE_HSSIZE_g;
0898 H5_DLLVAR hid_t H5T_NATIVE_HERR_g;
0899 H5_DLLVAR hid_t H5T_NATIVE_HBOOL_g;
0900 
0901 /* C9x integer types */
0902 /**
0903  * \ingroup PDTC9x
0904  */
0905 #define H5T_NATIVE_INT8 (H5OPEN H5T_NATIVE_INT8_g)
0906 /**
0907  * \ingroup PDTC9x
0908  */
0909 #define H5T_NATIVE_UINT8 (H5OPEN H5T_NATIVE_UINT8_g)
0910 /**
0911  * \ingroup PDTC9x
0912  */
0913 #define H5T_NATIVE_INT_LEAST8 (H5OPEN H5T_NATIVE_INT_LEAST8_g)
0914 /**
0915  * \ingroup PDTC9x
0916  */
0917 #define H5T_NATIVE_UINT_LEAST8 (H5OPEN H5T_NATIVE_UINT_LEAST8_g)
0918 /**
0919  * \ingroup PDTC9x
0920  */
0921 #define H5T_NATIVE_INT_FAST8 (H5OPEN H5T_NATIVE_INT_FAST8_g)
0922 /**
0923  * \ingroup PDTC9x
0924  */
0925 #define H5T_NATIVE_UINT_FAST8 (H5OPEN H5T_NATIVE_UINT_FAST8_g)
0926 H5_DLLVAR hid_t H5T_NATIVE_INT8_g;
0927 H5_DLLVAR hid_t H5T_NATIVE_UINT8_g;
0928 H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST8_g;
0929 H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST8_g;
0930 H5_DLLVAR hid_t H5T_NATIVE_INT_FAST8_g;
0931 H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST8_g;
0932 
0933 /**
0934  * \ingroup PDTC9x
0935  */
0936 #define H5T_NATIVE_INT16 (H5OPEN H5T_NATIVE_INT16_g)
0937 /**
0938  * \ingroup PDTC9x
0939  */
0940 #define H5T_NATIVE_UINT16 (H5OPEN H5T_NATIVE_UINT16_g)
0941 /**
0942  * \ingroup PDTC9x
0943  */
0944 #define H5T_NATIVE_INT_LEAST16 (H5OPEN H5T_NATIVE_INT_LEAST16_g)
0945 /**
0946  * \ingroup PDTC9x
0947  */
0948 #define H5T_NATIVE_UINT_LEAST16 (H5OPEN H5T_NATIVE_UINT_LEAST16_g)
0949 /**
0950  * \ingroup PDTC9x
0951  */
0952 #define H5T_NATIVE_INT_FAST16 (H5OPEN H5T_NATIVE_INT_FAST16_g)
0953 /**
0954  * \ingroup PDTC9x
0955  */
0956 #define H5T_NATIVE_UINT_FAST16 (H5OPEN H5T_NATIVE_UINT_FAST16_g)
0957 H5_DLLVAR hid_t H5T_NATIVE_INT16_g;
0958 H5_DLLVAR hid_t H5T_NATIVE_UINT16_g;
0959 H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST16_g;
0960 H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST16_g;
0961 H5_DLLVAR hid_t H5T_NATIVE_INT_FAST16_g;
0962 H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST16_g;
0963 
0964 /**
0965  * \ingroup PDTC9x
0966  */
0967 #define H5T_NATIVE_INT32 (H5OPEN H5T_NATIVE_INT32_g)
0968 /**
0969  * \ingroup PDTC9x
0970  */
0971 #define H5T_NATIVE_UINT32 (H5OPEN H5T_NATIVE_UINT32_g)
0972 /**
0973  * \ingroup PDTC9x
0974  */
0975 #define H5T_NATIVE_INT_LEAST32 (H5OPEN H5T_NATIVE_INT_LEAST32_g)
0976 /**
0977  * \ingroup PDTC9x
0978  */
0979 #define H5T_NATIVE_UINT_LEAST32 (H5OPEN H5T_NATIVE_UINT_LEAST32_g)
0980 /**
0981  * \ingroup PDTC9x
0982  */
0983 #define H5T_NATIVE_INT_FAST32 (H5OPEN H5T_NATIVE_INT_FAST32_g)
0984 /**
0985  * \ingroup PDTC9x
0986  */
0987 #define H5T_NATIVE_UINT_FAST32 (H5OPEN H5T_NATIVE_UINT_FAST32_g)
0988 H5_DLLVAR hid_t H5T_NATIVE_INT32_g;
0989 H5_DLLVAR hid_t H5T_NATIVE_UINT32_g;
0990 H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST32_g;
0991 H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST32_g;
0992 H5_DLLVAR hid_t H5T_NATIVE_INT_FAST32_g;
0993 H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST32_g;
0994 
0995 /**
0996  * \ingroup PDTC9x
0997  */
0998 #define H5T_NATIVE_INT64 (H5OPEN H5T_NATIVE_INT64_g)
0999 /**
1000  * \ingroup PDTC9x
1001  */
1002 #define H5T_NATIVE_UINT64 (H5OPEN H5T_NATIVE_UINT64_g)
1003 /**
1004  * \ingroup PDTC9x
1005  */
1006 #define H5T_NATIVE_INT_LEAST64 (H5OPEN H5T_NATIVE_INT_LEAST64_g)
1007 /**
1008  * \ingroup PDTC9x
1009  */
1010 #define H5T_NATIVE_UINT_LEAST64 (H5OPEN H5T_NATIVE_UINT_LEAST64_g)
1011 /**
1012  * \ingroup PDTC9x
1013  */
1014 #define H5T_NATIVE_INT_FAST64 (H5OPEN H5T_NATIVE_INT_FAST64_g)
1015 /**
1016  * \ingroup PDTC9x
1017  */
1018 #define H5T_NATIVE_UINT_FAST64 (H5OPEN H5T_NATIVE_UINT_FAST64_g)
1019 H5_DLLVAR hid_t H5T_NATIVE_INT64_g;
1020 H5_DLLVAR hid_t H5T_NATIVE_UINT64_g;
1021 H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST64_g;
1022 H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST64_g;
1023 H5_DLLVAR hid_t H5T_NATIVE_INT_FAST64_g;
1024 H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST64_g;
1025 
1026 /* Operations defined on all datatypes */
1027 /**
1028  * \ingroup H5T
1029  *
1030  * \brief Creates a new datatype.
1031  *
1032  * \param[in] type Class of datatype to create
1033  * \param[in] size  Size, in bytes, of the datatype being created
1034  *
1035  * \return \hid_t{datatype}
1036  *
1037  * \details H5Tcreate() creates a new datatype of the specified class with the
1038  *          specified number of bytes. This function is used only with the
1039  *          following datatype classes:
1040  *          - #H5T_COMPOUND
1041  *          - #H5T_OPAQUE
1042  *          - #H5T_ENUM
1043  *          - #H5T_STRING
1044  *
1045  *          Other datatypes, including integer and floating-point datatypes,
1046  *          are typically created by using H5Tcopy() to copy and modify a
1047  *          predefined datatype.
1048  *
1049  *          When creating a variable-length string datatype, \p size must
1050  *          be #H5T_VARIABLE; see \ref_vlen_strings.
1051  *
1052  *          When creating a fixed-length string datatype, \p size will
1053  *          be the length of the string in bytes. The length of the
1054  *          string in characters will depend on i the encoding used; see
1055  *          #H5Pset_char_encoding.
1056  *
1057  *          ENUMs created with this function have a signed native integer
1058  *          base datatype.  Use H5Tenum_create() if a different integer base
1059  *          datatype is required.
1060  *
1061  *          The datatype identifier returned from this function should be
1062  *          released with H5Tclose or resource leaks will result.
1063  *
1064  * \see H5Tclose()
1065  *
1066  * \since 1.0.0
1067  *
1068  */
1069 H5_DLL hid_t H5Tcreate(H5T_class_t type, size_t size);
1070 /**
1071  * \ingroup H5T
1072  *
1073  * \brief Copies an existing datatype.
1074  *
1075  * \type_id
1076  *
1077  * \return \hid_t{datatype}
1078  *
1079  * \details H5Tcopy() makes a copy of an existing datatype. The returned type
1080  *          is always transient and unlocked.
1081  *
1082  *          The \p type_id argument can be either a datatype identifier,
1083  *          a predefined datatype (defined in H5Tpublic.h), or a dataset
1084  *          identifier.  If \p type_id is a dataset identifier, this function
1085  *          returns a transient, modifiable datatype which is a copy of the
1086  *          dataset's datatype.
1087  *
1088  *          The returned datatype identifier should be released with H5Tclose()
1089  *          to prevent resource leaks.
1090  *
1091  * \since 1.0.0
1092  *
1093  */
1094 H5_DLL hid_t H5Tcopy(hid_t type_id);
1095 /**
1096  * \ingroup H5T
1097  *
1098  * \brief Releases a datatype
1099  *
1100  * \type_id
1101  *
1102  * \return \herr_t
1103  *
1104  * \details H5Tclose() releases the datatype \p dtype_id. Further access
1105  *          through this datatype identifier is illegal. Failure to release
1106  *          a datatype with this call will result in resource leaks.
1107  *
1108  * \since 1.0.0
1109  *
1110  */
1111 H5_DLL herr_t H5Tclose(hid_t type_id);
1112 /**
1113  * \ingroup H5T
1114  *
1115  * \brief Asynchronous version of H5Tclose().
1116  *
1117  * \since 1.12.0
1118  *
1119  */
1120 #ifndef H5_DOXYGEN
1121 H5_DLL herr_t H5Tclose_async(const char *app_file, const char *app_func, unsigned app_line, hid_t type_id,
1122                              hid_t es_id);
1123 #else
1124 H5_DLL herr_t H5Tclose_async(hid_t type_id, hid_t es_id);
1125 #endif
1126 /**
1127  * \ingroup H5T
1128  *
1129  * \brief Determines whether two datatype identifiers refer to the same datatype
1130  *
1131  * \type_id{type1_id}
1132  * \type_id{type2_id}
1133  *
1134  * \return \htri_t
1135  *
1136  * \details H5Tequal() determines whether two datatype identifiers refer to
1137  *          the same datatype.
1138  *
1139  * \since 1.0.0
1140  *
1141  */
1142 H5_DLL htri_t H5Tequal(hid_t type1_id, hid_t type2_id);
1143 /**
1144  * \ingroup H5T
1145  *
1146  * \brief Locks a datatype
1147  *
1148  * \type_id
1149  *
1150  * \return \herr_t
1151  *
1152  * \details H5Tlock() locks the datatype specified by the dtype_id identifier,
1153  *          making it read-only and non-destructible. This is normally done by
1154  *          the library for predefined datatypes so the application does not
1155  *          inadvertently change or delete a predefined type. Once a datatype
1156  *          is locked it can never be unlocked.
1157  *
1158  * \since 1.0.0
1159  *
1160  */
1161 H5_DLL herr_t H5Tlock(hid_t type_id);
1162 /**
1163  * \ingroup H5T
1164  *
1165  * \brief Commits a transient datatype, linking it into the file and creating
1166  *        a new committed datatype
1167  *
1168  * \fg_loc_id
1169  * \param[in] name Name given to committed datatype
1170  * \type_id Identifier of datatype to be committed and, upon function's
1171  *          return, identifier for the committed datatype
1172  * \lcpl_id
1173  * \tcpl_id
1174  * \tapl_id
1175  *
1176  * \return \herr_t
1177  *
1178  * \details H5Tcommit2() saves a transient datatype as an immutable committed
1179  *          datatype in a file. The datatype specified by \p dtype_id is
1180  *          committed to the file with the name name at the location specified
1181  *          by \p loc_id and with the datatype creation and access property
1182  *          lists \p tcpl_id and \p tapl_id, respectively.
1183  *
1184  *          \p loc_id may be a file identifier, or a group identifier within
1185  *          that file. \p name may be either an absolute path in the file or
1186  *          a relative path from \p loc_id naming the newly-committed datatype.
1187  *
1188  *          The link creation property list, \p lcpl_id, governs creation of
1189  *          the link(s) by which the new committed datatype is accessed and
1190  *          the creation of any intermediate groups that may be missing.
1191  *
1192  *          Once committed, this datatype may be used to define the datatype
1193  *          of any other dataset or attribute in the file.
1194  *
1195  *          This function will not accept a datatype that cannot actually hold
1196  *          information. This currently includes compound datatypes with no
1197  *          fields and enumerated datatypes with no members.
1198  *
1199  *          Committed datatypes are sometimes referred to as named datatypes.
1200  *
1201  * \version 1.8.7 Function modified in this release to reject datatypes that
1202  *          will not accommodate actual data, such as a compound datatype
1203  *          with no fields or an enumerated datatype with no members.
1204  *
1205  * \since 1.8.0
1206  *
1207  */
1208 H5_DLL herr_t H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id, hid_t lcpl_id, hid_t tcpl_id,
1209                          hid_t tapl_id);
1210 /**
1211  * \ingroup H5T
1212  *
1213  * \brief Asynchronous version of H5Tcommit2().
1214  *
1215  * \since 1.12.0
1216  *
1217  */
1218 #ifndef H5_DOXYGEN
1219 H5_DLL herr_t H5Tcommit_async(const char *app_file, const char *app_func, unsigned app_line, hid_t loc_id,
1220                               const char *name, hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id,
1221                               hid_t es_id);
1222 #else
1223 H5_DLL herr_t H5Tcommit_async(hid_t loc_id, const char *name, hid_t type_id, hid_t lcpl_id, hid_t tcpl_id,
1224                               hid_t tapl_id, hid_t es_id);
1225 #endif
1226 /**
1227  * --------------------------------------------------------------------------
1228  * \ingroup H5T
1229  *
1230  * \brief Opens a committed (named) datatype
1231  *
1232  * \fgdta_loc_id
1233  * \param[in] name Name of the datatype to open
1234  * \tapl_id
1235  *
1236  * \return \hid_t{datatype}
1237  *
1238  * \details H5Topen2() opens a committed datatype at the location specified
1239  *          by \p loc_id and returns an identifier for the datatype. \p
1240  *          loc_id is either a file or group identifier. The identifier should
1241  *          eventually be closed by calling H5Tclose()  to release resources.
1242  *
1243  *          The committed datatype is opened with the datatype access property
1244  *          list tapl_id.
1245  *
1246  * \since 1.8.0
1247  *
1248  */
1249 H5_DLL hid_t H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id);
1250 /**
1251  * \ingroup H5T
1252  *
1253  * \brief Asynchronous version of H5Topen2().
1254  *
1255  * \since 1.12.0
1256  *
1257  */
1258 #ifndef H5_DOXYGEN
1259 H5_DLL hid_t H5Topen_async(const char *app_file, const char *app_func, unsigned app_line, hid_t loc_id,
1260                            const char *name, hid_t tapl_id, hid_t es_id);
1261 #else
1262 H5_DLL hid_t  H5Topen_async(hid_t loc_id, const char *name, hid_t tapl_id, hid_t es_id);
1263 #endif
1264 /**
1265  * \ingroup H5T
1266  *
1267  * \brief Commits a transient datatype to a file, creating a newly named
1268  *        datatype, but does not link it into the file structure
1269  *
1270  * \fg_loc_id
1271  * \type_id
1272  * \tcpl_id
1273  * \tapl_id
1274  *
1275  * \return \herr_t
1276  *
1277  * \details H5Tcommit_anon() commits a transient datatype (not immutable)
1278  *          to a file, turning it into a named datatype with the specified
1279  *          creation and property lists. With default property lists,
1280  *          #H5P_DEFAULT, H5Tcommit_anon() provides similar functionality to
1281  *          that of H5Tcommit(), with the differences described below.
1282  *
1283  *          #H5P_DEFAULT can be passed in for the datatype creation property
1284  *          list identifier, \p tcpl_id.  The datatype access property list
1285  *          identifier, \p tapl_id, is provided for future functionality and
1286  *          is not used at this time. This parameter should always be passed
1287  *          as the value #H5P_DEFAULT.
1288  *
1289  *          Note that H5Tcommit_anon() does not link this newly-committed
1290  *          datatype into the file. After the H5Tcommit_anon() call, the
1291  *          datatype identifier \p type_id must be linked into the HDF5 file
1292  *          structure with H5Olink() or it will be deleted from the file when
1293  *          the file is closed.
1294  *
1295  *          The differences between this function and H5Tcommit() are as follows:
1296  *          \li H5Tcommit_anon() explicitly includes property lists,
1297  *              which provides for greater control of the creation process
1298  *              and of the properties of the new named datatype. H5Tcommit()
1299  *              always uses default properties.
1300  *          \li H5Tcommit_anon() neither provides the new named datatype's
1301  *              name nor links it into the HDF5 file structure; those actions
1302  *              must be performed separately through a call to H5Olink(),
1303  *              which offers greater control over linking.
1304  *
1305  *          This function will not accept a datatype that cannot actually
1306  *          hold data. This currently includes compound datatypes with no
1307  *          fields and enumerated datatypes with no members.
1308  *
1309  * \version 1.8.7 Function modified in this release to reject datatypes that
1310  *                will not accommodate actual data, such as a compound datatype
1311  *                with no fields or an enumerated datatype with no members.
1312  *
1313  * \since 1.2.0
1314  *
1315  */
1316 H5_DLL herr_t H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id);
1317 /**
1318  * \ingroup H5T
1319  *
1320  * \brief Returns a copy of a datatype's creation property list
1321  *
1322  * \type_id
1323  *
1324  * \return \hid_t{datatype creation property list}
1325  *
1326  * \details H5Tget_create_plist() returns a property list identifier
1327  *          for the datatype creation property list associated with the datatype
1328  *          specified by \p type_id.
1329  *
1330  *          The creation property list identifier should be released with
1331  *          H5Pclose() to prevent memory leaks.
1332  *
1333  * \since 1.8.0
1334  *
1335  */
1336 H5_DLL hid_t H5Tget_create_plist(hid_t type_id);
1337 /**
1338  * \ingroup H5T
1339  *
1340  * \brief Determines whether a datatype is a committed type or a transient type
1341  *
1342  * \type_id
1343  *
1344  * \return \htri_t
1345  *
1346  * \details H5Tcommitted() queries a type to determine whether the type
1347  *          specified by the \p dtype_id identifier is a committed (formerly
1348  *          known as a \Emph{named}) type or a transient type. If this function returns
1349  *          a positive value, then the type is committed (that is, it has been
1350  *          committed, perhaps by some other application). Datasets which
1351  *          return committed datatypes with H5Dget_type() are able to share
1352  *          the datatype with other datasets in the same file.
1353  *
1354  * \version 1.8.0 Fortran API was added
1355  *
1356  * \since 1.0.0
1357  *
1358  */
1359 H5_DLL htri_t H5Tcommitted(hid_t type_id);
1360 /**
1361  * \ingroup H5T
1362  *
1363  * \brief Encodes a datatype object description into a binary buffer
1364  *
1365  * \param[in] obj_id Identifier of the object to be encoded
1366  * \param[in,out] buf Buffer for the object to be encoded into.
1367  * \param[in,out] nalloc IN: The size of the allocated buffer
1368  *                       OUT: The size of the buffer needed
1369  *
1370  * \return \herr_t
1371  *
1372  * \details H5Tencode() Given datatype identifier, H5Tencode() converts a
1373  *          datatype description into binary form in a buffer. Using this
1374  *          binary form in the buffer, a datatype object can be reconstructed
1375  *          using H5Tdecode() to return a new object handle (\ref hid_t) for
1376  *          this datatype.
1377  *
1378  *          If the provided buffer is NULL, only the size of buffer needed is
1379  *          returned through \p nalloc.
1380  *
1381  *          A preliminary H5Tencode() call can be made to find out the size
1382  *          of the buffer needed. This value is returned as \p nalloc. That
1383  *          value can then be assigned to \p nalloc for a second H5Tencode()
1384  *          call, which will retrieve the actual encoded object.
1385  *
1386  *          If the library finds that \p nalloc is not big enough for the
1387  *          object, it simply returns the size of the buffer needed through
1388  *          \p nalloc without encoding the provided buffer.
1389  *
1390  * \since 1.2.0
1391  *
1392  */
1393 H5_DLL herr_t H5Tencode(hid_t obj_id, void *buf, size_t *nalloc);
1394 /**
1395  * \ingroup H5T
1396  *
1397  * \brief Decodes a binary object description of datatype and returns a new
1398  *        object handle
1399  *
1400  * \param[in] buf Buffer for the datatype object to be decoded
1401  *
1402  * \return \hid_t{datatype}
1403  *
1404  * \details H5Tdecode() Given an object description of datatype in binary in a
1405  *          buffer, H5Tdecode() reconstructs the HDF5 datatype object and
1406  *          returns a new object handle for it. The binary description of
1407  *          the object is encoded by H5Tencode(). User is responsible for
1408  *          passing in the right buffer.
1409  *
1410  *          The datatype identifier returned by this function can be released
1411  *          with H5Tclose() when the identifier is no longer needed so that
1412  *          resource leaks will not develop.
1413  *
1414  * \since 1.2.0
1415  *
1416  */
1417 H5_DLL hid_t H5Tdecode(const void *buf);
1418 /**
1419  * \ingroup H5T
1420  *
1421  * \brief Flushes all buffers associated with a committed datatype to disk
1422  *
1423  * \type_id
1424  *
1425  * \return \herr_t
1426  *
1427  * \details H5Tflush() causes all buffers associated with a committed datatype
1428  *          \p type_id to be immediately flushed to disk without removing the
1429  *          data from the cache.
1430  *
1431  *          HDF5 does not possess full control over buffering.  H5Tflush()
1432  *          flushes the internal HDF5 buffers and then asks the operating
1433  *          system (the OS) to flush the system buffers for the open
1434  *          files. After that, the OS is responsible for ensuring that the
1435  *          data is actually flushed to disk.
1436  *
1437  * \return \herr_t
1438  *
1439  * \since 1.10.0
1440  *
1441  * \see     H5Dflush()
1442  *          H5Drefresh()
1443  *          H5Tflush()
1444  *          H5Grefresh()
1445  *          H5Oflush()
1446  *          H5Orefresh()
1447  *          H5Tflush()
1448  *          H5Trefresh()
1449  *          H5Fstart_swmr_write()
1450  *          H5Pget_append_flush()
1451  *          H5Pget_object_flush_cb()
1452  *          H5Pset_append_flush()
1453  *          H5Pset_object_flush_cb()
1454  *
1455  */
1456 H5_DLL herr_t H5Tflush(hid_t type_id);
1457 /**
1458  * \ingroup H5T
1459  *
1460  * \brief Refreshes all buffers associated with a committed datatype
1461  *
1462  * \type_id
1463  *
1464  * \return \herr_t
1465  *
1466  * \details H5Trefresh() causes all buffers associated with a committed
1467  *          datatype to be cleared and immediately re-loaded with updated
1468  *          contents from disk.
1469  *
1470  *          This function essentially closes the datatype, evicts all
1471  *          metadata associated with it from the cache, and then reopens the
1472  *          datatype. The reopened datatype is automatically re-registered
1473  *          with the same identifier.
1474  *
1475  * \since 1.10.0
1476  *
1477  */
1478 H5_DLL herr_t H5Trefresh(hid_t type_id);
1479 
1480 /* Operations defined on compound datatypes */
1481 /**
1482  * \ingroup COMPOUND
1483  *
1484  * \brief Adds a new member to a compound datatype.
1485  *
1486  * \type_id{parent_id}
1487  * \param[in] name      Name of the field to insert
1488  * \param[in] offset    Offset in memory structure of the field to insert
1489  * \param[in] member_id  Datatype identifier of the field to insert
1490  *
1491  * \return \herr_t
1492  *
1493  * \details H5Tinsert() adds another member to the compound datatype, specified
1494  *          \p type_id.
1495  *
1496  *          The new member has a \p name which must be unique within the
1497  *          compound datatype. The \p offset argument defines the start of the
1498  *          member in an instance of the compound datatype, and \p member_id
1499  *          is the datatype identifier of the new member.
1500  *
1501  *          \note Members of a compound datatype do not have to be atomic
1502  *          datatypes; a compound datatype can have a member which is a
1503  *          compound datatype.
1504  *
1505  * \since 1.0.0
1506  *
1507  */
1508 H5_DLL herr_t H5Tinsert(hid_t parent_id, const char *name, size_t offset, hid_t member_id);
1509 /**
1510  * \ingroup COMPOUND
1511  *
1512  * \brief Recursively removes padding from within a compound datatype
1513  *
1514  * \type_id
1515  *
1516  * \return \herr_t
1517  *
1518  * \details H5Tpack() recursively removes padding from within a compound
1519  *          datatype to make it more efficient (space-wise) to store that data.
1520  *
1521  * \since 1.0.0
1522  *
1523  */
1524 H5_DLL herr_t H5Tpack(hid_t type_id);
1525 
1526 /* Operations defined on enumeration datatypes */
1527 /**
1528  * \ingroup ENUM
1529  *
1530  * \brief Creates a new enumeration datatype
1531  *
1532  * \param[in] base_id Datatype identifier for the base datatype.  Must be an
1533  *            integer datatype
1534  *
1535  * \return \hid_t{enumeration datatype}
1536  *
1537  * \details H5Tenum_create() creates a new enumeration datatype based on the
1538  *          specified base datatype, dtype_id, which must be an integer datatype.
1539  *
1540  *          If a particular architecture datatype is required, a little endian
1541  *          or big endian datatype for example, use a native datatype as the
1542  *          base datatype and use H5Tconvert()  on values as they are read
1543  *          from or written to a dataset.
1544  *
1545  * \since 1.2.0
1546  *
1547  */
1548 H5_DLL hid_t H5Tenum_create(hid_t base_id);
1549 /**
1550  * \ingroup ENUM
1551  *
1552  * \brief Inserts a new enumeration datatype member
1553  *
1554  * \type_id{type}
1555  * \param[in] name  Name of the new member
1556  * \param[in] value Pointer to the value of the new member
1557  *
1558  * \return \herr_t
1559  *
1560  * \details H5Tenum_insert() inserts a new enumeration datatype member into an
1561  *          enumeration datatype.
1562  *
1563  *          \p type_id is the datatype identifier for the enumeration datatype,
1564  *          \p name is the name of the new member, and \p value points to the
1565  *           value of the new member.
1566  *
1567  *          \p name and \p value must both be unique within \p dtype_id.
1568  *
1569  *          \p value points to data which must be of the integer base datatype
1570  *          used when the enumeration datatype was created. If a particular
1571  *          architecture datatype is required, a little endian or big endian
1572  *          datatype for example, use a native datatype as the base datatype
1573  *          and use H5Tconvert() on values as they are read from or written
1574  *          to a dataset.
1575  *
1576  * \since 1.2.0
1577  *
1578  */
1579 H5_DLL herr_t H5Tenum_insert(hid_t type, const char *name, const void *value);
1580 /**
1581  * \ingroup ENUM
1582  *
1583  * \brief Returns the symbol name corresponding to a specified member of an
1584  *        enumeration datatype
1585  *
1586  * \type_id{type}
1587  * \param[in] value Value of the enumeration datatype
1588  * \param[out] name Buffer for output of the symbol name
1589  * \param[in] size Anticipated size of the symbol name, in bytes
1590  *
1591  * \return Returns a non-negative value if successful. Otherwise returns a
1592  *         negative value
1593  *
1594  * \details H5Tenum_nameof() finds the symbol name that corresponds to the
1595  *          specified \p value of the enumeration datatype \p type.
1596  *
1597  *          At most \p size characters of the symbol \p name are copied into
1598  *          the \p name buffer. If the entire symbol name and null terminator
1599  *          do not fit in the name buffer, then as many characters as possible
1600  *          are copied (not null terminated) and the function fails.
1601  *
1602  * \since 1.2.0
1603  *
1604  */
1605 H5_DLL herr_t H5Tenum_nameof(hid_t type, const void *value, char *name /*out*/, size_t size);
1606 /**
1607  * \ingroup ENUM
1608  *
1609  * \brief Returns the value corresponding to a specified member of an
1610  *        enumeration datatype
1611  *
1612  * \type_id{type}
1613  * \param[in] name Symbol name of the enumeration datatype
1614  * \param[out] value Buffer for the value of the enumeration datatype
1615  *
1616  * \return \herr_t
1617  *
1618  * \details H5Tenum_valueof() finds the value that corresponds to the
1619  *          specified name of the enumeration datatype \p dtype_id.
1620  *
1621  *          Values returned in \p value will be of the enumerated type's
1622  *          base type, that is, the datatype used by H5Tenum_create() when
1623  *          the enumerated type was created.
1624  *
1625  *          The \p value buffer must be at least large enough to hold a value
1626  *          of that base type. If the size is unknown, you can determine it
1627  *          with H5Tget_size().
1628  *
1629  * \since 1.2.0
1630  *
1631  */
1632 H5_DLL herr_t H5Tenum_valueof(hid_t type, const char *name, void *value /*out*/);
1633 
1634 /* Operations defined on variable-length datatypes */
1635 /**
1636  * \ingroup VLEN
1637  *
1638  * \brief Creates a new variable-length array datatype
1639  *
1640  * \type_id{base_id}, the element type of the datatype to create
1641  *
1642  * \return \hid_t{variable-length datatype}
1643  *
1644  * \details H5Tvlen_create() creates a new one-dimensional array datatype of
1645  *          variable-length (VL) with the base datatype \p base_id.
1646  *
1647  *          This one-dimensional array often represents a data sequence of the
1648  *          base datatype, such as characters for character sequences or vertex
1649  *          coordinates for polygon lists. The base type specified for the VL
1650  *          datatype can be any HDF5 datatype, including another VL datatype, a
1651  *          compound datatype, or an atomic datatype.
1652  *
1653  *          When necessary, use H5Tget_super() to determine the base type of
1654  *          the VL datatype.
1655  *
1656  *          The datatype identifier returned from this function should be
1657  *          released with H5Tclose() or resource leaks will result. Under
1658  *          certain circumstances, H5Dvlen_reclaim() must also be used.
1659  *
1660  * \attention H5Tvlen_create() cannot be used to create a variable-length
1661  *            string datatype. H5Tvlen_create() called with a string or
1662  *            character base type creates a variable-length sequence of strings
1663  *            (a variable-length, 1-dimensional array), with each element of
1664  *            the array being of the string or character base type.\n
1665  *            To create a variable-length string datatype, see \ref_vlen_strings.
1666  *
1667  * \since 1.2.0
1668  *
1669  */
1670 H5_DLL hid_t H5Tvlen_create(hid_t base_id);
1671 
1672 /* Operations defined on array datatypes */
1673 /**
1674  * \ingroup ARRAY
1675  *
1676  * \brief Creates an array datatype object
1677  *
1678  * \param[in] base_id Datatype identifier for the array base datatype
1679  * \param[in] ndims Rank of the array
1680  * \param[in] dim Size of each array dimension
1681  *
1682  * \return \hid_t{array datatype}
1683  *
1684  * \details H5Tarray_create2() creates a new array datatype object.\n\n
1685  *          \p base_id is the datatype of every element of the array, i.e.,
1686  *          of the number at each position in the array.
1687  *
1688  *          \p ndims is the number of dimensions and the size of each dimension
1689  *          is specified in the array \p dim. The value of \p rank is
1690  *          currently limited to #H5S_MAX_RANK and must be greater than 0
1691  *          (zero). All dimension sizes specified in \p dim must be greater
1692  *          than 0 (zero).
1693  *
1694  * \since 1.8.0
1695  *
1696  */
1697 H5_DLL hid_t H5Tarray_create2(hid_t base_id, unsigned ndims, const hsize_t dim[/* ndims */]);
1698 /**
1699  * \ingroup ARRAY
1700  *
1701  * \brief Returns the rank of an array datatype
1702  *
1703  * \type_id
1704  *
1705  * \return Returns the rank of the array if successful; otherwise returns a
1706  *         negative value.
1707  *
1708  * \details H5Tget_array_ndims() returns the rank, i.e., the number of
1709  *          dimensions, of an array datatype object.
1710  *
1711  * \since 1.2.0
1712  *
1713  */
1714 H5_DLL int H5Tget_array_ndims(hid_t type_id);
1715 /**
1716  * \ingroup ARRAY
1717  *
1718  * \brief Retrieves sizes of array dimensions
1719  *
1720  * \type_id
1721  * \param[out] dims Sizes of array dimensions
1722  *
1723  * \return Returns the non-negative number of dimensions of the array type
1724  *         if successful; otherwise returns a negative value.
1725  *
1726  * \details H5Tget_array_dims2() returns the sizes of the dimensions of the
1727  *          specified array datatype object in the array \p dims.
1728  *
1729  * \since 1.2.0
1730  *
1731  */
1732 H5_DLL int H5Tget_array_dims2(hid_t type_id, hsize_t dims[]);
1733 
1734 /* Operations defined on opaque datatypes */
1735 /**
1736  * \ingroup OPAQUE
1737  *
1738  * \brief Tags an opaque datatype
1739  *
1740  * \type_id{type} of an opaque datatype
1741  * \param[in] tag Descriptive ASCII string with which the opaque datatype is
1742  *                to be tagged
1743  *
1744  * \return \herr_t
1745  *
1746  * \details H5Tset_tag() tags an opaque datatype \p type with a descriptive
1747  *          ASCII identifier, \p tag.
1748  *
1749  *          \p tag is intended to provide a concise description; the maximum
1750  *          size is hard-coded in the HDF5 library as 256 bytes
1751  *          (#H5T_OPAQUE_TAG_MAX).
1752  *
1753  * \version 1.6.5 The #H5T_OPAQUE_TAG_MAX macro constant, specifying the
1754  *                maximum size of an opaque datatype tag, was added in
1755  *                H5Tpublic.h.
1756  *
1757  * \since 1.2.0
1758  *
1759  */
1760 H5_DLL herr_t H5Tset_tag(hid_t type, const char *tag);
1761 /**
1762  * \ingroup OPAQUE
1763  *
1764  * \brief Gets the tag associated with an opaque datatype
1765  *
1766  * \type_id{type} of an opaque datatype
1767  *
1768  * \return Returns a pointer to an allocated string if successful; otherwise
1769  *         returns NULL.
1770  *
1771  * \details H5Tget_tag() returns the tag associated with the opaque datatype
1772  *         \p type.
1773  *
1774  * \attention The tag is returned via a pointer to an allocated string, which
1775  *            the caller must free.
1776  *
1777  * \since 1.2.0
1778  *
1779  */
1780 H5_DLL char *H5Tget_tag(hid_t type);
1781 
1782 /* Querying property values */
1783 /**
1784  * \ingroup H5T
1785  *
1786  * \brief Returns the base datatype from which a datatype is derived
1787  *
1788  * \type_id{type}
1789  *
1790  * \return \hid_t{datatype}
1791  *
1792  * \details H5Tget_super() returns the base datatype from which the datatype
1793  *          \p type_id is derived.  In the case of an enumeration type, the
1794  *          return value is an integer type.
1795  *
1796  *          The datatype identifier returned by this function must be released
1797  *          with H5Tclose()  when the identifier is no longer needed so that
1798  *          resource leaks will not develop.
1799  *
1800  * \since 1.2.0
1801  *
1802  */
1803 H5_DLL hid_t H5Tget_super(hid_t type);
1804 /**
1805  * \ingroup H5T
1806  *
1807  * \brief Returns a datatype class
1808  *
1809  * \type_id
1810  *
1811  * \return Returns the datatype class if successful; otherwise #H5T_NO_CLASS.
1812  *
1813  * \details H5Tget_class() returns the class of the datatype \p type_id.
1814  *          Valid class identifiers, as defined in H5Tpublic.h, are:
1815  *          \snippet this H5T_class_t_snip
1816  *
1817  * \note The library returns #H5T_STRING for both fixed-length and
1818  *       variable-length strings.
1819  *
1820  * \note Unsupported datatype: The time datatype class, #H5T_TIME,
1821  *       is not supported. If #H5T_TIME is used, the resulting data will
1822  *       be readable and modifiable only on the originating computing
1823  *       platform; it will not be portable to other platforms.
1824  *
1825  * \since 1.0.0
1826  *
1827  */
1828 H5_DLL H5T_class_t H5Tget_class(hid_t type_id);
1829 /**
1830  * \ingroup H5T
1831  *
1832  * \brief Determines whether a datatype contains any datatypes of the given
1833  *        datatype class
1834  *
1835  * \type_id
1836  * \param[in] cls Datatype class
1837  *
1838  * \return \htri_t
1839  *
1840  * \details H5Tdetect_class() determines whether the datatype specified in
1841  *          \p type_id contains any datatypes of the datatype class specified
1842  *          in \p dtype_class.
1843  *
1844  *          This function is useful primarily in recursively examining all the
1845  *          fields and/or base types of compound, array, and variable-length
1846  *          datatypes.
1847  *
1848  *          Valid class identifiers, as defined in H5Tpublic.h, are:
1849  *          \snippet this H5T_class_t_snip
1850  *
1851  * \since 1.6.0
1852  *
1853  */
1854 H5_DLL htri_t H5Tdetect_class(hid_t type_id, H5T_class_t cls);
1855 /**
1856  * \ingroup H5T
1857  *
1858  * \brief Returns the size of a datatype
1859  *
1860  * \type_id
1861  *
1862  * \return Returns the size of the datatype in bytes if successful; otherwise,
1863  *         returns 0.
1864  *
1865  * \details H5Tget_size() returns the size of a datatype in bytes.
1866  *          \li For atomic datatypes, array datatypes, compound datatypes, and
1867  *          other datatypes of a constant size, the returned value is the
1868  *          size of the actual datatype in bytes.
1869  *          \li For variable-length string datatypes the returned value is
1870  *          the size of the pointer to the actual string, or \c sizeof(\c
1871  *          char \c *). This function does not return the size of actual
1872  *          variable-length string data.
1873  *          \li For variable-length sequence datatypes (see H5Tvlen_create()),
1874  *          the returned value is the size of the \p hvl_t struct, or \c
1875  *          sizeof(\p hvl_t). The \p hvl_t struct contains a pointer to the
1876  *          actual data and a size value.  This function does not return the
1877  *          size of actual variable-length sequence data.
1878  *
1879  * \see H5Tset_size()
1880  *
1881  * \since 1.0.0
1882  */
1883 H5_DLL size_t H5Tget_size(hid_t type_id);
1884 /**
1885  * \ingroup ATOM
1886  *
1887  * \brief Returns the byte order of an atomic datatype
1888  *
1889  * \type_id
1890  *
1891  * \return Returns a byte order constant if successful; otherwise returns
1892  *         #H5T_ORDER_ERROR (-1)
1893  *
1894  * \details H5Tget_order() returns the byte order of an atomic datatype.
1895  *          Possible return values are:
1896  *          \snippet this H5T_order_t_snip
1897  *          Members of a compound datatype need not have the same byte
1898  *          order. If members of a compound datatype have more than one of
1899  *          little endian, big endian, or VAX byte order, H5Tget_order() will
1900  *          return #H5T_ORDER_MIXED for the compound datatype. A byte order of
1901  *          #H5T_ORDER_NONE will, however, be ignored; for example, if one or
1902  *          more members of a compound datatype have byte order #H5T_ORDER_NONE
1903  *          but all other members have byte order #H5T_ORDER_LE,  H5Tget_order()
1904  *          will return #H5T_ORDER_LE for the compound datatype.
1905  *
1906  * \since 1.0.0
1907  *
1908  */
1909 H5_DLL H5T_order_t H5Tget_order(hid_t type_id);
1910 /**
1911  * \ingroup ATOM
1912  *
1913  * \brief Returns the precision of an atomic datatype
1914  *
1915  * \type_id
1916  *
1917  * \return Returns the number of significant bits if successful; otherwise 0
1918  *
1919  * \details H5Tget_precision() returns the precision of an atomic datatype
1920  *          (for example, integer or float) or a datatype whose base (parent)
1921  *          type is an atomic type (for example, array, enum and variable
1922  *          length). The precision is the number of significant bits which,
1923  *          unless padding is present, is 8 times larger than the value
1924  *          returned by H5Tget_size().
1925  *
1926  * \since 1.0.0
1927  *
1928  */
1929 H5_DLL size_t H5Tget_precision(hid_t type_id);
1930 /**
1931  * \ingroup ATOM
1932  *
1933  * \brief Retrieves the bit offset of the first significant bit
1934  *
1935  * \type_id
1936  *
1937  * \return Returns an offset value if successful; otherwise returns a
1938  *         negative value.
1939  *
1940  * \details H5Tget_offset() retrieves the bit offset of the first significant
1941  *          bit. The significant bits of an atomic datum can be offset from the
1942  *          beginning of the memory for that datum by an amount of padding. The
1943  *          'offset' property specifies the number of bits of padding that
1944  *          appear to the "right of" the value. That is, if we have a 32-bit
1945  *          datum with 16-bits of precision having the value 0x1122 then it
1946  *          will be laid out in memory as (from small byte address toward
1947  *          larger byte addresses):
1948  *          \code{.unparsed}
1949  *          0:  [ pad]  [0x11]  [0x22]  [ pad]
1950  *          1:  [ pad]  [0x22]  [0x11]  [ pad]
1951  *          2:  [0x11]  [ pad]  [ pad]  [0x22]
1952  *          3:  [0x22]  [ pad]  [ pad]  [0x11]
1953  *          \endcode
1954  *
1955  * \since 1.0.0
1956  *
1957  */
1958 H5_DLL int H5Tget_offset(hid_t type_id);
1959 /**
1960  * \ingroup ATOM
1961  *
1962  * \brief Retrieves the padding type of the least and most-significant bit padding
1963  *
1964  * \type_id
1965  * \param[out] lsb Buffer for the least-significant bit padding type
1966  * \param[out] msb Buffer for the most-significant bit padding type
1967  *
1968  * \return \herr_t
1969  *
1970  * \details H5Tget_pad() retrieves the padding type of the least and
1971  *          most-significant bit padding. Valid padding types are:
1972  *          \snippet this H5T_pad_t_snip
1973  *
1974  * \since 1.0.0
1975  *
1976  */
1977 H5_DLL herr_t H5Tget_pad(hid_t type_id, H5T_pad_t *lsb /*out*/, H5T_pad_t *msb /*out*/);
1978 /**
1979  * \ingroup ATOM
1980  *
1981  * \brief Retrieves the sign type for an integer type
1982  *
1983  * \type_id
1984  *
1985  * \return Returns a valid sign type if successful; otherwise #H5T_SGN_ERROR (-1)
1986  *
1987  * \details H5Tget_sign() retrieves the sign type for an integer type.
1988  *          Valid types are:
1989  *          \snippet this H5T_sign_t_snip
1990  *
1991  * \since 1.0.0
1992  *
1993  */
1994 H5_DLL H5T_sign_t H5Tget_sign(hid_t type_id);
1995 /**
1996  * \ingroup ATOM
1997  *
1998  * \brief Retrieves floating point datatype bit field information
1999  *
2000  * \type_id
2001  * \param[out] spos Pointer to location to return floating-point sign bit
2002  * \param[out] epos Pointer to location to return exponent bit-position
2003  * \param[out] esize Pointer to location to return size of exponent in bits
2004  * \param[out] mpos Pointer to location to return mantissa bit-position
2005  * \param[out] msize Pointer to location to return size of mantissa in bits
2006  *
2007  * \return \herr_t
2008  *
2009  * \details H5Tget_fields() retrieves information about the locations of
2010  *          the various bit fields of a floating point datatype. The field
2011  *          positions are bit positions in the significant region of the
2012  *          datatype. Bits are numbered with the least significant bit number
2013  *          zero. Any (or even all) of the arguments can be null pointers.
2014  *
2015  * \since 1.0.0
2016  *
2017  */
2018 H5_DLL herr_t H5Tget_fields(hid_t type_id, size_t *spos /*out*/, size_t *epos /*out*/, size_t *esize /*out*/,
2019                             size_t *mpos /*out*/, size_t *msize /*out*/);
2020 /**
2021  * \ingroup ATOM
2022  *
2023  * \brief Retrieves the exponent bias of a floating-point type
2024  *
2025  * \type_id
2026  *
2027  * \return Returns the bias if successful and 0, otherwise.
2028  *
2029  * \details H5Tget_ebias() retrieves the exponent bias of a floating-point type.
2030  *
2031  * \since 1.0.0
2032  *
2033  */
2034 H5_DLL size_t H5Tget_ebias(hid_t type_id);
2035 /**
2036  * --------------------------------------------------------------------------
2037  * \ingroup ATOM
2038  *
2039  * \brief Retrieves mantissa normalization of a floating-point datatype
2040  *
2041  * \type_id
2042  *
2043  * \return Returns a valid normalization type if successful; otherwise
2044  *         returns #H5T_NORM_ERROR (-1)
2045  *
2046  * \details H5Tget_norm() retrieves the mantissa normalization of a
2047  *          floating-point datatype. Valid normalization types are:
2048  *          \snippet this H5T_norm_t_snip
2049  *
2050  * \since 1.0.0
2051  *
2052  */
2053 H5_DLL H5T_norm_t H5Tget_norm(hid_t type_id);
2054 /**
2055  * \ingroup ATOM
2056  *
2057  * \brief Retrieves the internal padding type for unused bits in floating-point
2058  *        datatypes
2059  *
2060  * \type_id
2061  *
2062  * \return Returns a valid padding type if successful; otherwise returns
2063  *         #H5T_PAD_ERROR (-1).
2064  *
2065  * \details H5Tget_inpad() retrieves the internal padding type for unused
2066  *          bits in floating-point datatypes. Valid padding types are:
2067  *          \snippet this H5T_pad_t_snip
2068  *
2069  * \since 1.0.0
2070  *
2071  */
2072 H5_DLL H5T_pad_t H5Tget_inpad(hid_t type_id);
2073 /**
2074  * \ingroup ATOM
2075  *
2076  * \brief Retrieves the type of padding used for a string datatype
2077  *
2078  * \type_id
2079  *
2080  * \return Returns a valid string of the padding if successful; otherwise
2081  *         returns #H5T_STR_ERROR (-1)
2082  *
2083  * \details H5Tget_strpad() retrieves the type of padding used for a string
2084  *          datatype.
2085  *
2086  *          The string padding type is set with H5Tset_strpad().  Possible
2087  *          values returned are:
2088  * \str_pad_type
2089  *
2090  * \since 1.0.0
2091  *
2092  */
2093 H5_DLL H5T_str_t H5Tget_strpad(hid_t type_id);
2094 /**
2095  * \ingroup COMPENUM
2096  *
2097  * \brief Retrieves the number of elements in a compound or enumeration datatype
2098  *
2099  * \type_id
2100  *
2101  * \return Returns the number of elements if successful; otherwise returns a
2102  *         negative value.
2103  *
2104  * \details H5Tget_nmembers() retrieves the number of fields in a compound
2105  *          datatype or the number of members of an enumeration datatype.
2106  *
2107  * \since 1.0.0
2108  *
2109  */
2110 H5_DLL int H5Tget_nmembers(hid_t type_id);
2111 /**
2112  * \ingroup COMPENUM
2113  *
2114  * \brief Retrieves the name of a compound or enumeration datatype member
2115  *
2116  * \type_id
2117  * \param[in] membno Zero-based index of the field or element
2118  *
2119  * \return Returns a valid pointer to a string allocated with malloc() if
2120  *         successful; otherwise returns NULL.
2121  *
2122  * \details H5Tget_member_name() retrieves the name of a field of a compound
2123  *          datatype or an element of an enumeration datatype.
2124  *
2125  *          The index of the target field or element is specified in \p
2126  *          member_no. Compound datatype fields and enumeration datatype
2127  *          elements are stored in no particular order with index values of
2128  *          0 through N-1, where N is the value returned by H5Tget_nmembers().
2129  *
2130  *          The HDF5 library allocates a buffer to receive the name of
2131  *          the field. The caller must subsequently free the buffer with
2132  *          H5free_memory().
2133  *
2134  * \since 1.0.0
2135  *
2136  */
2137 H5_DLL char *H5Tget_member_name(hid_t type_id, unsigned membno);
2138 /**
2139  * \ingroup COMPENUM
2140  *
2141  * \brief Retrieves the index of a compound or enumeration datatype member
2142  *
2143  * \type_id
2144  * \param[in] name Name of the field or member
2145  *
2146  * \return \herr_t
2147  *
2148  * \details H5Tget_member_index() retrieves the index of a field of a compound
2149  *          datatype or an element of an enumeration datatype.
2150  *
2151  *          The name of the target field or element is specified by \p name.
2152  *
2153  *          Fields are stored in no particular order with index values of 0
2154  *          through N-1, where N is the value returned by H5Tget_nmembers() .
2155  *
2156  * \since 1.4.0
2157  *
2158  */
2159 H5_DLL int H5Tget_member_index(hid_t type_id, const char *name);
2160 /**
2161  * \ingroup COMPOUND
2162  *
2163  * \brief Retrieves the offset of a field of a compound datatype
2164  *
2165  * \type_id
2166  * \param[in] membno Zero-based index of the field or element
2167  *
2168  * \return Returns the byte offset of the field if successful; otherwise
2169  *         returns 0 (zero).
2170  *
2171  * \details H5Tget_member_offset() retrieves the byte offset of the beginning
2172  *          of a field within a compound datatype with respect to the beginning
2173  *          of the compound datatype datum.
2174  *
2175  *          Note that zero is a valid offset and that this function will fail
2176  *          only if a call to H5Tget_member_class() fails with the same arguments.
2177  *
2178  * \version 1.6.4 \p member_no parameter type changed to unsigned.
2179  *
2180  * \since 1.0.0
2181  *
2182  */
2183 H5_DLL size_t H5Tget_member_offset(hid_t type_id, unsigned membno);
2184 /**
2185  * \ingroup COMPOUND
2186  *
2187  * \brief Returns datatype class of compound datatype member
2188  *
2189  * \type_id
2190  * \param[in] membno Zero-based index of the field or element
2191  *
2192  * \return Returns the datatype class, a non-negative value, if successful;
2193  *         otherwise returns a negative value.
2194  *
2195  * \details Given a compound datatype, \p dtype_id, H5Tget_member_class()
2196  *          returns the datatype class of the member specified by \p member_no.
2197  *
2198  *          Valid class identifiers, as defined in H5Tpublic.h, are:
2199  *          \snippet this H5T_class_t_snip
2200  *
2201  * \since 1.4.0
2202  *
2203  */
2204 H5_DLL H5T_class_t H5Tget_member_class(hid_t type_id, unsigned membno);
2205 /**
2206  * \ingroup COMPOUND
2207  *
2208  * \brief Returns the datatype of the specified member
2209  *
2210  * \type_id
2211  * \param[in] membno Zero-based index of the field or element
2212  *
2213  * \return Returns the identifier of a copy of the datatype of the field if
2214  *         successful; otherwise returns a negative value.
2215  *
2216  * \details H5Tget_member_type() returns the datatype of the specified member.
2217  *          The caller should invoke H5Tclose() to release resources associated
2218  *          with the type.
2219  *
2220  * \version 1.6.4 \p membno parameter type changed to unsigned.
2221  *
2222  * \since 1.0.0
2223  *
2224  */
2225 H5_DLL hid_t H5Tget_member_type(hid_t type_id, unsigned membno);
2226 /**
2227  * \ingroup ENUM
2228  *
2229  * \brief Returns the value of an enumeration datatype member
2230  *
2231  * \type_id
2232  * \param[in] membno Number of the enumeration datatype member
2233  * \param[out] value Buffer for the value of the enumeration datatype member
2234  *
2235  * \return \herr_t
2236  *
2237  * \details H5Tget_member_value() returns the value of the enumeration datatype
2238  *          member \p member_no.
2239  *
2240  *          The member value is returned in a user-supplied buffer pointed to
2241  *          by \p value. Values returned in \p value will be of the enumerated
2242  *          type's base type, that is, the datatype used by H5Tenum_create()
2243  *          when the enumerated type was created.
2244  *
2245  *          The value buffer must be at least large enough to hold a value
2246  *          of that base type. If the size is unknown, you can determine it
2247  *          with H5Tget_size().
2248  *
2249  * \since 1.0.0
2250  *
2251  */
2252 H5_DLL herr_t H5Tget_member_value(hid_t type_id, unsigned membno, void *value /*out*/);
2253 /**
2254  * \ingroup ATOM
2255  *
2256  * \brief Retrieves the character set type of a string datatype
2257  *
2258  * \type_id
2259  *
2260  * \return Returns a valid character set type if successful; otherwise
2261  *         #H5T_CSET_ERROR (-1).
2262  *
2263  * \details H5Tget_cset() retrieves the character set type of a string datatype.
2264  *          Valid character set types are:
2265  *          \csets
2266  *
2267  * \since 1.0.0
2268  *
2269  */
2270 H5_DLL H5T_cset_t H5Tget_cset(hid_t type_id);
2271 /**
2272  * \ingroup ATOM
2273  *
2274  * \brief Determines whether datatype is a variable-length string
2275  *
2276  * \type_id
2277  *
2278  * \return Returns:
2279  *         \li a positive value if the specified datatype is a variable-length
2280  *             string
2281  *         \li 0 if the specified datatype is not a variable-length string
2282  *         \li a negative value when the function fails
2283  *
2284  * \details H5Tis_variable_str() determines whether the datatype identified
2285  *          by \p dtype_id is a variable-length string.
2286  *
2287  *          This function can be used to distinguish between fixed and
2288  *          variable-length string datatypes.
2289  *
2290  * \since 1.6.0
2291  *
2292  */
2293 H5_DLL htri_t H5Tis_variable_str(hid_t type_id);
2294 /**
2295  * \ingroup H5T
2296  *
2297  * \brief Returns the native datatype identifier of a specified datatype
2298  *
2299  * \type_id
2300  * \param[in] direction Direction of search
2301  *
2302  * \return \hid_t{native datatype}
2303  *
2304  * \details H5Tget_native_type() returns the equivalent native datatype
2305  *          identifier for the datatype specified by \p type_id.
2306  *
2307  *          H5Tget_native_type() is designed primarily to facilitate the use of
2308  *          the H5Dread() function, for which users otherwise must undertake a
2309  *          multi-step process to determine the native datatype of a dataset
2310  *          prior to reading it into memory. This function can be used for
2311  *          the following purposes:
2312  *
2313  *          \li To determine the native datatype of an atomic datatype
2314  *          \li To determine the base datatype of an array, enumerated, or
2315  *              variable-length datatype
2316  *          \li To determine the native atomic datatypes of the individual
2317  *              components of a compound datatype
2318  *
2319  *          For example, if \p type_id is a compound datatype, the returned
2320  *          datatype identifier will be for a similar compound datatype with
2321  *          each element converted to the corresponding native datatype;
2322  *          nested compound datatypes will be unwound. If \p type_id is an
2323  *          array, the returned datatype identifier will be for the native
2324  *          datatype of a single array element.
2325  *
2326  *          H5Tget_native_type() selects the first matching native datatype
2327  *          from the following list:
2328  *
2329  *          \li #H5T_NATIVE_CHAR
2330  *          \li #H5T_NATIVE_SHORT
2331  *          \li #H5T_NATIVE_INT
2332  *          \li #H5T_NATIVE_LONG
2333  *          \li #H5T_NATIVE_LLONG
2334  *
2335  *          \li #H5T_NATIVE_UCHAR
2336  *          \li #H5T_NATIVE_USHORT
2337  *          \li #H5T_NATIVE_UINT
2338  *          \li #H5T_NATIVE_ULONG
2339  *          \li #H5T_NATIVE_ULLONG
2340  *
2341  *          \li #H5T_NATIVE_FLOAT16 (if available)
2342  *          \li #H5T_NATIVE_FLOAT
2343  *          \li #H5T_NATIVE_DOUBLE
2344  *          \li #H5T_NATIVE_LDOUBLE
2345  *
2346  *          \li #H5T_NATIVE_B8
2347  *          \li #H5T_NATIVE_B16
2348  *          \li #H5T_NATIVE_B32
2349  *          \li #H5T_NATIVE_B64
2350  *
2351  *          The direction parameter indicates the order in which the library
2352  *          searches for a native datatype match. Valid values for direction
2353  *          are as follows:
2354  *          \snippet this H5T_direction_t_snip
2355  *
2356  *          H5Tget_native_type() is designed primarily for use with integer,
2357  *          floating point, and bitfield datatypes. String, time, opaque, and
2358  *          reference datatypes are returned as a copy of dtype_id. See above
2359  *          for compound, array, enumerated, and variable-length datatypes.
2360  *
2361  *          The identifier returned by H5Tget_native_type() should eventually
2362  *          be closed by calling H5Tclose() to release resources.
2363  *
2364  *          \note Please note that a datatype is actually an object
2365  *          identifier or handle returned from opening the datatype. It
2366  *          is not persistent, and its value can be different from one HDF5
2367  *          session to the next.
2368  *
2369  *          \note H5Tequal() can be used to compare datatypes.
2370  *
2371  *          \note HDF5 High Level APIs that may also be of interest are: H5LTdtype_to_text()
2372  *                creates a text description of a datatype. H5LTtext_to_dtype() creates an
2373  *                HDF5 datatype given a text description.
2374  *
2375  * \since 1.6.0
2376  *
2377  */
2378 H5_DLL hid_t H5Tget_native_type(hid_t type_id, H5T_direction_t direction);
2379 
2380 /* Setting property values */
2381 /**
2382  * \ingroup H5T
2383  *
2384  * \brief Sets size for a datatype.
2385  *
2386  * \type_id
2387  * \param[in] size New datatype size in bytes or #H5T_VARIABLE
2388  *
2389  * \return \herr_t
2390  *
2391  * \details H5Tset_size() sets the total size, \p size, in bytes, for a
2392  *          datatype.
2393  *
2394  *          \p size must have a positive value unless it is passed in as
2395  *          #H5T_VARIABLE and the datatype is a string datatype.
2396  *
2397  *          \li Numeric datatypes: If the datatype is atomic and the size
2398  *          is decreased so that significant bits of the datatype extend
2399  *          beyond the edge of the new size, then the offset property of the
2400  *          datatype is decreased toward zero.  If the offset becomes zero
2401  *          and the significant bits of the datatype still hang over the edge
2402  *          of the new size, then the number of significant bits is decreased.
2403  *
2404  *          \li String or character datatypes: The size set for a string
2405  *          datatype should include space for the null-terminator character,
2406  *          otherwise it will not be stored on (or retrieved from) the
2407  *          disk. Adjusting the size of a string automatically sets the
2408  *          precision to \p 8*size.
2409  *
2410  *          \li Variable-length string datatypes: If \p dtype_id is a
2411  *          variable-length string, size must normally be set to #H5T_VARIABLE.
2412  *          See \ref_vlen_strings.
2413  *
2414  *          \li Compound datatypes: This function may be used to increase or
2415  *          decrease the size of a compound datatype, but the function will
2416  *          fail if the new size is too small to accommodate all member fields.
2417  *
2418  *          \li Ineligible datatypes: This function cannot be used with
2419  *          enumerated datatypes (#H5T_ENUM), array datatypes (#H5T_ARRAY),
2420  *          variable-length array datatypes (#H5T_VLEN), or reference datatypes
2421  *          (#H5T_REFERENCE).
2422  *
2423  * \see H5Tget_size()
2424  *
2425  * \since 1.0.0
2426  *
2427  */
2428 H5_DLL herr_t H5Tset_size(hid_t type_id, size_t size);
2429 /**
2430  * \ingroup ATOM
2431  *
2432  * \brief Sets the byte order of a datatype
2433  *
2434  * \type_id
2435  * \param[in] order Byte order constant
2436  *
2437  * \return \herr_t
2438  *
2439  * \details H5Tset_order() sets the byte order of a datatype.\n
2440  *          Byte order can currently be set to any of the following:
2441  *          \snippet this H5T_order_t_snip
2442  *          #H5T_ORDER_MIXED (3) is a valid value for order only when
2443  *          returned by the function H5Tget_order(); it cannot be set with
2444  *          H5Tset_order().
2445  *
2446  *          #H5T_ORDER_NONE (4) is a valid value for order, but it has no
2447  *          effect. It is valid only for fixed-length strings and object and
2448  *          region references and specifies “no particular order.”
2449  *
2450  *          The byte order of a derived datatype is initially the same as
2451  *          that of the parent type, but can be changed with H5Tset_order().
2452  *
2453  *          This function cannot be used with a datatype after it has been
2454  *          committed.
2455  *
2456  * \note    Special considerations:
2457  *          \li ENUM datatypes: Byte order must be set before any member on
2458  *              an ENUM is defined.
2459  *          \li Compound datatypes: Byte order is set individually on each member
2460  *              of a compound datatype; members of a compound datatype need not
2461  *              have the same byte order.
2462  *          \li Opaque datatypes: Byte order can be set but has no effect.
2463  *
2464  * \since 1.0.0
2465  *
2466  */
2467 H5_DLL herr_t H5Tset_order(hid_t type_id, H5T_order_t order);
2468 /**
2469  * \ingroup ATOM
2470  *
2471  * \brief Sets the precision of an atomic datatype
2472  *
2473  * \type_id
2474  * \param[in] prec Number of bits of precision for datatype
2475  *
2476  * \return \herr_t
2477  *
2478  * \details H5Tset_precision() sets the precision of an atomic datatype. The
2479  *          precision is the number of significant bits which, unless
2480  *          padding is present, is 8 times larger than the value returned
2481  *          by H5Tget_size().
2482  *
2483  *          If the precision is increased then the offset is decreased and
2484  *          then the size is increased to insure that significant bits do not
2485  *          "hang over" the edge of the datatype.
2486  *
2487  *          Changing the precision of an #H5T_STRING automatically changes
2488  *          the size as well. The precision must be a multiple of 8.
2489  *
2490  *          When decreasing the precision of a floating point type, set the
2491  *          locations and sizes of the sign, mantissa, and exponent fields
2492  *          first.
2493  *
2494  * \since 1.0.0
2495  *
2496  */
2497 H5_DLL herr_t H5Tset_precision(hid_t type_id, size_t prec);
2498 /**
2499  * \ingroup ATOM
2500  *
2501  * \brief Sets the bit offset of the first significant bit
2502  *
2503  * \type_id
2504  * \param[in] offset Offset of first significant bit
2505  *
2506  * \return \herr_t
2507  *
2508  * \details H5Tset_offset() sets the bit offset of the first significant
2509  *          bit. The significant bits of an atomic datum can be offset from
2510  *          the beginning of the memory for that datum by an amount of
2511  *          padding. The offset property specifies the number of bits of
2512  *          padding that appear “to the right of” the value. That is,
2513  *          if we have a 32-bit datum with 16-bits of precision having the
2514  *          value 0x1122, then it will be laid out in memory as (from small
2515  *          byte address toward larger byte addresses):
2516  *          \code{.unparsed}
2517  *          0:  [ pad]  [0x11]  [0x22]  [ pad]
2518  *          1:  [ pad]  [0x22]  [0x11]  [ pad]
2519  *          2:  [0x11]  [ pad]  [ pad]  [0x22]
2520  *          3:  [0x22]  [ pad]  [ pad]  [0x11]
2521  *          \endcode
2522  *          If the offset is incremented then the total size is incremented
2523  *          also if necessary to prevent significant bits of the value from
2524  *          hanging over the edge of the datatype.
2525  *
2526  *          The offset of an #H5T_STRING cannot be set to anything but zero.
2527  *
2528  * \since 1.0.0
2529  *
2530  */
2531 H5_DLL herr_t H5Tset_offset(hid_t type_id, size_t offset);
2532 /**
2533  * \ingroup ATOM
2534  *
2535  * \brief Sets the least and most-significant bits padding types
2536  *
2537  * \type_id
2538  * \param[in] lsb Padding type for least-significant bits
2539  * \param[in] msb Padding type for most-significant bits
2540  *
2541  * \return \herr_t
2542  *
2543  * \details H5Tset_pad() sets the least and most-significant bits padding types.
2544  *          Available values are:
2545  * \padding_type
2546  *
2547  * \since 1.2.0
2548  *
2549  */
2550 H5_DLL herr_t H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb);
2551 /**
2552  * \ingroup ATOM
2553  *
2554  * \brief Sets the sign property for an integer type
2555  *
2556  * \type_id
2557  * \param[in] sign Sign type
2558  *
2559  * \return \herr_t
2560  *
2561  * \details H5Tset_sign() sets the sign property for an integer type:
2562  * \sign_prop
2563  *
2564  * \since 1.0.0
2565  *
2566  */
2567 H5_DLL herr_t H5Tset_sign(hid_t type_id, H5T_sign_t sign);
2568 /**
2569  * \ingroup ATOM
2570  *
2571  * \brief Sets locations and sizes of floating point bit fields
2572  *
2573  * \type_id
2574  * \param[in] spos Sign position, i.e., the bit offset of the floating-point
2575  *                 sign bit
2576  * \param[in] epos Exponent bit position
2577  * \param[in] esize Size of exponent in bits
2578  * \param[in] mpos Mantissa bit position
2579  * \param[in] msize Size of mantissa in bits
2580  *
2581  * \return \herr_t
2582  *
2583  * \details H5Tset_fields() sets the locations and sizes of the various
2584  *          floating-point bit fields. The field positions are bit positions
2585  *          in the significant region of the datatype. Bits are numbered with
2586  *          the least significant bit number zero.
2587  *
2588  *          Fields are not allowed to extend beyond the number of bits of
2589  *          precision, nor are they allowed to overlap with one another.
2590  *
2591  * \note The size and precision of, as well as any offset for, a floating-point
2592  *       datatype should generally be set appropriately before calling
2593  *       H5Tset_fields(). Otherwise, H5Tset_fields() may fail when checking that
2594  *       the values make sense for the datatype. However, if the precision of a
2595  *       floating-point datatype will be decreased during its creation with a call
2596  *       to H5Tset_precision(), then H5Tset_fields() should instead be called
2597  *       first to set appropriate values for \p spos, \p epos, \p esize, \p mpos
2598  *       and \p msize before reducing the precision of the datatype with
2599  *       H5Tset_precision(). This is of particular concern if another floating-point
2600  *       datatype was copied as a starting point.
2601  *
2602  * \since 1.0.0
2603  *
2604  */
2605 H5_DLL herr_t H5Tset_fields(hid_t type_id, size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize);
2606 /**
2607  * \ingroup ATOM
2608  *
2609  * \brief Sets the exponent bias of a floating-point type
2610  *
2611  * \type_id
2612  * \param[in] ebias Exponent bias value
2613  *
2614  * \return \herr_t
2615  *
2616  * \details H5Tset_ebias() sets the exponent bias of a floating-point type.
2617  *
2618  * \since 1.0.0
2619  *
2620  */
2621 H5_DLL herr_t H5Tset_ebias(hid_t type_id, size_t ebias);
2622 /**
2623  * \ingroup ATOM
2624  *
2625  * \brief Sets the mantissa normalization of a floating-point datatype
2626  *
2627  * \type_id
2628  * \param[in] norm Mantissa normalization type
2629  *
2630  * \return \herr_t
2631  *
2632  * \details H5Tset_norm() sets the mantissa normalization of a floating-point
2633  *          datatype. Valid normalization types are:
2634  *          \snippet this H5T_norm_t_snip
2635  *
2636  * \since 1.0.0
2637  *
2638  */
2639 H5_DLL herr_t H5Tset_norm(hid_t type_id, H5T_norm_t norm);
2640 /**
2641  * \ingroup ATOM
2642  *
2643  * \brief Fills unused internal floating-point bits
2644  *
2645  * \type_id
2646  * \param[in] pad Padding type
2647  *
2648  * \return \herr_t
2649  *
2650  * \details H5Tset_inpad() If any internal bits of a floating point-type are
2651  *          unused (that is, those significant bits which are not part of the
2652  *          sign, exponent, or mantissa), then H5Tset_inpad()  will be filled
2653  *          according to the value of the padding value property inpad. Valid
2654  *          padding types are:
2655  *          \snippet this H5T_pad_t_snip
2656  *
2657  * \since 1.0.0
2658  *
2659  */
2660 H5_DLL herr_t H5Tset_inpad(hid_t type_id, H5T_pad_t pad);
2661 /**
2662  * \ingroup ATOM
2663  *
2664  * \brief Sets character set to be used in a string or character datatype
2665  *
2666  * \type_id
2667  * \param[in] cset Character set type
2668  *
2669  * \return \herr_t
2670  *
2671  * \details H5Tset_cset() sets the character set to be used in a dataset with
2672  *          a string or character datatype.
2673  *
2674  *          Valid values for cset include the following:
2675  *          \csets
2676  *          For example, if the character set for the datatype \p type_id is set
2677  *          to #H5T_CSET_UTF8, string or character data of datatype dtype_id
2678  *          will be encoded using the UTF-8 Unicode character set.
2679  *
2680  *          ASCII and UTF-8 Unicode are the only currently supported character
2681  *          encodings. Extended ASCII encodings (for example, ISO 8859) are
2682  *          not supported. This encoding policy is not enforced by the HDF5
2683  *          library. Using encodings other than ASCII and UTF-8 can lead to
2684  *          compatibility and usability problems.
2685  *
2686  *          Note that H5Tset_cset()  sets the character set for a character or
2687  *          string datatype while H5Pset_char_encoding()  sets the character
2688  *          set used for an HDF5 link or attribute name.
2689  *
2690  * \since 1.0.0
2691  *
2692  */
2693 H5_DLL herr_t H5Tset_cset(hid_t type_id, H5T_cset_t cset);
2694 /**
2695  * \ingroup ATOM
2696  *
2697  * \brief Defines the type of padding used for character strings
2698  *
2699  * \type_id
2700  * \param[in] strpad String padding type
2701  *
2702  * \return \herr_t
2703  *
2704  * \details H5Tset_strpad() defines the type of padding used for a string
2705  *          datatype.
2706  *
2707  *          The method used to store character strings differs with the
2708  *          programming language.  C usually null terminates strings while
2709  *          Fortran left-justifies and space-pads strings.
2710  *
2711  *          Valid values of \p strpad are as follows:
2712  *          \str_pad_type
2713  *          When converting from a longer string to a shorter string, the
2714  *          behavior is as follows. If the shorter string is #H5T_STR_NULLPAD
2715  *          or #H5T_STR_SPACEPAD, then the string is simply truncated. If
2716  *          the short string is #H5T_STR_NULLTERM, it is truncated and a null
2717  *          terminator is appended.
2718  *
2719  *          When converting from a shorter string to a longer string, the
2720  *          longer string is padded on the end by appending nulls or spaces.
2721  *
2722  * \since 1.0.0
2723  *
2724  */
2725 H5_DLL herr_t H5Tset_strpad(hid_t type_id, H5T_str_t strpad);
2726 
2727 /**
2728  * --------------------------------------------------------------------------
2729  * \ingroup CONV
2730  *
2731  * \brief Converts data from one specified datatype to another
2732  *
2733  * \type_id{src_id} of source datatype
2734  * \type_id{dst_id} of destination datatype
2735  * \param[in] nelmts Size of array \p buf
2736  * \param[in,out] buf Array containing pre- and post-conversion values
2737  * \param[in] background Optional background buffer
2738  * \dxpl_id{plist_id}
2739  *
2740  * \return \herr_t
2741  *
2742  * \details H5Tconvert() converts \p nelmts elements from a source datatype,
2743  *          specified by \p src_id, to a destination datatype, \p dst_id. The
2744  *          source elements are packed in \p buf and on return the destination
2745  *          elements will be packed in \p buf. That is, the conversion is
2746  *          performed in place.
2747  *
2748  *          The optional background buffer is for use with compound datatypes.
2749  *          It is an array of \p nelmts values for the destination datatype
2750  *          which can then be merged with the converted values to recreate the
2751  *          compound datatype. For instance, background might be an array of
2752  *          structs with the \c a and \c b fields already initialized and the
2753  *          conversion of buf supplies the \c c and \c d field values.
2754  *
2755  *          The parameter \p plist_id contains the dataset transfer property list
2756  *          identifier which is passed to the conversion functions. As of
2757  *          Release 1.2, this parameter is only used to pass along the
2758  *          variable-length datatype custom allocation information.
2759  *
2760  * \note H5Tconvert() will not resize the buffer \p buf; it must be large
2761  *       enough to hold the larger of the input and output data.
2762  *
2763  * \version 1.6.3 \p nelmts parameter type changed to size_t.
2764  * \version 1.4.0 \p nelmts parameter type changed to hsize_t.
2765  *
2766  * \since 1.0.0
2767  *
2768  */
2769 H5_DLL herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, void *buf, void *background,
2770                          hid_t plist_id);
2771 /**
2772  * \ingroup VLEN
2773  *
2774  * \brief Reclaims the variable length (VL) datatype memory buffers
2775  *
2776  * \type_id
2777  * \space_id
2778  * \dxpl_id{plist_id} used to create the buffer
2779  * \param[in] buf Pointer to the buffer to be reclaimed
2780  *
2781  * \return \herr_t
2782  *
2783  * \details H5Treclaim() reclaims memory buffers created to store VL datatypes.
2784  *          It only frees the variable length data in the selection defined in
2785  *          the dataspace specified by \p space_id. The dataset transfer
2786  *          property list \p plist_id is required to find the correct
2787  *          allocation and/or free methods for the variable-length data in the
2788  *          buffer.
2789  *
2790  * \since 1.12.0
2791  *
2792  */
2793 H5_DLL herr_t H5Treclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf);
2794 
2795 /* Symbols defined for compatibility with previous versions of the HDF5 API.
2796  *
2797  * Use of these symbols is deprecated.
2798  */
2799 
2800 /* API Wrappers for async routines */
2801 /* (Must be defined _after_ the function prototype) */
2802 /* (And must only defined when included in application code, not the library) */
2803 #ifndef H5T_MODULE
2804 #define H5Tcommit_async(...) H5Tcommit_async(__FILE__, __func__, __LINE__, __VA_ARGS__)
2805 #define H5Topen_async(...)   H5Topen_async(__FILE__, __func__, __LINE__, __VA_ARGS__)
2806 #define H5Tclose_async(...)  H5Tclose_async(__FILE__, __func__, __LINE__, __VA_ARGS__)
2807 
2808 /* Define "wrapper" versions of function calls, to allow compile-time values to
2809  * be passed in by language wrapper or library layer on top of HDF5. */
2810 #define H5Tcommit_async_wrap H5_NO_EXPAND(H5Tcommit_async)
2811 #define H5Topen_async_wrap   H5_NO_EXPAND(H5Topen_async)
2812 #define H5Tclose_async_wrap  H5_NO_EXPAND(H5Tclose_async)
2813 #endif /* H5T_MODULE */
2814 
2815 #ifndef H5_NO_DEPRECATED_SYMBOLS
2816 
2817 /* Macros */
2818 
2819 /* Typedefs */
2820 
2821 /* Function prototypes */
2822 /**
2823  * \ingroup H5T
2824  *
2825  * \brief Commits a transient datatype to a file, creating a newly named datatype
2826  *
2827  * \fg_loc_id
2828  * \param[in] name Name given to committed datatype
2829  * \param[in] type_id Identifier of datatype to be committed
2830  *
2831  * \return \herr_t
2832  *
2833  * \deprecated This function has been renamed from H5Tcommit() and is
2834  *             deprecated in favor of the macro #H5Tcommit or the function
2835  *             H5Tcommit2().
2836  *
2837  * \details H5Tcommit1() commits the transient datatype (not immutable) to
2838  *          a file, turning it into a named datatype.
2839  *
2840  *          The datatype \p dtype_id is committed as a named datatype at the
2841  *          location \p loc_id, which is either a file or group identifier,
2842  *          with the name \p name.
2843  *
2844  *          \p name can be a relative path based at \p loc_id or an absolute
2845  *          path from the root of the file. Use of this function requires
2846  *          that any intermediate groups specified in the path already exist.
2847  *
2848  *          As is the case for any object in a group, the length of the name
2849  *          of a named datatype is not limited.
2850  *
2851  *          See H5Tcommit_anon() for a discussion of the differences between
2852  *          H5Tcommit() and H5Tcommit_anon().
2853  *
2854  *          This function will not accept a datatype that cannot actually
2855  *          hold data. This currently includes compound datatypes with no
2856  *          fields and enumerated datatypes with no members.
2857  *
2858  * \version 1.8.7 Function modified in this release to reject datatypes that
2859  *          will not accommodate actual data, such as a compound datatype with
2860  *          no fields or an enumerated datatype with no members.
2861  * \version 1.8.0 C function H5Tcommit() renamed to H5Tcommit1() and deprecated
2862  *          in this release.
2863  * \since 1.2.0
2864  *
2865  */
2866 H5_DLL herr_t H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id);
2867 /**
2868  * \ingroup H5T
2869  *
2870  * \brief Opens a named datatype
2871  *
2872  * \fg_loc_id
2873  * \param[in] name A datatype name, defined within the specified file or group
2874  *
2875  * \return \herr_t
2876  *
2877  * \deprecated This function has been renamed from H5Topen() and is
2878  *             deprecated in favor of the macro #H5Topen or the function
2879  *             H5Topen2().
2880  *
2881  * \details H5Topen1() opens a named datatype at the location specified by
2882  *          \p loc_id and returns an identifier for the datatype. \p loc_id
2883  *          can be either a file or group identifier. The identifier should
2884  *          eventually be closed by calling H5Tclose()  to release resources.
2885  *
2886  * \version 1.8.0 Function H5Topen() renamed to H5Topen1() and deprecated in
2887  *          this release.
2888  *
2889  * \since 1.0.0
2890  *
2891  */
2892 H5_DLL hid_t H5Topen1(hid_t loc_id, const char *name);
2893 /**
2894  * \ingroup ARRAY
2895  *
2896  * \brief Creates an array datatype object
2897  *
2898  * \param[in] base_id Datatype identifier for the array base datatype
2899  * \param[in] ndims Rank of the array
2900  * \param[in] dim Size of each array dimension
2901  * \param[in] perm Dimension permutation   (Currently not implemented.)
2902  *
2903  * \return \hid_t{array datatype}
2904  *
2905  * \deprecated This function has been renamed from H5Tarray_create() and is
2906  *             deprecated in favor of the macro #H5Tarray_create or the function
2907  *             H5Tarray_create2().
2908  *
2909  * \details H5Tarray_create1() creates a new array datatype object.\n\n
2910  *          \p base_id is the datatype of every element of the array, i.e.,
2911  *          of the number at each position in the array.
2912  *
2913  *          \p rank is the number of dimensions and the size of each dimension
2914  *          is specified in the array dims. The value of rank is currently
2915  *          limited to #H5S_MAX_RANK and must be greater than 0 (zero). All
2916  *          dimension sizes specified in dims must be greater than 0 (zero).
2917  *
2918  *          The array \p perm is designed to contain the dimension permutation,
2919  *          i.e. C versus FORTRAN array order.   (The parameter perm is
2920  *          currently unused and is not yet implemented.)
2921  *
2922  * \version 1.8.0 Function H5Tarray_create() renamed to H5Tarray_create1()
2923  *          and deprecated in this release.
2924  *
2925  * \since 1.4.0
2926  *
2927  */
2928 H5_DLL hid_t H5Tarray_create1(hid_t base_id, int ndims, const hsize_t dim[/* ndims */],
2929                               const int perm[/* ndims */]);
2930 /**
2931  * \ingroup ARRAY
2932  *
2933  * \brief Retrieves sizes of array dimensions
2934  *
2935  * \type_id
2936  * \param[out] dims Sizes of array dimensions
2937  * \param[out] perm Dimension permutations (This parameter is not used.)
2938  *
2939  * \return Returns the non-negative number of dimensions of the array type
2940  *         if successful; otherwise, returns a negative value.
2941  *
2942  * \deprecated This function has been renamed from H5Tget_array_dims() and is
2943  *             deprecated in favor of the macro #H5Tget_array_dims or the
2944  *             function H5Tget_array_dims2().
2945  *
2946  * \details H5Tget_array_dims1() returns the sizes of the dimensions and
2947  *          the dimension permutations of the specified array datatype object.
2948  *
2949  *          The sizes of the dimensions are returned in the array \p dims.
2950  *
2951  * \version 1.8.0 Function H5Tarray_create() renamed to H5Tarray_create1()
2952  *          and deprecated in this release.
2953  *
2954  * \since 1.4.0
2955  *
2956  */
2957 H5_DLL int H5Tget_array_dims1(hid_t type_id, hsize_t dims[], int perm[]);
2958 
2959 #endif /* H5_NO_DEPRECATED_SYMBOLS */
2960 
2961 #ifdef __cplusplus
2962 }
2963 #endif
2964 #endif /* H5Tpublic_H */