summaryrefslogtreecommitdiffstats
path: root/hl/src/H5PT.c
diff options
context:
space:
mode:
Diffstat (limited to 'hl/src/H5PT.c')
-rw-r--r--hl/src/H5PT.c1069
1 files changed, 605 insertions, 464 deletions
diff --git a/hl/src/H5PT.c b/hl/src/H5PT.c
index 6ed1ac0..8f0b323 100644
--- a/hl/src/H5PT.c
+++ b/hl/src/H5PT.c
@@ -1,41 +1,35 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-#include <stdlib.h>
-
#include "H5PTprivate.h"
#include "H5TBprivate.h"
/* Packet Table private data */
-typedef struct
-{
- hid_t dset_id; /* The ID of the dataset containing this table */
- hid_t type_id; /* The ID of the packet table's native datatype */
- hsize_t current_index; /* The index of the packet that get_next_packet will read next */
- hsize_t size; /* The number of packets currently contained in this table */
+typedef struct {
+ hid_t dset_id; /* The ID of the dataset containing this table */
+ hid_t type_id; /* The ID of the packet table's native datatype */
+ hsize_t current_index; /* The index of the packet that get_next_packet will read next */
+ hsize_t size; /* The number of packets currently contained in this table */
} htbl_t;
-static hsize_t H5PT_ptable_count = 0;
+static hsize_t H5PT_ptable_count = 0;
static H5I_type_t H5PT_ptable_id_type = H5I_UNINIT;
#define H5PT_HASH_TABLE_SIZE 64
/* Packet Table private functions */
-static herr_t H5PT_free_id(void *id);
-static herr_t H5PT_close( htbl_t* table );
+static herr_t H5PT_free_id(void *id, void **_ctx);
+static herr_t H5PT_close(htbl_t *table);
static herr_t H5PT_create_index(htbl_t *table_id);
static herr_t H5PT_set_index(htbl_t *table_id, hsize_t pt_index);
static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
@@ -48,15 +42,15 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
*/
/*-------------------------------------------------------------------------
- * Function: H5PTcreate_fl
+ * Function: H5PTcreate
*
* Purpose: Creates a dataset containing a table and returns the Identifier
- * of the table.
+ * of the table. (Copied mostly from H5PTcreate_fl)
*
- * Return: Success: table ID, Failure: Negative
+ * Return: Success: table ID, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer (Author of H5PTcreate_fl)
+ * James Laird (Author of H5PTcreate_fl)
*
* Date: March 12, 2004
*
@@ -65,113 +59,127 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
* table is initially of size 0.
*
* Modifications:
+ * Mar 1, 2016
+ * This function is added to replace H5PTcreate_fl and it differs
+ * from H5PTcreate_fl only because its last argument is plist_id
+ * instead of compression; this is to allow flexible compression.
+ * -BMR
*
*-------------------------------------------------------------------------
*/
-
-hid_t H5PTcreate_fl ( hid_t loc_id,
- const char *dset_name,
- hid_t dtype_id,
- hsize_t chunk_size,
- int compression )
+hid_t
+H5PTcreate(hid_t loc_id, const char *dset_name, hid_t dtype_id, hsize_t chunk_size, hid_t plist_id)
{
- htbl_t * table = NULL;
- hid_t dset_id = H5I_BADID;
- hid_t space_id = H5I_BADID;
- hid_t plist_id = H5I_BADID;
- hsize_t dims[1];
- hsize_t dims_chunk[1];
- hsize_t maxdims[1];
- hid_t ret_value;
-
- /* check the arguments */
- if (dset_name == NULL) {
- goto out;
- }
-
- /* Register the packet table ID type if this is the first table created */
- if(H5PT_ptable_id_type < 0)
- if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
- goto out;
-
- /* Get memory for the table identifier */
- table = (htbl_t *)HDmalloc(sizeof(htbl_t));
-
- /* Create a simple data space with unlimited size */
- dims[0] = 0;
- dims_chunk[0] = chunk_size;
- maxdims[0] = H5S_UNLIMITED;
- if((space_id = H5Screate_simple(1, dims, maxdims)) < 0)
- goto out;
-
- /* Modify dataset creation properties to enable chunking */
- plist_id = H5Pcreate(H5P_DATASET_CREATE);
- if(H5Pset_chunk(plist_id, 1, dims_chunk) < 0)
- goto out;
- if(compression >= 0 && compression <= 9)
- if(H5Pset_deflate(plist_id, (unsigned)compression) < 0)
- goto out;
-
- /* Create the dataset. */
- if((dset_id = H5Dcreate2(loc_id, dset_name, dtype_id, space_id, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0)
- goto out;
-
- /* Terminate access to the data space. */
- if(H5Sclose(space_id) < 0)
- goto out;
-
- /* End access to the property list */
- if(H5Pclose(plist_id) < 0)
- goto out;
-
- /* Create the table identifier */
- table->dset_id = dset_id;
-
- if((table->type_id = H5Tcopy(dtype_id)) < 0)
- goto out;
-
- if((table->type_id = H5Tget_native_type(table->type_id, H5T_DIR_DEFAULT)) < 0)
- goto out;
-
- H5PT_create_index(table);
- table->size = 0;
-
- /* Get an ID for this table */
- ret_value = H5Iregister(H5PT_ptable_id_type, table);
-
- if(ret_value != H5I_INVALID_HID)
- H5PT_ptable_count++;
- else
- H5PT_close(table);
-
- return ret_value;
-
- out:
- H5E_BEGIN_TRY
- H5Sclose(space_id);
- H5Pclose(plist_id);
- H5Dclose(dset_id);
- if(table)
- HDfree(table);
- H5E_END_TRY
- return H5I_INVALID_HID;
-}
+ htbl_t *table = NULL;
+ hid_t dset_id = H5I_INVALID_HID;
+ hid_t space_id = H5I_INVALID_HID;
+ hid_t plistcopy_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t dims_chunk[1];
+ hsize_t maxdims[1];
+ hid_t ret_value = H5I_INVALID_HID;
+
+ /* check the arguments */
+ if (dset_name == NULL) {
+ goto error;
+ }
+
+ /* Register the packet table ID type if this is the first table created */
+ if (H5PT_ptable_id_type < 0)
+ if ((H5PT_ptable_id_type =
+ H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
+ goto error;
+
+ /* Get memory for the table identifier */
+ table = (htbl_t *)HDmalloc(sizeof(htbl_t));
+ if (table == NULL) {
+ goto error;
+ }
+ table->dset_id = H5I_INVALID_HID;
+ table->type_id = H5I_INVALID_HID;
+
+ /* Create a simple data space with unlimited size */
+ dims[0] = 0;
+ dims_chunk[0] = chunk_size;
+ maxdims[0] = H5S_UNLIMITED;
+ if ((space_id = H5Screate_simple(1, dims, maxdims)) < 0)
+ goto error;
+
+ /* Modify dataset creation properties to enable chunking */
+ if (plist_id == H5P_DEFAULT) {
+ plistcopy_id = H5Pcreate(H5P_DATASET_CREATE);
+ }
+ else {
+ plistcopy_id = H5Pcopy(plist_id);
+ }
+ if (chunk_size > 0) {
+ if (H5Pset_chunk(plistcopy_id, 1, dims_chunk) < 0)
+ goto error;
+ }
+
+ /* Create the dataset. */
+ if ((dset_id =
+ H5Dcreate2(loc_id, dset_name, dtype_id, space_id, H5P_DEFAULT, plistcopy_id, H5P_DEFAULT)) < 0)
+ goto error;
+
+ /* Create the table identifier */
+ table->dset_id = dset_id;
+
+ /* Terminate access to the data space. */
+ if (H5Sclose(space_id) < 0)
+ goto error;
+
+ /* End access to the property list */
+ if (H5Pclose(plistcopy_id) < 0)
+ goto error;
+
+ /* Make a copy of caller's datatype and save it in the table structure.
+ It will be closed when the table is closed */
+ if ((table->type_id = H5Tcopy(dtype_id)) < 0)
+ goto error;
+
+ H5PT_create_index(table);
+ table->size = 0;
+
+ /* Get an ID for this table */
+ ret_value = H5Iregister(H5PT_ptable_id_type, table);
+ if (ret_value != H5I_INVALID_HID)
+ H5PT_ptable_count++;
+ else
+ H5PT_close(table);
+
+ return ret_value;
+
+error:
+ if (space_id != H5I_INVALID_HID)
+ H5Sclose(space_id);
+ if (plistcopy_id != H5I_INVALID_HID)
+ H5Pclose(plistcopy_id);
+ if (dset_id != H5I_INVALID_HID)
+ H5Dclose(dset_id);
+ if (table) {
+ if (table->type_id != H5I_INVALID_HID)
+ H5Tclose(table->type_id);
+ HDfree(table);
+ }
+
+ return ret_value;
+} /* H5PTcreate */
-#ifdef H5_VLPT_ENABLED
/*-------------------------------------------------------------------------
- * Function: H5PTcreate_vl
+ * Function: H5PTcreate_fl
*
- * Purpose: Creates a dataset containing a table of variable length records
- * and returns the Identifier of the table.
+ * Purpose: Creates a dataset containing a table and returns the Identifier
+ * of the table.
*
* Return: Success: table ID, Failure: Negative
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
- * Date: April 12, 2004
+ * Date: March 12, 2004
*
- * Comments: This function does not handle compression or fill data
+ * Comments: This function does not handle fill data
* currently. Fill data is not necessary because the
* table is initially of size 0.
*
@@ -179,38 +187,100 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
*
*-------------------------------------------------------------------------
*/
-hid_t H5PTcreate_vl ( hid_t loc_id,
- const char*dset_name,
- hsize_t chunk_size)
-{
- hid_t ret_value=H5I_BADID;
- hid_t vltype;
-
- /* check the arguments */
- if (dset_name == NULL) {
- goto out;
- }
- /* Create a variable length type that uses single bytes as its base type */
- vltype = H5Tvlen_create(H5T_NATIVE_UCHAR);
- if(vltype < 0)
- goto out;
+hid_t
+H5PTcreate_fl(hid_t loc_id, const char *dset_name, hid_t dtype_id, hsize_t chunk_size, int compression)
+{
+ htbl_t *table = NULL;
+ hid_t dset_id = H5I_INVALID_HID;
+ hid_t space_id = H5I_INVALID_HID;
+ hid_t plist_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t dims_chunk[1];
+ hsize_t maxdims[1];
+ hid_t ret_value = H5I_INVALID_HID;
+
+ /* check the arguments */
+ if (dset_name == NULL) {
+ goto error;
+ }
- if((ret_value=H5PTcreate_fl(loc_id, dset_name, vltype, chunk_size, 0)) < 0)
- goto out;
+ /* Register the packet table ID type if this is the first table created */
+ if (H5PT_ptable_id_type < 0)
+ if ((H5PT_ptable_id_type =
+ H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
+ goto error;
- /* close the vltype */
- if(H5Tclose(vltype) < 0)
- goto out;
+ /* Get memory for the table identifier */
+ table = (htbl_t *)HDmalloc(sizeof(htbl_t));
+ if (table == NULL) {
+ goto error;
+ }
+ table->dset_id = H5I_INVALID_HID;
+ table->type_id = H5I_INVALID_HID;
+
+ /* Create a simple data space with unlimited size */
+ dims[0] = 0;
+ dims_chunk[0] = chunk_size;
+ maxdims[0] = H5S_UNLIMITED;
+ if ((space_id = H5Screate_simple(1, dims, maxdims)) < 0)
+ goto error;
+
+ /* Modify dataset creation properties to enable chunking */
+ plist_id = H5Pcreate(H5P_DATASET_CREATE);
+ if (H5Pset_chunk(plist_id, 1, dims_chunk) < 0)
+ goto error;
+ if (compression >= 0 && compression <= 9)
+ if (H5Pset_deflate(plist_id, (unsigned)compression) < 0)
+ goto error;
+
+ /* Create the dataset. */
+ if ((dset_id = H5Dcreate2(loc_id, dset_name, dtype_id, space_id, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0)
+ goto error;
+
+ /* Create the table identifier */
+ table->dset_id = dset_id;
+
+ /* Terminate access to the data space. */
+ if (H5Sclose(space_id) < 0)
+ goto error;
+
+ /* End access to the property list */
+ if (H5Pclose(plist_id) < 0)
+ goto error;
+
+ /* Make a copy of caller's datatype and save it in the table structure.
+ It will be closed when the table is closed */
+ if ((table->type_id = H5Tcopy(dtype_id)) < 0)
+ goto error;
+
+ H5PT_create_index(table);
+ table->size = 0;
+
+ /* Get an ID for this table */
+ ret_value = H5Iregister(H5PT_ptable_id_type, table);
+ if (ret_value != H5I_INVALID_HID)
+ H5PT_ptable_count++;
+ else
+ H5PT_close(table);
+
+ return ret_value;
+
+error:
+ if (space_id != H5I_INVALID_HID)
+ H5Sclose(space_id);
+ if (plist_id != H5I_INVALID_HID)
+ H5Pclose(plist_id);
+ if (dset_id != H5I_INVALID_HID)
+ H5Dclose(dset_id);
+ if (table) {
+ if (table->type_id != H5I_INVALID_HID)
+ H5Tclose(table->type_id);
+ HDfree(table);
+ }
- return ret_value;
-
-out:
- if(ret_value != H5I_BADID)
- H5PTclose(ret_value);
- return H5I_BADID;
-}
-#endif /* H%_VLPT_ENABLED */
+ return ret_value;
+} /* H5PTcreate_fl */
/*-------------------------------------------------------------------------
* Function: H5PTopen
@@ -220,8 +290,8 @@ out:
*
* Return: Success: table ID, Failure: Negative
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 10, 2004
*
@@ -236,100 +306,105 @@ out:
*
*-------------------------------------------------------------------------
*/
-hid_t H5PTopen( hid_t loc_id,
- const char *dset_name )
+hid_t
+H5PTopen(hid_t loc_id, const char *dset_name)
{
- hid_t type_id=H5I_BADID;
- hid_t space_id=H5I_BADID;
- htbl_t * table = NULL;
- hid_t ret_value;
- hsize_t dims[1];
-
- /* check the arguments */
- if (dset_name == NULL) {
- goto out;
- }
-
- /* Register the packet table ID type if this is the first table created */
- if( H5PT_ptable_id_type < 0)
- if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
- goto out;
-
- table = (htbl_t *)HDmalloc(sizeof(htbl_t));
-
- if ( table == NULL ) {
- goto out;
- }
- table->dset_id = H5I_BADID;
- table->type_id = H5I_BADID;
-
- /* Open the dataset */
- if((table->dset_id = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
- goto out;
- if(table->dset_id < 0)
- goto out;
-
- /* Get the dataset's disk datatype */
- if((type_id = H5Dget_type(table->dset_id)) < 0)
- goto out;
-
- /* Get the table's native datatype */
- if((table->type_id = H5Tget_native_type(type_id, H5T_DIR_ASCEND)) < 0)
- goto out;
-
- if(H5Tclose(type_id) < 0)
- goto out;
-
- /* Initialize the current record pointer */
- if((H5PT_create_index(table)) < 0)
- goto out;
-
- /* Get number of records in table */
- if((space_id=H5Dget_space(table->dset_id)) < 0)
- goto out;
- if( H5Sget_simple_extent_dims( space_id, dims, NULL) < 0)
- goto out;
- if(H5Sclose(space_id) < 0)
- goto out;
- table->size = dims[0];
-
- /* Get an ID for this table */
- ret_value = H5Iregister(H5PT_ptable_id_type, table);
-
- if(ret_value != H5I_INVALID_HID)
- H5PT_ptable_count++;
- else
- H5PT_close(table);
-
- return ret_value;
-
-out:
- H5E_BEGIN_TRY
- H5Tclose(type_id);
- H5Sclose(space_id);
- if(table)
- {
- H5Dclose(table->dset_id);
- H5Tclose(table->type_id);
- HDfree(table);
- }
- H5E_END_TRY
- return H5I_INVALID_HID;
-}
+ hid_t type_id = H5I_INVALID_HID;
+ hid_t space_id = H5I_INVALID_HID;
+ htbl_t *table = NULL;
+ hsize_t dims[1];
+ hid_t ret_value = H5I_INVALID_HID;
+
+ /* check the arguments */
+ if (dset_name == NULL) {
+ goto error;
+ }
+
+ /* Register the packet table ID type if this is the first table created */
+ if (H5PT_ptable_id_type < 0)
+ if ((H5PT_ptable_id_type =
+ H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
+ goto error;
+
+ table = (htbl_t *)HDmalloc(sizeof(htbl_t));
+ if (table == NULL) {
+ goto error;
+ }
+ table->dset_id = H5I_INVALID_HID;
+ table->type_id = H5I_INVALID_HID;
+
+ /* Open the dataset */
+ if ((table->dset_id = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
+ goto error;
+
+ /* Get the dataset's disk datatype */
+ if ((type_id = H5Dget_type(table->dset_id)) < 0)
+ goto error;
+
+ /* Make a copy of the datatype obtained and save it in the table structure.
+ It will be closed when the table is closed */
+ if ((table->type_id = H5Tcopy(type_id)) < 0)
+ goto error;
+
+ /* Close the disk datatype */
+ if (H5Tclose(type_id) < 0)
+ goto error;
+ type_id = H5I_INVALID_HID;
+
+ /* Initialize the current record pointer */
+ if ((H5PT_create_index(table)) < 0)
+ goto error;
+
+ /* Get number of records in table */
+ if ((space_id = H5Dget_space(table->dset_id)) < 0)
+ goto error;
+ if (H5Sget_simple_extent_dims(space_id, dims, NULL) < 0)
+ goto error;
+ if (H5Sclose(space_id) < 0)
+ goto error;
+ space_id = H5I_INVALID_HID;
+
+ table->size = dims[0];
+
+ /* Get an ID for this table */
+ ret_value = H5Iregister(H5PT_ptable_id_type, table);
+
+ if (ret_value != H5I_INVALID_HID)
+ H5PT_ptable_count++;
+ else
+ H5PT_close(table);
+
+ return ret_value;
+
+error:
+ if (type_id != H5I_INVALID_HID)
+ H5Dclose(type_id);
+ if (space_id != H5I_INVALID_HID)
+ H5Sclose(space_id);
+ if (table) {
+ if (table->type_id != H5I_INVALID_HID)
+ H5Tclose(table->type_id);
+ if (table->dset_id != H5I_INVALID_HID)
+ H5Dclose(table->dset_id);
+ HDfree(table);
+ }
+
+ return ret_value;
+} /* H5PTopen */
/*-------------------------------------------------------------------------
* Function: H5PT_free_id
*
* Purpose: Free an id. Callback for H5Iregister_type.
*
- * Return: Success: 0, Failure: N/A
+ * Return: Success: SUCCEED, Failure: N/A
*-------------------------------------------------------------------------
*/
static herr_t
-H5PT_free_id(void *id)
+H5PT_free_id(void *id, void H5_ATTR_UNUSED **_ctx)
{
HDfree(id);
- return 0;
+ return SUCCEED;
}
/*-------------------------------------------------------------------------
@@ -338,10 +413,10 @@ H5PT_free_id(void *id)
* Purpose: Closes a table (i.e. cleans up all open resources used by a
* table).
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 10, 2004
*
@@ -352,33 +427,32 @@ H5PT_free_id(void *id)
*-------------------------------------------------------------------------
*/
static herr_t
-H5PT_close( htbl_t* table)
+H5PT_close(htbl_t *table)
{
- if(table == NULL)
- goto out;
+ if (table == NULL)
+ goto error;
- /* Close the dataset */
- if(H5Dclose(table->dset_id) < 0)
- goto out;
+ /* Close the dataset */
+ if (H5Dclose(table->dset_id) < 0)
+ goto error;
- /* Close the memory datatype */
- if(H5Tclose(table->type_id) < 0)
- goto out;
+ /* Close the memory datatype */
+ if (H5Tclose(table->type_id) < 0)
+ goto error;
- HDfree(table);
+ HDfree(table);
- return 0;
+ return SUCCEED;
-out:
- if(table)
- {
- H5E_BEGIN_TRY
- H5Dclose(table->dset_id);
- H5Tclose(table->type_id);
- H5E_END_TRY
- HDfree(table);
- }
- return -1;
+error:
+ if (table) {
+ H5E_BEGIN_TRY
+ H5Dclose(table->dset_id);
+ H5Tclose(table->type_id);
+ H5E_END_TRY
+ HDfree(table);
+ }
+ return FAIL;
}
/*-------------------------------------------------------------------------
@@ -387,10 +461,10 @@ out:
* Purpose: Closes a table (i.e. cleans up all open resources used by a
* table).
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 21, 2004
*
@@ -400,36 +474,35 @@ out:
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTclose( hid_t table_id )
+herr_t
+H5PTclose(hid_t table_id)
{
- htbl_t * table;
+ htbl_t *table;
- /* Remove the ID from the library */
- if((table = (htbl_t *)H5Iremove_verify(table_id, H5PT_ptable_id_type)) ==NULL)
- goto out;
+ /* Remove the ID from the library */
+ if ((table = (htbl_t *)H5Iremove_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
- /* If the library found the table, remove it */
- if( H5PT_close(table) < 0)
- goto out;
+ /* If the library found the table, remove it */
+ if (H5PT_close(table) < 0)
+ goto error;
- /* One less packet table open */
- H5PT_ptable_count--;
+ /* One less packet table open */
+ H5PT_ptable_count--;
- /* Remove the packet table type ID if no more packet */
- /* tables are open */
- if(H5PT_ptable_count == 0)
- {
- H5Idestroy_type(H5PT_ptable_id_type);
- H5PT_ptable_id_type = H5I_UNINIT;
- }
+ /* Remove the packet table type ID if no more packet */
+ /* tables are open */
+ if (H5PT_ptable_count == 0) {
+ H5Idestroy_type(H5PT_ptable_id_type);
+ H5PT_ptable_id_type = H5I_UNINIT;
+ }
- return 0;
+ return SUCCEED;
-out:
- return -1;
+error:
+ return FAIL;
}
-
/*-------------------------------------------------------------------------
*
* Write functions
@@ -442,10 +515,10 @@ out:
*
* Purpose: Appends packets to the end of a packet table
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -455,30 +528,28 @@ out:
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTappend( hid_t table_id,
- size_t nrecords,
- const void * data )
+herr_t
+H5PTappend(hid_t table_id, size_t nrecords, const void *data)
{
- htbl_t * table;
+ htbl_t *table;
- /* Find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- goto out;
+ /* Find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
- /* If we are asked to write 0 records, just do nothing */
- if(nrecords == 0)
- return 0;
+ /* If we are asked to write 0 records, just do nothing */
+ if (nrecords == 0)
+ return SUCCEED;
- if((H5TB_common_append_records(table->dset_id, table->type_id,
- nrecords, table->size, data)) < 0)
- goto out;
+ if ((H5TB_common_append_records(table->dset_id, table->type_id, nrecords, table->size, data)) < 0)
+ goto error;
- /* Update table size */
- table->size += nrecords;
- return 0;
+ /* Update table size */
+ table->size += nrecords;
+ return SUCCEED;
-out:
- return -1;
+error:
+ return FAIL;
}
/*-------------------------------------------------------------------------
@@ -488,17 +559,16 @@ out:
*-------------------------------------------------------------------------
*/
-
/*-------------------------------------------------------------------------
* Function: H5PTget_next
*
* Purpose: Reads packets starting at the current index and updates
* that index
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 10, 2004
*
@@ -509,30 +579,29 @@ out:
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTget_next( hid_t table_id,
- size_t nrecords,
- void * data)
+herr_t
+H5PTget_next(hid_t table_id, size_t nrecords, void *data)
{
- htbl_t * table;
+ htbl_t *table;
- /* Find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- goto out;
+ /* Find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
- /* If nrecords == 0, do nothing */
- if(nrecords == 0)
- return 0;
+ /* If nrecords == 0, do nothing */
+ if (nrecords == 0)
+ return SUCCEED;
- if((H5TB_common_read_records(table->dset_id, table->type_id,
- table->current_index, nrecords, table->size, data)) < 0)
- goto out;
+ if ((H5TB_common_read_records(table->dset_id, table->type_id, table->current_index, nrecords, table->size,
+ data)) < 0)
+ goto error;
- /* Update the current index */
- table->current_index += nrecords;
- return 0;
+ /* Update the current index */
+ table->current_index += nrecords;
+ return SUCCEED;
-out:
- return -1;
+error:
+ return FAIL;
}
/*-------------------------------------------------------------------------
@@ -540,10 +609,10 @@ out:
*
* Purpose: Reads packets from anywhere in a packet table
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -554,30 +623,27 @@ out:
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTread_packets( hid_t table_id,
- hsize_t start,
- size_t nrecords,
- void *data)
+herr_t
+H5PTread_packets(hid_t table_id, hsize_t start, size_t nrecords, void *data)
{
- htbl_t * table;
+ htbl_t *table;
- /* find the table struct from its ID */
- table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type);
- if(table == NULL)
- goto out;
+ /* find the table struct from its ID */
+ table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type);
+ if (table == NULL)
+ goto error;
- /* If nrecords == 0, do nothing */
- if(nrecords == 0)
- return 0;
+ /* If nrecords == 0, do nothing */
+ if (nrecords == 0)
+ return SUCCEED;
- if( H5TB_common_read_records(table->dset_id, table->type_id,
- start, nrecords, table->size, data) < 0)
- goto out;
+ if (H5TB_common_read_records(table->dset_id, table->type_id, start, nrecords, table->size, data) < 0)
+ goto error;
- return 0;
+ return SUCCEED;
-out:
- return -1;
+error:
+ return FAIL;
}
/*-------------------------------------------------------------------------
@@ -592,10 +658,10 @@ out:
*
* Purpose: Resets, sets, and gets the current record index for a packet table
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -608,40 +674,36 @@ out:
static herr_t
H5PT_create_index(htbl_t *table)
{
- if( table != NULL)
- {
- table->current_index = 0;
- return 0;
- }
- return -1;
+ if (table != NULL) {
+ table->current_index = 0;
+ return SUCCEED;
+ }
+ return FAIL;
}
static herr_t
-H5PT_set_index(htbl_t *table, hsize_t index)
+H5PT_set_index(htbl_t *table, hsize_t pt_index)
{
- /* Ensure index is valid */
- if( table != NULL )
- {
- if( index < table->size )
- {
- table->current_index = index;
- return 0;
+ /* Ensure index is valid */
+ if (table != NULL) {
+ if (pt_index < table->size) {
+ table->current_index = pt_index;
+ return SUCCEED;
+ }
}
- }
- return -1;
+ return FAIL;
}
static herr_t
-H5PT_get_index(htbl_t *table, hsize_t *index)
+H5PT_get_index(htbl_t *table, hsize_t *pt_index)
{
- /* Ensure index is valid */
- if( table != NULL )
- {
- if(index)
- *index = table->current_index;
- return 0;
- }
- return -1;
+ /* Ensure index is valid */
+ if (table != NULL) {
+ if (pt_index)
+ *pt_index = table->current_index;
+ return SUCCEED;
+ }
+ return FAIL;
}
/*-------------------------------------------------------------------------
@@ -649,10 +711,10 @@ H5PT_get_index(htbl_t *table, hsize_t *index)
*
* Purpose: Resets, sets, and gets the current record index for a packet table
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 23, 2004
*
@@ -662,37 +724,40 @@ H5PT_get_index(htbl_t *table, hsize_t *index)
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTcreate_index(hid_t table_id)
+herr_t
+H5PTcreate_index(hid_t table_id)
{
- htbl_t * table;
+ htbl_t *table;
- /* find the table struct from its ID */
- if((table = (htbl_t *) (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- return -1;
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)(htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ return FAIL;
- return H5PT_create_index(table);
+ return H5PT_create_index(table);
}
-herr_t H5PTset_index(hid_t table_id, hsize_t pt_index)
+herr_t
+H5PTset_index(hid_t table_id, hsize_t pt_index)
{
- htbl_t * table;
+ htbl_t *table;
- /* find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- return -1;
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ return FAIL;
- return H5PT_set_index(table, pt_index);
+ return H5PT_set_index(table, pt_index);
}
-herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
+herr_t
+H5PTget_index(hid_t table_id, hsize_t *pt_index)
{
- htbl_t * table;
+ htbl_t *table;
- /* find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- return -1;
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ return FAIL;
- return H5PT_get_index(table, pt_index);
+ return H5PT_get_index(table, pt_index);
}
/*-------------------------------------------------------------------------
@@ -705,12 +770,12 @@ herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
/*-------------------------------------------------------------------------
* Function: H5PTget_num_packets
*
- * Purpose: Returns by reference the number of packets in the dataset
+ * Purpose: Returns by reference the number of packets in the packet table
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -721,32 +786,33 @@ herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTget_num_packets( hid_t table_id, hsize_t *nrecords)
+herr_t
+H5PTget_num_packets(hid_t table_id, hsize_t *nrecords)
{
- htbl_t * table;
+ htbl_t *table;
- /* find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- goto out;
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
- if(nrecords)
- *nrecords = table->size;
+ if (nrecords)
+ *nrecords = table->size;
- return 0;
-out:
- return -1;
-}
+ return SUCCEED;
+error:
+ return FAIL;
+}
/*-------------------------------------------------------------------------
* Function: H5PTis_valid
*
* Purpose: Validates a table identifier
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: March 12, 2004
*
@@ -757,26 +823,26 @@ out:
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTis_valid(hid_t table_id)
+herr_t
+H5PTis_valid(hid_t table_id)
{
- /* find the table struct from its ID */
- if(H5Iobject_verify(table_id, H5PT_ptable_id_type) ==NULL)
- return -1;
+ /* find the table struct from its ID */
+ if (H5Iobject_verify(table_id, H5PT_ptable_id_type) == NULL)
+ return FAIL;
- return 0;
+ return SUCCEED;
}
-#ifdef H5_VLPT_ENABLED
/*-------------------------------------------------------------------------
* Function: H5PTis_varlen
*
* Purpose: Returns 1 if a table_id corresponds to a packet table of variable-
* length records or 0 for fixed-length records.
*
- * Return: True: 1, False: 0, Failure: -1
+ * Return: True: 1, False: 0, Failure: FAIL
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 14, 2004
*
@@ -787,24 +853,26 @@ herr_t H5PTis_valid(hid_t table_id)
*
*-------------------------------------------------------------------------
*/
-herr_t H5PTis_varlen(hid_t table_id)
+herr_t
+H5PTis_varlen(hid_t table_id)
{
- H5T_class_t type;
- htbl_t * table;
-
- /* find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- goto out;
-
- if((type = H5Tget_class( table->type_id )) == H5T_NO_CLASS)
- goto out;
-
- if( type == H5T_VLEN )
- return 1;
- else
- return 0;
-out:
- return -1;
+ H5T_class_t type;
+ htbl_t *table;
+
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
+
+ if ((type = H5Tget_class(table->type_id)) == H5T_NO_CLASS)
+ goto error;
+
+ if (type == H5T_VLEN)
+ return 1;
+ else
+ return 0;
+
+error:
+ return FAIL;
}
/*-------------------------------------------------------------------------
@@ -815,16 +883,16 @@ out:
*/
/*-------------------------------------------------------------------------
- * Function: H5PTfree_vlen_readbuff
+ * Function: H5PTfree_vlen_buff
*
* Purpose: Frees memory used when reading from a variable length packet
* table.
*
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
* -2 if memory was reclaimed but another error occurred
*
- * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
- * James Laird, jlaird@ncsa.uiuc.edu
+ * Programmer: Nat Furrer
+ * James Laird
*
* Date: April 12, 2004
*
@@ -836,38 +904,111 @@ out:
*-------------------------------------------------------------------------
*/
-herr_t H5PTfree_vlen_readbuff( hid_t table_id,
- size_t _bufflen,
- void * buff )
+herr_t
+H5PTfree_vlen_buff(hid_t table_id, size_t _bufflen, void *buff)
{
- hid_t space_id = H5I_BADID;
- htbl_t * table;
- hsize_t bufflen = _bufflen;
- herr_t ret_value;
+ hid_t space_id = H5I_INVALID_HID;
+ htbl_t *table;
+ hsize_t bufflen = _bufflen;
+ herr_t ret_value;
- /* find the table struct from its ID */
- if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
- goto out;
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
- if((space_id = H5Screate_simple(1, &bufflen, NULL)) < 0)
- goto out;
+ if ((space_id = H5Screate_simple(1, &bufflen, NULL)) < 0)
+ goto error;
- /* Free the memory. If this succeeds, ret_value should be 0. */
- if((ret_value = H5Dvlen_reclaim(table->type_id, space_id, H5P_DEFAULT, buff)) < 0)
- goto out;
+ /* Free the memory. If this succeeds, ret_value should be 0. */
+ if ((ret_value = H5Treclaim(table->type_id, space_id, H5P_DEFAULT, buff)) < 0)
+ goto error;
- /* If the dataspace cannot be closed, return -2 to indicate that memory */
- /* was freed successfully but an error still occurred. */
- if(H5Sclose(space_id) < 0)
- return -2;
+ /* If the dataspace cannot be closed, return -2 to indicate that memory */
+ /* was freed successfully but an error still occurred. */
+ if (H5Sclose(space_id) < 0)
+ return -2;
- return ret_value;
+ return ret_value;
-out:
- H5E_BEGIN_TRY
+error:
+ H5E_BEGIN_TRY
H5Sclose(space_id);
- H5E_END_TRY
- return -1;
+ H5E_END_TRY
+ return FAIL;
+} /* H5PTfree_vlen_buff */
+
+/*-------------------------------------------------------------------------
+ *
+ * Accessor functions
+ *
+ *-------------------------------------------------------------------------
+ */
+/*-------------------------------------------------------------------------
+ * Function: H5PTget_dataset
+ *
+ * Purpose: Returns the backend dataset of this packet table
+ *
+ * Return: Success: SUCCEED, Failure: FAIL
+ *
+ * Programmer: User's patch 0003, HDFFV-8623. -BMR
+ *
+ * Date: Feb 10, 2016
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5PTget_dataset(hid_t table_id)
+{
+ htbl_t *table;
+ hid_t ret_value = H5I_INVALID_HID;
+
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
+
+ ret_value = table->dset_id;
+
+error:
+
+ return ret_value;
}
-#endif /* H5_VLPT_ENABLED */
+/*-------------------------------------------------------------------------
+ * Function: H5PTget_type
+ *
+ * Purpose: Returns the backend type of this packet table
+ *
+ * Return: Success: datatype ID, Failure: H5I_INVALID_HID
+ *
+ * Programmer: User's patch 0003, HDFFV-8623. -BMR
+ *
+ * Date: Feb 10, 2016
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5PTget_type(hid_t table_id)
+{
+ htbl_t *table;
+ hid_t ret_value = H5I_INVALID_HID;
+
+ /* find the table struct from its ID */
+ if ((table = (htbl_t *)H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+ goto error;
+
+ ret_value = table->type_id;
+
+error:
+
+ return ret_value;
+}