Warning, file /include/H5VLconnector.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef H5VLconnector_H
0018 #define H5VLconnector_H
0019
0020
0021 #include "H5public.h" /* Generic Functions */
0022 #include "H5Apublic.h" /* Attributes */
0023 #include "H5Dpublic.h" /* Datasets */
0024 #include "H5ESpublic.h" /* Event Stack */
0025 #include "H5Fpublic.h" /* Files */
0026 #include "H5Ipublic.h" /* IDs */
0027 #include "H5Lpublic.h" /* Links */
0028 #include "H5Opublic.h" /* Objects */
0029 #include "H5Rpublic.h" /* References */
0030 #include "H5VLpublic.h" /* Virtual Object Layer */
0031
0032
0033
0034
0035
0036
0037 #define H5VL_CONTAINER_INFO_VERSION 0x01
0038
0039
0040 #define H5VL_MAX_BLOB_ID_SIZE (16)
0041
0042
0043 #define H5VL_RESERVED_NATIVE_OPTIONAL 1024
0044
0045
0046
0047
0048
0049
0050 typedef enum H5VL_loc_type_t {
0051 H5VL_OBJECT_BY_SELF,
0052 H5VL_OBJECT_BY_NAME,
0053 H5VL_OBJECT_BY_IDX,
0054 H5VL_OBJECT_BY_TOKEN
0055 } H5VL_loc_type_t;
0056
0057 typedef struct H5VL_loc_by_name {
0058 const char *name;
0059 hid_t lapl_id;
0060 } H5VL_loc_by_name_t;
0061
0062 typedef struct H5VL_loc_by_idx {
0063 const char *name;
0064 H5_index_t idx_type;
0065 H5_iter_order_t order;
0066 hsize_t n;
0067 hid_t lapl_id;
0068 } H5VL_loc_by_idx_t;
0069
0070 typedef struct H5VL_loc_by_token {
0071 H5O_token_t *token;
0072 } H5VL_loc_by_token_t;
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083 typedef struct H5VL_loc_params_t {
0084 H5I_type_t obj_type;
0085 H5VL_loc_type_t type;
0086 union {
0087 H5VL_loc_by_token_t loc_by_token;
0088 H5VL_loc_by_name_t loc_by_name;
0089 H5VL_loc_by_idx_t loc_by_idx;
0090 } loc_data;
0091 } H5VL_loc_params_t;
0092
0093
0094 typedef struct H5VL_optional_args_t {
0095 int op_type;
0096 void *args;
0097 } H5VL_optional_args_t;
0098
0099
0100 typedef enum H5VL_attr_get_t {
0101 H5VL_ATTR_GET_ACPL,
0102 H5VL_ATTR_GET_INFO,
0103 H5VL_ATTR_GET_NAME,
0104 H5VL_ATTR_GET_SPACE,
0105 H5VL_ATTR_GET_STORAGE_SIZE,
0106 H5VL_ATTR_GET_TYPE
0107 } H5VL_attr_get_t;
0108
0109
0110 typedef struct H5VL_attr_get_name_args_t {
0111 H5VL_loc_params_t loc_params;
0112 size_t buf_size;
0113 char *buf;
0114 size_t *attr_name_len;
0115 } H5VL_attr_get_name_args_t;
0116
0117
0118 typedef struct H5VL_attr_get_info_args_t {
0119 H5VL_loc_params_t loc_params;
0120 const char *attr_name;
0121 H5A_info_t *ainfo;
0122 } H5VL_attr_get_info_args_t;
0123
0124
0125 typedef struct H5VL_attr_get_args_t {
0126 H5VL_attr_get_t op_type;
0127
0128
0129 union {
0130
0131 struct {
0132 hid_t acpl_id;
0133 } get_acpl;
0134
0135
0136 H5VL_attr_get_info_args_t get_info;
0137
0138
0139 H5VL_attr_get_name_args_t get_name;
0140
0141
0142 struct {
0143 hid_t space_id;
0144 } get_space;
0145
0146
0147 struct {
0148 hsize_t *data_size;
0149 } get_storage_size;
0150
0151
0152 struct {
0153 hid_t type_id;
0154 } get_type;
0155 } args;
0156 } H5VL_attr_get_args_t;
0157
0158
0159 typedef enum H5VL_attr_specific_t {
0160 H5VL_ATTR_DELETE,
0161 H5VL_ATTR_DELETE_BY_IDX,
0162 H5VL_ATTR_EXISTS,
0163 H5VL_ATTR_ITER,
0164 H5VL_ATTR_RENAME
0165 } H5VL_attr_specific_t;
0166
0167
0168 typedef struct H5VL_attr_iterate_args_t {
0169 H5_index_t idx_type;
0170 H5_iter_order_t order;
0171 hsize_t *idx;
0172 H5A_operator2_t op;
0173 void *op_data;
0174 } H5VL_attr_iterate_args_t;
0175
0176
0177 typedef struct H5VL_attr_delete_by_idx_args_t {
0178 H5_index_t idx_type;
0179 H5_iter_order_t order;
0180 hsize_t n;
0181 } H5VL_attr_delete_by_idx_args_t;
0182
0183
0184 typedef struct H5VL_attr_specific_args_t {
0185 H5VL_attr_specific_t op_type;
0186
0187
0188 union {
0189
0190 struct {
0191 const char *name;
0192 } del;
0193
0194
0195 H5VL_attr_delete_by_idx_args_t delete_by_idx;
0196
0197
0198 struct {
0199 const char *name;
0200 hbool_t *exists;
0201 } exists;
0202
0203
0204 H5VL_attr_iterate_args_t iterate;
0205
0206
0207 struct {
0208 const char *old_name;
0209 const char *new_name;
0210 } rename;
0211 } args;
0212 } H5VL_attr_specific_args_t;
0213
0214
0215 typedef int H5VL_attr_optional_t;
0216
0217
0218 typedef enum H5VL_dataset_get_t {
0219 H5VL_DATASET_GET_DAPL,
0220 H5VL_DATASET_GET_DCPL,
0221 H5VL_DATASET_GET_SPACE,
0222 H5VL_DATASET_GET_SPACE_STATUS,
0223 H5VL_DATASET_GET_STORAGE_SIZE,
0224 H5VL_DATASET_GET_TYPE
0225 } H5VL_dataset_get_t;
0226
0227
0228 typedef struct H5VL_dataset_get_args_t {
0229 H5VL_dataset_get_t op_type;
0230
0231
0232 union {
0233
0234 struct {
0235 hid_t dapl_id;
0236 } get_dapl;
0237
0238
0239 struct {
0240 hid_t dcpl_id;
0241 } get_dcpl;
0242
0243
0244 struct {
0245 hid_t space_id;
0246 } get_space;
0247
0248
0249 struct {
0250 H5D_space_status_t *status;
0251 } get_space_status;
0252
0253
0254 struct {
0255 hsize_t *storage_size;
0256 } get_storage_size;
0257
0258
0259 struct {
0260 hid_t type_id;
0261 } get_type;
0262 } args;
0263 } H5VL_dataset_get_args_t;
0264
0265
0266 typedef enum H5VL_dataset_specific_t {
0267 H5VL_DATASET_SET_EXTENT,
0268 H5VL_DATASET_FLUSH,
0269 H5VL_DATASET_REFRESH
0270 } H5VL_dataset_specific_t;
0271
0272
0273 typedef struct H5VL_dataset_specific_args_t {
0274 H5VL_dataset_specific_t op_type;
0275
0276
0277 union {
0278
0279 struct {
0280 const hsize_t *size;
0281 } set_extent;
0282
0283
0284 struct {
0285 hid_t dset_id;
0286 } flush;
0287
0288
0289 struct {
0290 hid_t dset_id;
0291 } refresh;
0292 } args;
0293 } H5VL_dataset_specific_args_t;
0294
0295
0296 typedef int H5VL_dataset_optional_t;
0297
0298
0299 typedef enum H5VL_datatype_get_t {
0300 H5VL_DATATYPE_GET_BINARY_SIZE,
0301 H5VL_DATATYPE_GET_BINARY,
0302 H5VL_DATATYPE_GET_TCPL
0303 } H5VL_datatype_get_t;
0304
0305
0306 typedef struct H5VL_datatype_get_args_t {
0307 H5VL_datatype_get_t op_type;
0308
0309
0310 union {
0311
0312 struct {
0313 size_t *size;
0314 } get_binary_size;
0315
0316
0317 struct {
0318 void *buf;
0319 size_t buf_size;
0320 } get_binary;
0321
0322
0323 struct {
0324 hid_t tcpl_id;
0325 } get_tcpl;
0326 } args;
0327 } H5VL_datatype_get_args_t;
0328
0329
0330 typedef enum H5VL_datatype_specific_t {
0331 H5VL_DATATYPE_FLUSH,
0332 H5VL_DATATYPE_REFRESH
0333 } H5VL_datatype_specific_t;
0334
0335
0336 typedef struct H5VL_datatype_specific_args_t {
0337 H5VL_datatype_specific_t op_type;
0338
0339
0340 union {
0341
0342 struct {
0343 hid_t type_id;
0344 } flush;
0345
0346
0347 struct {
0348 hid_t type_id;
0349 } refresh;
0350 } args;
0351 } H5VL_datatype_specific_args_t;
0352
0353
0354 typedef int H5VL_datatype_optional_t;
0355
0356
0357
0358 typedef struct H5VL_file_cont_info_t {
0359 unsigned version;
0360 uint64_t feature_flags;
0361
0362 size_t token_size;
0363 size_t blob_id_size;
0364 } H5VL_file_cont_info_t;
0365
0366
0367 typedef enum H5VL_file_get_t {
0368 H5VL_FILE_GET_CONT_INFO,
0369 H5VL_FILE_GET_FAPL,
0370 H5VL_FILE_GET_FCPL,
0371 H5VL_FILE_GET_FILENO,
0372 H5VL_FILE_GET_INTENT,
0373 H5VL_FILE_GET_NAME,
0374 H5VL_FILE_GET_OBJ_COUNT,
0375 H5VL_FILE_GET_OBJ_IDS
0376 } H5VL_file_get_t;
0377
0378
0379 typedef struct H5VL_file_get_name_args_t {
0380 H5I_type_t type;
0381 size_t buf_size;
0382 char *buf;
0383 size_t *file_name_len;
0384 } H5VL_file_get_name_args_t;
0385
0386
0387 typedef struct H5VL_file_get_obj_ids_args_t {
0388 unsigned types;
0389 size_t max_objs;
0390 hid_t *oid_list;
0391 size_t *count;
0392 } H5VL_file_get_obj_ids_args_t;
0393
0394
0395 typedef struct H5VL_file_get_args_t {
0396 H5VL_file_get_t op_type;
0397
0398
0399 union {
0400
0401 struct {
0402 H5VL_file_cont_info_t *info;
0403 } get_cont_info;
0404
0405
0406 struct {
0407 hid_t fapl_id;
0408 } get_fapl;
0409
0410
0411 struct {
0412 hid_t fcpl_id;
0413 } get_fcpl;
0414
0415
0416 struct {
0417 unsigned long *fileno;
0418 } get_fileno;
0419
0420
0421 struct {
0422 unsigned *flags;
0423 } get_intent;
0424
0425
0426 H5VL_file_get_name_args_t get_name;
0427
0428
0429 struct {
0430 unsigned types;
0431 size_t *count;
0432 } get_obj_count;
0433
0434
0435 H5VL_file_get_obj_ids_args_t get_obj_ids;
0436 } args;
0437 } H5VL_file_get_args_t;
0438
0439
0440 typedef enum H5VL_file_specific_t {
0441 H5VL_FILE_FLUSH,
0442 H5VL_FILE_REOPEN,
0443 H5VL_FILE_IS_ACCESSIBLE,
0444
0445
0446
0447
0448
0449
0450
0451
0452 H5VL_FILE_DELETE,
0453 H5VL_FILE_IS_EQUAL
0454 } H5VL_file_specific_t;
0455
0456
0457 typedef struct H5VL_file_specific_args_t {
0458 H5VL_file_specific_t op_type;
0459
0460
0461 union {
0462
0463 struct {
0464 H5I_type_t obj_type;
0465 H5F_scope_t scope;
0466 } flush;
0467
0468
0469 struct {
0470 void **file;
0471 } reopen;
0472
0473
0474 struct {
0475 const char *filename;
0476 hid_t fapl_id;
0477 hbool_t *accessible;
0478 } is_accessible;
0479
0480
0481 struct {
0482 const char *filename;
0483 hid_t fapl_id;
0484 } del;
0485
0486
0487 struct {
0488 void *obj2;
0489 hbool_t *same_file;
0490 } is_equal;
0491 } args;
0492 } H5VL_file_specific_args_t;
0493
0494
0495 typedef int H5VL_file_optional_t;
0496
0497
0498 typedef enum H5VL_group_get_t {
0499 H5VL_GROUP_GET_GCPL,
0500 H5VL_GROUP_GET_INFO
0501 } H5VL_group_get_t;
0502
0503
0504 typedef struct H5VL_group_get_info_args_t {
0505 H5VL_loc_params_t loc_params;
0506 H5G_info_t *ginfo;
0507 } H5VL_group_get_info_args_t;
0508
0509
0510 typedef struct H5VL_group_get_args_t {
0511 H5VL_group_get_t op_type;
0512
0513
0514 union {
0515
0516 struct {
0517 hid_t gcpl_id;
0518 } get_gcpl;
0519
0520
0521 H5VL_group_get_info_args_t get_info;
0522 } args;
0523 } H5VL_group_get_args_t;
0524
0525
0526 typedef enum H5VL_group_specific_t {
0527 H5VL_GROUP_MOUNT,
0528 H5VL_GROUP_UNMOUNT,
0529 H5VL_GROUP_FLUSH,
0530 H5VL_GROUP_REFRESH
0531 } H5VL_group_specific_t;
0532
0533
0534 typedef struct H5VL_group_spec_mount_args_t {
0535 const char *name;
0536 void *child_file;
0537 hid_t fmpl_id;
0538 } H5VL_group_spec_mount_args_t;
0539
0540
0541 typedef struct H5VL_group_specific_args_t {
0542 H5VL_group_specific_t op_type;
0543
0544
0545 union {
0546
0547 H5VL_group_spec_mount_args_t mount;
0548
0549
0550 struct {
0551 const char *name;
0552 } unmount;
0553
0554
0555 struct {
0556 hid_t grp_id;
0557 } flush;
0558
0559
0560 struct {
0561 hid_t grp_id;
0562 } refresh;
0563 } args;
0564 } H5VL_group_specific_args_t;
0565
0566
0567 typedef int H5VL_group_optional_t;
0568
0569
0570 typedef enum H5VL_link_create_t {
0571 H5VL_LINK_CREATE_HARD,
0572 H5VL_LINK_CREATE_SOFT,
0573 H5VL_LINK_CREATE_UD
0574 } H5VL_link_create_t;
0575
0576
0577 typedef struct H5VL_link_create_args_t {
0578 H5VL_link_create_t op_type;
0579
0580
0581 union {
0582
0583 struct {
0584 void *curr_obj;
0585 H5VL_loc_params_t curr_loc_params;
0586 } hard;
0587
0588
0589 struct {
0590 const char *target;
0591 } soft;
0592
0593
0594 struct {
0595 H5L_type_t type;
0596 const void *buf;
0597 size_t buf_size;
0598 } ud;
0599 } args;
0600 } H5VL_link_create_args_t;
0601
0602
0603 typedef enum H5VL_link_get_t {
0604 H5VL_LINK_GET_INFO,
0605 H5VL_LINK_GET_NAME,
0606 H5VL_LINK_GET_VAL
0607 } H5VL_link_get_t;
0608
0609
0610 typedef struct H5VL_link_get_args_t {
0611 H5VL_link_get_t op_type;
0612
0613
0614 union {
0615
0616 struct {
0617 H5L_info2_t *linfo;
0618 } get_info;
0619
0620
0621 struct {
0622 size_t name_size;
0623 char *name;
0624 size_t *name_len;
0625 } get_name;
0626
0627
0628 struct {
0629 size_t buf_size;
0630 void *buf;
0631 } get_val;
0632 } args;
0633 } H5VL_link_get_args_t;
0634
0635
0636 typedef enum H5VL_link_specific_t {
0637 H5VL_LINK_DELETE,
0638 H5VL_LINK_EXISTS,
0639 H5VL_LINK_ITER
0640 } H5VL_link_specific_t;
0641
0642
0643 typedef struct H5VL_link_iterate_args_t {
0644 hbool_t recursive;
0645 H5_index_t idx_type;
0646 H5_iter_order_t order;
0647 hsize_t *idx_p;
0648 H5L_iterate2_t op;
0649 void *op_data;
0650 } H5VL_link_iterate_args_t;
0651
0652
0653 typedef struct H5VL_link_specific_args_t {
0654 H5VL_link_specific_t op_type;
0655
0656
0657 union {
0658
0659
0660
0661
0662 struct {
0663 hbool_t *exists;
0664 } exists;
0665
0666
0667 H5VL_link_iterate_args_t iterate;
0668 } args;
0669 } H5VL_link_specific_args_t;
0670
0671
0672 typedef int H5VL_link_optional_t;
0673
0674
0675
0676 typedef enum H5VL_object_get_t {
0677 H5VL_OBJECT_GET_FILE,
0678 H5VL_OBJECT_GET_NAME,
0679 H5VL_OBJECT_GET_TYPE,
0680 H5VL_OBJECT_GET_INFO
0681 } H5VL_object_get_t;
0682
0683
0684 typedef struct H5VL_object_get_args_t {
0685 H5VL_object_get_t op_type;
0686
0687
0688 union {
0689
0690 struct {
0691 void **file;
0692 } get_file;
0693
0694
0695 struct {
0696 size_t buf_size;
0697 char *buf;
0698 size_t *name_len;
0699 } get_name;
0700
0701
0702 struct {
0703 H5O_type_t *obj_type;
0704 } get_type;
0705
0706
0707 struct {
0708 unsigned fields;
0709 H5O_info2_t *oinfo;
0710 } get_info;
0711 } args;
0712 } H5VL_object_get_args_t;
0713
0714
0715 typedef enum H5VL_object_specific_t {
0716 H5VL_OBJECT_CHANGE_REF_COUNT,
0717 H5VL_OBJECT_EXISTS,
0718 H5VL_OBJECT_LOOKUP,
0719 H5VL_OBJECT_VISIT,
0720 H5VL_OBJECT_FLUSH,
0721 H5VL_OBJECT_REFRESH
0722 } H5VL_object_specific_t;
0723
0724
0725 typedef struct H5VL_object_visit_args_t {
0726 H5_index_t idx_type;
0727 H5_iter_order_t order;
0728 unsigned fields;
0729 H5O_iterate2_t op;
0730 void *op_data;
0731 } H5VL_object_visit_args_t;
0732
0733
0734 typedef struct H5VL_object_specific_args_t {
0735 H5VL_object_specific_t op_type;
0736
0737
0738 union {
0739
0740 struct {
0741 int delta;
0742 } change_rc;
0743
0744
0745 struct {
0746 hbool_t *exists;
0747 } exists;
0748
0749
0750 struct {
0751 H5O_token_t *token_ptr;
0752 } lookup;
0753
0754
0755 H5VL_object_visit_args_t visit;
0756
0757
0758 struct {
0759 hid_t obj_id;
0760 } flush;
0761
0762
0763 struct {
0764 hid_t obj_id;
0765 } refresh;
0766 } args;
0767 } H5VL_object_specific_args_t;
0768
0769
0770 typedef int H5VL_object_optional_t;
0771
0772
0773 typedef enum H5VL_request_status_t {
0774 H5VL_REQUEST_STATUS_IN_PROGRESS,
0775 H5VL_REQUEST_STATUS_SUCCEED,
0776 H5VL_REQUEST_STATUS_FAIL,
0777 H5VL_REQUEST_STATUS_CANT_CANCEL,
0778
0779
0780
0781
0782 H5VL_REQUEST_STATUS_CANCELED
0783 } H5VL_request_status_t;
0784
0785
0786 typedef enum H5VL_request_specific_t {
0787 H5VL_REQUEST_GET_ERR_STACK,
0788 H5VL_REQUEST_GET_EXEC_TIME
0789 } H5VL_request_specific_t;
0790
0791
0792 typedef struct H5VL_request_specific_args_t {
0793 H5VL_request_specific_t op_type;
0794
0795
0796 union {
0797
0798 struct {
0799 hid_t err_stack_id;
0800 } get_err_stack;
0801
0802
0803 struct {
0804 uint64_t *exec_ts;
0805 uint64_t *exec_time;
0806 } get_exec_time;
0807 } args;
0808 } H5VL_request_specific_args_t;
0809
0810
0811 typedef int H5VL_request_optional_t;
0812
0813
0814
0815 typedef enum H5VL_blob_specific_t {
0816 H5VL_BLOB_DELETE,
0817 H5VL_BLOB_ISNULL,
0818 H5VL_BLOB_SETNULL
0819 } H5VL_blob_specific_t;
0820
0821
0822 typedef struct H5VL_blob_specific_args_t {
0823 H5VL_blob_specific_t op_type;
0824
0825
0826 union {
0827
0828
0829
0830
0831 struct {
0832 hbool_t *isnull;
0833 } is_null;
0834
0835
0836
0837 } args;
0838 } H5VL_blob_specific_args_t;
0839
0840
0841 typedef int H5VL_blob_optional_t;
0842
0843
0844
0845 typedef struct H5VL_info_class_t {
0846 size_t size;
0847 void *(*copy)(const void *info);
0848 herr_t (*cmp)(int *cmp_value, const void *info1, const void *info2);
0849 herr_t (*free)(void *info);
0850 herr_t (*to_str)(const void *info, char **str);
0851 herr_t (*from_str)(const char *str,
0852 void **info);
0853 } H5VL_info_class_t;
0854
0855
0856
0857
0858 typedef struct H5VL_wrap_class_t {
0859 void *(*get_object)(const void *obj);
0860 herr_t (*get_wrap_ctx)(
0861 const void *obj,
0862 void **wrap_ctx);
0863 void *(*wrap_object)(void *obj, H5I_type_t obj_type,
0864 void *wrap_ctx);
0865 void *(*unwrap_object)(void *obj);
0866 herr_t (*free_wrap_ctx)(
0867 void *wrap_ctx);
0868 } H5VL_wrap_class_t;
0869
0870
0871 typedef struct H5VL_attr_class_t {
0872 void *(*create)(void *obj, const H5VL_loc_params_t *loc_params, const char *attr_name, hid_t type_id,
0873 hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t dxpl_id, void **req);
0874 void *(*open)(void *obj, const H5VL_loc_params_t *loc_params, const char *attr_name, hid_t aapl_id,
0875 hid_t dxpl_id, void **req);
0876 herr_t (*read)(void *attr, hid_t mem_type_id, void *buf, hid_t dxpl_id, void **req);
0877 herr_t (*write)(void *attr, hid_t mem_type_id, const void *buf, hid_t dxpl_id, void **req);
0878 herr_t (*get)(void *obj, H5VL_attr_get_args_t *args, hid_t dxpl_id, void **req);
0879 herr_t (*specific)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_attr_specific_args_t *args,
0880 hid_t dxpl_id, void **req);
0881 herr_t (*optional)(void *obj, H5VL_optional_args_t *args, hid_t dxpl_id, void **req);
0882 herr_t (*close)(void *attr, hid_t dxpl_id, void **req);
0883 } H5VL_attr_class_t;
0884
0885
0886 typedef struct H5VL_dataset_class_t {
0887 void *(*create)(void *obj, const H5VL_loc_params_t *loc_params, const char *name, hid_t lcpl_id,
0888 hid_t type_id, hid_t space_id, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id, void **req);
0889 void *(*open)(void *obj, const H5VL_loc_params_t *loc_params, const char *name, hid_t dapl_id,
0890 hid_t dxpl_id, void **req);
0891 herr_t (*read)(size_t count, void *dset[], hid_t mem_type_id[], hid_t mem_space_id[],
0892 hid_t file_space_id[], hid_t dxpl_id, void *buf[], void **req);
0893 herr_t (*write)(size_t count, void *dset[], hid_t mem_type_id[], hid_t mem_space_id[],
0894 hid_t file_space_id[], hid_t dxpl_id, const void *buf[], void **req);
0895 herr_t (*get)(void *obj, H5VL_dataset_get_args_t *args, hid_t dxpl_id, void **req);
0896 herr_t (*specific)(void *obj, H5VL_dataset_specific_args_t *args, hid_t dxpl_id, void **req);
0897 herr_t (*optional)(void *obj, H5VL_optional_args_t *args, hid_t dxpl_id, void **req);
0898 herr_t (*close)(void *dset, hid_t dxpl_id, void **req);
0899 } H5VL_dataset_class_t;
0900
0901
0902 typedef struct H5VL_datatype_class_t {
0903 void *(*commit)(void *obj, const H5VL_loc_params_t *loc_params, const char *name, hid_t type_id,
0904 hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t dxpl_id, void **req);
0905 void *(*open)(void *obj, const H5VL_loc_params_t *loc_params, const char *name, hid_t tapl_id,
0906 hid_t dxpl_id, void **req);
0907 herr_t (*get)(void *obj, H5VL_datatype_get_args_t *args, hid_t dxpl_id, void **req);
0908 herr_t (*specific)(void *obj, H5VL_datatype_specific_args_t *args, hid_t dxpl_id, void **req);
0909 herr_t (*optional)(void *obj, H5VL_optional_args_t *args, hid_t dxpl_id, void **req);
0910 herr_t (*close)(void *dt, hid_t dxpl_id, void **req);
0911 } H5VL_datatype_class_t;
0912
0913
0914 typedef struct H5VL_file_class_t {
0915 void *(*create)(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id,
0916 void **req);
0917 void *(*open)(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req);
0918 herr_t (*get)(void *obj, H5VL_file_get_args_t *args, hid_t dxpl_id, void **req);
0919 herr_t (*specific)(void *obj, H5VL_file_specific_args_t *args, hid_t dxpl_id, void **req);
0920 herr_t (*optional)(void *obj, H5VL_optional_args_t *args, hid_t dxpl_id, void **req);
0921 herr_t (*close)(void *file, hid_t dxpl_id, void **req);
0922 } H5VL_file_class_t;
0923
0924
0925 typedef struct H5VL_group_class_t {
0926 void *(*create)(void *obj, const H5VL_loc_params_t *loc_params, const char *name, hid_t lcpl_id,
0927 hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req);
0928 void *(*open)(void *obj, const H5VL_loc_params_t *loc_params, const char *name, hid_t gapl_id,
0929 hid_t dxpl_id, void **req);
0930 herr_t (*get)(void *obj, H5VL_group_get_args_t *args, hid_t dxpl_id, void **req);
0931 herr_t (*specific)(void *obj, H5VL_group_specific_args_t *args, hid_t dxpl_id, void **req);
0932 herr_t (*optional)(void *obj, H5VL_optional_args_t *args, hid_t dxpl_id, void **req);
0933 herr_t (*close)(void *grp, hid_t dxpl_id, void **req);
0934 } H5VL_group_class_t;
0935
0936
0937 typedef struct H5VL_link_class_t {
0938 herr_t (*create)(H5VL_link_create_args_t *args, void *obj, const H5VL_loc_params_t *loc_params,
0939 hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id, void **req);
0940 herr_t (*copy)(void *src_obj, const H5VL_loc_params_t *loc_params1, void *dst_obj,
0941 const H5VL_loc_params_t *loc_params2, hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id,
0942 void **req);
0943 herr_t (*move)(void *src_obj, const H5VL_loc_params_t *loc_params1, void *dst_obj,
0944 const H5VL_loc_params_t *loc_params2, hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id,
0945 void **req);
0946 herr_t (*get)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_link_get_args_t *args, hid_t dxpl_id,
0947 void **req);
0948 herr_t (*specific)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_link_specific_args_t *args,
0949 hid_t dxpl_id, void **req);
0950 herr_t (*optional)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_optional_args_t *args,
0951 hid_t dxpl_id, void **req);
0952 } H5VL_link_class_t;
0953
0954
0955 typedef struct H5VL_object_class_t {
0956 void *(*open)(void *obj, const H5VL_loc_params_t *loc_params, H5I_type_t *opened_type, hid_t dxpl_id,
0957 void **req);
0958 herr_t (*copy)(void *src_obj, const H5VL_loc_params_t *loc_params1, const char *src_name, void *dst_obj,
0959 const H5VL_loc_params_t *loc_params2, const char *dst_name, hid_t ocpypl_id, hid_t lcpl_id,
0960 hid_t dxpl_id, void **req);
0961 herr_t (*get)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_object_get_args_t *args, hid_t dxpl_id,
0962 void **req);
0963 herr_t (*specific)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_object_specific_args_t *args,
0964 hid_t dxpl_id, void **req);
0965 herr_t (*optional)(void *obj, const H5VL_loc_params_t *loc_params, H5VL_optional_args_t *args,
0966 hid_t dxpl_id, void **req);
0967 } H5VL_object_class_t;
0968
0969
0970 typedef herr_t (*H5VL_request_notify_t)(void *ctx, H5VL_request_status_t status);
0971
0972
0973 typedef enum H5VL_get_conn_lvl_t {
0974 H5VL_GET_CONN_LVL_CURR,
0975 H5VL_GET_CONN_LVL_TERM
0976
0977
0978 } H5VL_get_conn_lvl_t;
0979
0980
0981 struct H5VL_class_t;
0982
0983
0984 typedef struct H5VL_introspect_class_t {
0985 herr_t (*get_conn_cls)(void *obj, H5VL_get_conn_lvl_t lvl, const struct H5VL_class_t **conn_cls);
0986 herr_t (*get_cap_flags)(const void *info, uint64_t *cap_flags);
0987 herr_t (*opt_query)(void *obj, H5VL_subclass_t cls, int opt_type, uint64_t *flags);
0988 } H5VL_introspect_class_t;
0989
0990
0991 typedef struct H5VL_request_class_t {
0992 herr_t (*wait)(void *req, uint64_t timeout, H5VL_request_status_t *status);
0993 herr_t (*notify)(void *req, H5VL_request_notify_t cb, void *ctx);
0994 herr_t (*cancel)(void *req, H5VL_request_status_t *status);
0995 herr_t (*specific)(void *req, H5VL_request_specific_args_t *args);
0996 herr_t (*optional)(void *req, H5VL_optional_args_t *args);
0997 herr_t (*free)(void *req);
0998 } H5VL_request_class_t;
0999
1000
1001 typedef struct H5VL_blob_class_t {
1002 herr_t (*put)(void *obj, const void *buf, size_t size, void *blob_id, void *ctx);
1003 herr_t (*get)(void *obj, const void *blob_id, void *buf, size_t size, void *ctx);
1004 herr_t (*specific)(void *obj, void *blob_id, H5VL_blob_specific_args_t *args);
1005 herr_t (*optional)(void *obj, void *blob_id, H5VL_optional_args_t *args);
1006 } H5VL_blob_class_t;
1007
1008
1009 typedef struct H5VL_token_class_t {
1010 herr_t (*cmp)(void *obj, const H5O_token_t *token1, const H5O_token_t *token2, int *cmp_value);
1011 herr_t (*to_str)(void *obj, H5I_type_t obj_type, const H5O_token_t *token, char **token_str);
1012 herr_t (*from_str)(void *obj, H5I_type_t obj_type, const char *token_str, H5O_token_t *token);
1013 } H5VL_token_class_t;
1014
1015
1016
1017
1018
1019
1020 typedef struct H5VL_class_t {
1021
1022 unsigned version;
1023 H5VL_class_value_t value;
1024 const char *name;
1025 unsigned conn_version;
1026 uint64_t cap_flags;
1027 herr_t (*initialize)(hid_t vipl_id);
1028 herr_t (*terminate)(void);
1029
1030
1031 H5VL_info_class_t info_cls;
1032 H5VL_wrap_class_t wrap_cls;
1033
1034
1035 H5VL_attr_class_t attr_cls;
1036 H5VL_dataset_class_t dataset_cls;
1037 H5VL_datatype_class_t datatype_cls;
1038 H5VL_file_class_t file_cls;
1039 H5VL_group_class_t group_cls;
1040 H5VL_link_class_t link_cls;
1041 H5VL_object_class_t object_cls;
1042
1043
1044 H5VL_introspect_class_t introspect_cls;
1045 H5VL_request_class_t request_cls;
1046 H5VL_blob_class_t blob_cls;
1047 H5VL_token_class_t token_cls;
1048
1049
1050 herr_t (*optional)(void *obj, H5VL_optional_args_t *args, hid_t dxpl_id,
1051 void **req);
1052 } H5VL_class_t;
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063 #ifdef __cplusplus
1064 extern "C" {
1065 #endif
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099 H5_DLL hid_t H5VLregister_connector(const H5VL_class_t *cls, hid_t vipl_id);
1100
1101
1102
1103 H5_DLL void *H5VLobject(hid_t obj_id);
1104
1105
1106
1107 H5_DLL hid_t H5VLget_file_type(void *file_obj, hid_t connector_id, hid_t dtype_id);
1108
1109
1110
1111 H5_DLL hid_t H5VLpeek_connector_id_by_name(const char *name);
1112
1113
1114
1115 H5_DLL hid_t H5VLpeek_connector_id_by_value(H5VL_class_value_t value);
1116
1117
1118 H5_DLL herr_t H5VLregister_opt_operation(H5VL_subclass_t subcls, const char *op_name, int *op_val);
1119 H5_DLL herr_t H5VLfind_opt_operation(H5VL_subclass_t subcls, const char *op_name, int *op_val);
1120 H5_DLL herr_t H5VLunregister_opt_operation(H5VL_subclass_t subcls, const char *op_name);
1121 H5_DLL herr_t H5VLattr_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1122 hid_t attr_id, H5VL_optional_args_t *args, hid_t dxpl_id, hid_t es_id);
1123 H5_DLL herr_t H5VLdataset_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1124 hid_t dset_id, H5VL_optional_args_t *args, hid_t dxpl_id, hid_t es_id);
1125 H5_DLL herr_t H5VLdatatype_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1126 hid_t type_id, H5VL_optional_args_t *args, hid_t dxpl_id, hid_t es_id);
1127 H5_DLL herr_t H5VLfile_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1128 hid_t file_id, H5VL_optional_args_t *args, hid_t dxpl_id, hid_t es_id);
1129 H5_DLL herr_t H5VLgroup_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1130 hid_t group_id, H5VL_optional_args_t *args, hid_t dxpl_id, hid_t es_id);
1131 H5_DLL herr_t H5VLlink_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1132 hid_t loc_id, const char *name, hid_t lapl_id, H5VL_optional_args_t *args,
1133 hid_t dxpl_id, hid_t es_id);
1134 H5_DLL herr_t H5VLobject_optional_op(const char *app_file, const char *app_func, unsigned app_line,
1135 hid_t loc_id, const char *name, hid_t lapl_id,
1136 H5VL_optional_args_t *args, hid_t dxpl_id, hid_t es_id);
1137 H5_DLL herr_t H5VLrequest_optional_op(void *req, hid_t connector_id, H5VL_optional_args_t *args);
1138
1139
1140
1141
1142 #ifndef H5VL_MODULE
1143
1144 #define H5VLattr_optional_op(...) H5VLattr_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1145 #define H5VLdataset_optional_op(...) H5VLdataset_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1146 #define H5VLdatatype_optional_op(...) H5VLdatatype_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1147 #define H5VLfile_optional_op(...) H5VLfile_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1148 #define H5VLgroup_optional_op(...) H5VLgroup_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1149 #define H5VLlink_optional_op(...) H5VLlink_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1150 #define H5VLobject_optional_op(...) H5VLobject_optional_op(__FILE__, __func__, __LINE__, __VA_ARGS__)
1151
1152
1153
1154
1155 #define H5VLattr_optional_op_wrap H5_NO_EXPAND(H5VLattr_optional_op)
1156 #define H5VLdataset_optional_op_wrap H5_NO_EXPAND(H5VLdataset_optional_op)
1157 #define H5VLdatatype_optional_op_wrap H5_NO_EXPAND(H5VLdatatype_optional_op)
1158 #define H5VLfile_optional_op_wrap H5_NO_EXPAND(H5VLfile_optional_op)
1159 #define H5VLgroup_optional_op_wrap H5_NO_EXPAND(H5VLgroup_optional_op)
1160 #define H5VLlink_optional_op_wrap H5_NO_EXPAND(H5VLlink_optional_op)
1161 #define H5VLobject_optional_op_wrap H5_NO_EXPAND(H5VLobject_optional_op)
1162 #endif
1163
1164 #ifdef __cplusplus
1165 }
1166 #endif
1167
1168 #endif