![]() |
|
|||
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 */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |