File indexing completed on 2025-09-16 09:13:28
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #ifndef H5FDdevelop_H
0019 #define H5FDdevelop_H
0020
0021
0022 #include "H5FDpublic.h"
0023
0024
0025
0026
0027
0028
0029
0030
0031 #define H5FD_CLASS_VERSION 0x01
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053 #define H5FD_MEM_FHEAP_HDR H5FD_MEM_OHDR
0054
0055
0056
0057
0058 #define H5FD_MEM_FHEAP_IBLOCK H5FD_MEM_OHDR
0059
0060
0061
0062
0063 #define H5FD_MEM_FHEAP_DBLOCK H5FD_MEM_LHEAP
0064
0065
0066
0067
0068
0069 #define H5FD_MEM_FHEAP_HUGE_OBJ H5FD_MEM_DRAW
0070
0071
0072
0073
0074
0075 #define H5FD_MEM_FSPACE_HDR H5FD_MEM_OHDR
0076
0077
0078
0079
0080 #define H5FD_MEM_FSPACE_SINFO H5FD_MEM_LHEAP
0081
0082
0083
0084
0085
0086 #define H5FD_MEM_SOHM_TABLE H5FD_MEM_OHDR
0087
0088
0089
0090
0091 #define H5FD_MEM_SOHM_INDEX H5FD_MEM_BTREE
0092
0093
0094
0095
0096
0097 #define H5FD_MEM_EARRAY_HDR H5FD_MEM_OHDR
0098
0099
0100
0101
0102
0103 #define H5FD_MEM_EARRAY_IBLOCK H5FD_MEM_OHDR
0104
0105
0106
0107
0108
0109 #define H5FD_MEM_EARRAY_SBLOCK H5FD_MEM_BTREE
0110
0111
0112
0113
0114
0115 #define H5FD_MEM_EARRAY_DBLOCK H5FD_MEM_LHEAP
0116
0117
0118
0119
0120
0121 #define H5FD_MEM_EARRAY_DBLK_PAGE H5FD_MEM_LHEAP
0122
0123
0124
0125
0126
0127 #define H5FD_MEM_FARRAY_HDR H5FD_MEM_OHDR
0128
0129
0130
0131
0132
0133 #define H5FD_MEM_FARRAY_DBLOCK H5FD_MEM_LHEAP
0134
0135
0136
0137
0138
0139 #define H5FD_MEM_FARRAY_DBLK_PAGE H5FD_MEM_LHEAP
0140
0141
0142
0143
0144
0145
0146
0147
0148 #define H5FD_FLMAP_SINGLE \
0149 { \
0150 H5FD_MEM_SUPER, \
0151 H5FD_MEM_SUPER, \
0152 H5FD_MEM_SUPER, \
0153 H5FD_MEM_SUPER, \
0154 H5FD_MEM_SUPER, \
0155 H5FD_MEM_SUPER, \
0156 H5FD_MEM_SUPER \
0157 }
0158
0159
0160
0161
0162
0163 #define H5FD_FLMAP_DICHOTOMY \
0164 { \
0165 H5FD_MEM_SUPER, \
0166 H5FD_MEM_SUPER, \
0167 H5FD_MEM_SUPER, \
0168 H5FD_MEM_DRAW, \
0169 H5FD_MEM_DRAW, \
0170 H5FD_MEM_SUPER, \
0171 H5FD_MEM_SUPER \
0172 }
0173
0174
0175
0176
0177
0178 #define H5FD_FLMAP_DEFAULT \
0179 { \
0180 H5FD_MEM_DEFAULT, \
0181 H5FD_MEM_DEFAULT, \
0182 H5FD_MEM_DEFAULT, \
0183 H5FD_MEM_DEFAULT, \
0184 H5FD_MEM_DEFAULT, \
0185 H5FD_MEM_DEFAULT, \
0186 H5FD_MEM_DEFAULT \
0187 }
0188
0189
0190
0191
0192
0193
0194 typedef struct H5FD_t H5FD_t;
0195
0196
0197
0198
0199 typedef struct H5FD_class_t {
0200 unsigned version;
0201
0202
0203 H5FD_class_value_t value;
0204
0205
0206 const char *name;
0207
0208
0209 haddr_t maxaddr;
0210
0211
0212 H5F_close_degree_t fc_degree;
0213
0214
0215 herr_t (*terminate)(void);
0216
0217
0218 hsize_t (*sb_size)(H5FD_t *file);
0219
0220
0221 herr_t (*sb_encode)(H5FD_t *file, char *name , unsigned char *p );
0222
0223
0224 herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p);
0225
0226
0227 size_t fapl_size;
0228 void *(*fapl_get)(H5FD_t *file);
0229
0230
0231 void *(*fapl_copy)(const void *fapl);
0232
0233
0234 herr_t (*fapl_free)(void *fapl);
0235
0236
0237 size_t dxpl_size;
0238
0239
0240 void *(*dxpl_copy)(const void *dxpl);
0241
0242
0243 herr_t (*dxpl_free)(void *dxpl);
0244
0245
0246 H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr);
0247
0248
0249 herr_t (*close)(H5FD_t *file);
0250
0251
0252 int (*cmp)(const H5FD_t *f1, const H5FD_t *f2);
0253
0254
0255 herr_t (*query)(const H5FD_t *f1, unsigned long *flags);
0256
0257
0258 herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map);
0259
0260
0261 haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
0262
0263
0264 herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
0265
0266
0267 haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type);
0268
0269
0270 herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr);
0271
0272
0273 haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type);
0274
0275
0276 herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void **file_handle);
0277
0278
0279 herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer);
0280
0281
0282
0283 herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer);
0284
0285
0286
0287 herr_t (*read_vector)(H5FD_t *file, hid_t dxpl, uint32_t count, H5FD_mem_t types[], haddr_t addrs[],
0288 size_t sizes[], void *bufs[]);
0289
0290
0291 herr_t (*write_vector)(H5FD_t *file, hid_t dxpl, uint32_t count, H5FD_mem_t types[], haddr_t addrs[],
0292 size_t sizes[], const void *bufs[]);
0293
0294
0295 herr_t (*read_selection)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, size_t count, hid_t mem_spaces[],
0296 hid_t file_spaces[], haddr_t offsets[], size_t element_sizes[],
0297 void *bufs[] );
0298
0299
0300 herr_t (*write_selection)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, size_t count, hid_t mem_spaces[],
0301 hid_t file_spaces[], haddr_t offsets[], size_t element_sizes[],
0302 const void *bufs[] );
0303
0304
0305 herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
0306
0307
0308 herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
0309
0310
0311 herr_t (*lock)(H5FD_t *file, hbool_t rw);
0312
0313
0314 herr_t (*unlock)(H5FD_t *file);
0315
0316
0317 herr_t (*del)(const char *name, hid_t fapl);
0318
0319
0320 herr_t (*ctl)(H5FD_t *file, uint64_t op_code, uint64_t flags, const void *input, void **output);
0321
0322
0323 H5FD_mem_t fl_map[H5FD_MEM_NTYPES];
0324
0325 } H5FD_class_t;
0326
0327
0328
0329
0330 typedef struct H5FD_free_t {
0331 haddr_t addr;
0332 hsize_t size;
0333 struct H5FD_free_t *next;
0334 } H5FD_free_t;
0335
0336
0337
0338
0339
0340 struct H5FD_t {
0341 hid_t driver_id;
0342 const H5FD_class_t *cls;
0343 unsigned long fileno;
0344 unsigned access_flags;
0345 unsigned long feature_flags;
0346 haddr_t maxaddr;
0347 haddr_t base_addr;
0348
0349
0350 hsize_t threshold;
0351 hsize_t alignment;
0352 hbool_t paged_aggr;
0353 };
0354
0355
0356 typedef hid_t (*H5FD_init_t)(void);
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366 #ifdef __cplusplus
0367 extern "C" {
0368 #endif
0369
0370 H5_DLL hid_t H5FDperform_init(H5FD_init_t op);
0371 H5_DLL hid_t H5FDregister(const H5FD_class_t *cls);
0372 H5_DLL htri_t H5FDis_driver_registered_by_name(const char *driver_name);
0373 H5_DLL htri_t H5FDis_driver_registered_by_value(H5FD_class_value_t driver_value);
0374 H5_DLL herr_t H5FDunregister(hid_t driver_id);
0375 H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr);
0376 H5_DLL herr_t H5FDclose(H5FD_t *file);
0377 H5_DLL int H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
0378 H5_DLL herr_t H5FDquery(const H5FD_t *f, unsigned long *flags);
0379 H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
0380 H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
0381 H5_DLL haddr_t H5FDget_eoa(H5FD_t *file, H5FD_mem_t type);
0382 H5_DLL herr_t H5FDset_eoa(H5FD_t *file, H5FD_mem_t type, haddr_t eoa);
0383 H5_DLL haddr_t H5FDget_eof(H5FD_t *file, H5FD_mem_t type);
0384 H5_DLL herr_t H5FDget_vfd_handle(H5FD_t *file, hid_t fapl, void **file_handle);
0385 H5_DLL herr_t H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
0386 void *buf );
0387 H5_DLL herr_t H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
0388 const void *buf);
0389 H5_DLL herr_t H5FDread_vector(H5FD_t *file, hid_t dxpl_id, uint32_t count, H5FD_mem_t types[],
0390 haddr_t addrs[], size_t sizes[], void *bufs[] );
0391 H5_DLL herr_t H5FDwrite_vector(H5FD_t *file, hid_t dxpl_id, uint32_t count, H5FD_mem_t types[],
0392 haddr_t addrs[], size_t sizes[], const void *bufs[] );
0393 H5_DLL herr_t H5FDread_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
0394 hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
0395 size_t element_sizes[], void *bufs[] );
0396 H5_DLL herr_t H5FDwrite_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
0397 hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
0398 size_t element_sizes[], const void *bufs[]);
0399 H5_DLL herr_t H5FDread_vector_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
0400 hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
0401 size_t element_sizes[], void *bufs[] );
0402 H5_DLL herr_t H5FDwrite_vector_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
0403 hid_t mem_spaces[], hid_t file_spaces[], haddr_t offsets[],
0404 size_t element_sizes[], const void *bufs[] );
0405 H5_DLL herr_t H5FDread_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
0406 hid_t mem_space_ids[], hid_t file_space_ids[], haddr_t offsets[],
0407 size_t element_sizes[], void *bufs[] );
0408 H5_DLL herr_t H5FDwrite_from_selection(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, uint32_t count,
0409 hid_t mem_space_ids[], hid_t file_space_ids[], haddr_t offsets[],
0410 size_t element_sizes[], const void *bufs[] );
0411 H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
0412 H5_DLL herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
0413 H5_DLL herr_t H5FDlock(H5FD_t *file, hbool_t rw);
0414 H5_DLL herr_t H5FDunlock(H5FD_t *file);
0415 H5_DLL herr_t H5FDdelete(const char *name, hid_t fapl_id);
0416 H5_DLL herr_t H5FDctl(H5FD_t *file, uint64_t op_code, uint64_t flags, const void *input, void **output);
0417
0418 #ifdef __cplusplus
0419 }
0420 #endif
0421
0422 #endif