summaryrefslogtreecommitdiffstats
path: root/src/H5VLconnector.h
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@koziol.gov>2019-08-21 18:14:06 (GMT)
committerJerome Soumagne <jsoumagne@hdfgroup.org>2019-10-08 19:30:23 (GMT)
commiteaa65c862b09b399fc4727e664b56b648cfb37d2 (patch)
treecdf8678ee9adce377505dddac2df564b0e20b269 /src/H5VLconnector.h
parentf32e70895ef278a48c498477b9c29f131819e2f4 (diff)
downloadhdf5-eaa65c862b09b399fc4727e664b56b648cfb37d2.zip
hdf5-eaa65c862b09b399fc4727e664b56b648cfb37d2.tar.gz
hdf5-eaa65c862b09b399fc4727e664b56b648cfb37d2.tar.bz2
Add 'blob' callbacks to VOL, along with a native implementation to store them
in the global heap, and changed the VL datatype conversion code to use blobs. Move encode/decode of sequence lengths into VL datatype callbacks, from native VOL blob routines.
Diffstat (limited to 'src/H5VLconnector.h')
-rw-r--r--src/H5VLconnector.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/H5VLconnector.h b/src/H5VLconnector.h
index 98bc521..c554dab 100644
--- a/src/H5VLconnector.h
+++ b/src/H5VLconnector.h
@@ -169,6 +169,14 @@ typedef enum H5VL_request_specific_t {
H5VL_REQUEST_WAITALL /* Wait until all requests complete */
} H5VL_request_specific_t;
+/* types for 'blob' SPECIFIC callback */
+typedef enum H5VL_blob_specific_t {
+ H5VL_BLOB_DELETE, /* Delete a blob (by ID) */
+ H5VL_BLOB_GETSIZE, /* Get size of blob */
+ H5VL_BLOB_ISNULL, /* Check if a blob ID is "null" */
+ H5VL_BLOB_SETNULL /* Set a blob ID to the connector's "null" blob ID value */
+} H5VL_blob_specific_t;
+
/* types for different ways that objects are located in an HDF5 container */
typedef enum H5VL_loc_type_t {
H5VL_OBJECT_BY_SELF,
@@ -201,7 +209,7 @@ struct H5VL_loc_by_ref {
hid_t lapl_id;
};
-/* Structure to hold parameters for object locations.
+/* Structure to hold parameters for object locations.
* either: BY_ADDR, BY_ID, BY_NAME, BY_IDX, BY_REF
*
* Note: Leave loc_by_addr as the first union member so we
@@ -355,6 +363,14 @@ typedef struct H5VL_request_class_t {
herr_t (*free)(void *req);
} H5VL_request_class_t;
+/* 'blob' routines */
+typedef struct H5VL_blob_class_t {
+ herr_t (*put)(void *blob, size_t size, void *ctx, void *id);
+ herr_t (*get)(const void *id, void *ctx, void *blob);
+ herr_t (*specific)(void *id, H5VL_blob_specific_t specific_type, va_list arguments);
+ herr_t (*optional)(void *id, va_list arguments);
+} H5VL_blob_class_t;
+
/*
* VOL connector identifiers. Values 0 through 255 are for connectors defined
* by the HDF5 library. Values 256 through 511 are available for testing new
@@ -386,8 +402,9 @@ typedef struct H5VL_class_t {
H5VL_link_class_t link_cls; /* Link (H5L*) class callbacks */
H5VL_object_class_t object_cls; /* Object (H5O*) class callbacks */
- /* Services */
+ /* Infrastructure / Services */
H5VL_request_class_t request_cls; /* Asynchronous request class callbacks */
+ H5VL_blob_class_t blob_cls; /* 'blob' callbacks */
/* Catch-all */
herr_t (*optional)(void *obj, hid_t dxpl_id, void **req, va_list arguments); /* Optional callback */
@@ -398,6 +415,7 @@ typedef struct H5VL_class_t {
/* Public Variables */
/********************/
+
/*********************/
/* Public Prototypes */
/*********************/