mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
[svn-r29269] Purpose: Improve Packet Table library
Description: The Packet Table API used to have fixed-length and variable-length functions (i.e., H5PTcreate_fl and H5PTcreate_vl), but in 2006, the vlen functions were ifdef'ed out with VLPT_REMOVED, see HDFFV-442. The majority of this revision includes removing unused vlen stuff, adding various vlen tests, initial code cleanup, and first pass of commenting. Details: - Removed the VLPT_REMOVED ifdef, but keep H5PTis_varlen and the free function because they are useful or even needed, but the free function's name is changed to be more appropriate for both read/write buffers, i.e., H5PTfree_vlen_buff. - The new test file, test_packet_vlen.c, contains tests showing packet tables, containing various types of vlen data, can be created with the fixed-length function - Two accessor functions were added per HDFFV-8623/patch 003. /* Returns the ID of the dataset associated with the packet table */ hid_t H5PTget_dataset(hid_t table_id); /* Returns the ID of the datatype the packet table uses */ hid_t H5PTget_type(hid_t table_id); - Various cleanup: replacing 0/-1 with SUCCEED/FAIL and H5I_BADID with H5I_INVALID_HID, and removing many warnings. Platforms tested: Linux/32 2.6 (jam) Linux/64 (platypus) Darwin (osx1010test)
This commit is contained in:
parent
6e7e6bb3aa
commit
9592119ffd
554
hl/src/H5PT.c
554
hl/src/H5PT.c
@ -47,6 +47,136 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5PTcreate
|
||||
*
|
||||
* Purpose: Creates a dataset containing a table and returns the Identifier
|
||||
* of the table. (Copied mostly from H5PTcreate_fl)
|
||||
*
|
||||
* Return: Success: table ID, Failure: FAIL
|
||||
*
|
||||
* Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu (Author of H5PTcreate_fl)
|
||||
* James Laird, jlaird@ncsa.uiuc.edu (Author of H5PTcreate_fl)
|
||||
*
|
||||
* Date: March 12, 2004
|
||||
*
|
||||
* Comments: This function does not handle fill data
|
||||
* currently. Fill data is not necessary because the
|
||||
* 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(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_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;
|
||||
|
||||
if((table->type_id = H5Tcopy(dtype_id)) < 0)
|
||||
goto error;
|
||||
|
||||
if((table->type_id = H5Tget_native_type(table->type_id, H5T_DIR_DEFAULT)) < 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 */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5PTcreate_fl
|
||||
*
|
||||
@ -76,69 +206,73 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
|
||||
int compression )
|
||||
{
|
||||
htbl_t * table = NULL;
|
||||
hid_t dset_id = H5I_BADID;
|
||||
hid_t space_id = H5I_BADID;
|
||||
hid_t plist_id = H5I_BADID;
|
||||
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;
|
||||
hid_t ret_value = H5I_INVALID_HID;
|
||||
|
||||
/* check the arguments */
|
||||
if (dset_name == NULL) {
|
||||
goto out;
|
||||
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 out;
|
||||
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 out;
|
||||
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 out;
|
||||
goto error;
|
||||
if(compression >= 0 && compression <= 9)
|
||||
if(H5Pset_deflate(plist_id, (unsigned)compression) < 0)
|
||||
goto out;
|
||||
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 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;
|
||||
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;
|
||||
|
||||
if((table->type_id = H5Tcopy(dtype_id)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
if((table->type_id = H5Tget_native_type(table->type_id, H5T_DIR_DEFAULT)) < 0)
|
||||
goto out;
|
||||
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
|
||||
@ -146,71 +280,22 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
|
||||
|
||||
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;
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
#ifdef H5_VLPT_ENABLED
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5PTcreate_vl
|
||||
*
|
||||
* Purpose: Creates a dataset containing a table of variable length records
|
||||
* 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
|
||||
*
|
||||
* Date: April 12, 2004
|
||||
*
|
||||
* Comments: This function does not handle compression or fill data
|
||||
* currently. Fill data is not necessary because the
|
||||
* table is initially of size 0.
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
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;
|
||||
|
||||
if((ret_value=H5PTcreate_fl(loc_id, dset_name, vltype, chunk_size, 0)) < 0)
|
||||
goto out;
|
||||
|
||||
/* close the vltype */
|
||||
if(H5Tclose(vltype) < 0)
|
||||
goto out;
|
||||
|
||||
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
|
||||
@ -239,58 +324,59 @@ out:
|
||||
hid_t H5PTopen( hid_t loc_id,
|
||||
const char *dset_name )
|
||||
{
|
||||
hid_t type_id=H5I_BADID;
|
||||
hid_t space_id=H5I_BADID;
|
||||
hid_t type_id=H5I_INVALID_HID;
|
||||
hid_t space_id=H5I_INVALID_HID;
|
||||
htbl_t * table = NULL;
|
||||
hid_t ret_value;
|
||||
hsize_t dims[1];
|
||||
hid_t ret_value = H5I_INVALID_HID;
|
||||
|
||||
/* check the arguments */
|
||||
if (dset_name == NULL) {
|
||||
goto out;
|
||||
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 out;
|
||||
goto error;
|
||||
|
||||
table = (htbl_t *)HDmalloc(sizeof(htbl_t));
|
||||
|
||||
if ( table == NULL ) {
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
table->dset_id = H5I_BADID;
|
||||
table->type_id = H5I_BADID;
|
||||
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 out;
|
||||
if(table->dset_id < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Get the dataset's disk datatype */
|
||||
if((type_id = H5Dget_type(table->dset_id)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Get the table's native datatype */
|
||||
if((table->type_id = H5Tget_native_type(type_id, H5T_DIR_ASCEND)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Close the disk datatype */
|
||||
if(H5Tclose(type_id) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
type_id = H5I_INVALID_HID;
|
||||
|
||||
/* Initialize the current record pointer */
|
||||
if((H5PT_create_index(table)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* 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;
|
||||
goto error;
|
||||
if(H5Sget_simple_extent_dims(space_id, dims, NULL) < 0)
|
||||
goto error;
|
||||
if(H5Sclose(space_id) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
space_id = H5I_INVALID_HID;
|
||||
|
||||
table->size = dims[0];
|
||||
|
||||
/* Get an ID for this table */
|
||||
@ -303,33 +389,36 @@ hid_t H5PTopen( hid_t loc_id,
|
||||
|
||||
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;
|
||||
}
|
||||
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)
|
||||
{
|
||||
HDfree(id);
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -338,7 +427,7 @@ 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
|
||||
@ -355,21 +444,21 @@ static herr_t
|
||||
H5PT_close( htbl_t* table)
|
||||
{
|
||||
if(table == NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Close the dataset */
|
||||
if(H5Dclose(table->dset_id) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Close the memory datatype */
|
||||
if(H5Tclose(table->type_id) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
HDfree(table);
|
||||
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
if(table)
|
||||
{
|
||||
H5E_BEGIN_TRY
|
||||
@ -378,7 +467,7 @@ out:
|
||||
H5E_END_TRY
|
||||
HDfree(table);
|
||||
}
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -387,7 +476,7 @@ 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
|
||||
@ -406,11 +495,11 @@ herr_t H5PTclose( hid_t table_id )
|
||||
|
||||
/* Remove the ID from the library */
|
||||
if((table = (htbl_t *)H5Iremove_verify(table_id, H5PT_ptable_id_type)) ==NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* If the library found the table, remove it */
|
||||
if( H5PT_close(table) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* One less packet table open */
|
||||
H5PT_ptable_count--;
|
||||
@ -423,10 +512,10 @@ herr_t H5PTclose( hid_t table_id )
|
||||
H5PT_ptable_id_type = H5I_UNINIT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
return -1;
|
||||
error:
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
@ -442,7 +531,7 @@ 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
|
||||
@ -463,22 +552,22 @@ herr_t H5PTappend( hid_t table_id,
|
||||
|
||||
/* Find the table struct from its ID */
|
||||
if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* If we are asked to write 0 records, just do nothing */
|
||||
if(nrecords == 0)
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
if((H5TB_common_append_records(table->dset_id, table->type_id,
|
||||
nrecords, table->size, data)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Update table size */
|
||||
table->size += nrecords;
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
return -1;
|
||||
error:
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -495,7 +584,7 @@ out:
|
||||
* 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
|
||||
@ -517,22 +606,22 @@ herr_t H5PTget_next( hid_t table_id,
|
||||
|
||||
/* Find the table struct from its ID */
|
||||
if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* If nrecords == 0, do nothing */
|
||||
if(nrecords == 0)
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
if((H5TB_common_read_records(table->dset_id, table->type_id,
|
||||
table->current_index, nrecords, table->size, data)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Update the current index */
|
||||
table->current_index += nrecords;
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
return -1;
|
||||
error:
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -540,7 +629,7 @@ 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
|
||||
@ -564,20 +653,20 @@ herr_t H5PTread_packets( hid_t table_id,
|
||||
/* find the table struct from its ID */
|
||||
table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type);
|
||||
if(table == NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* If nrecords == 0, do nothing */
|
||||
if(nrecords == 0)
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
if( H5TB_common_read_records(table->dset_id, table->type_id,
|
||||
start, nrecords, table->size, data) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
return -1;
|
||||
error:
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -592,7 +681,7 @@ 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
|
||||
@ -611,37 +700,37 @@ H5PT_create_index(htbl_t *table)
|
||||
if( table != NULL)
|
||||
{
|
||||
table->current_index = 0;
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
}
|
||||
return -1;
|
||||
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 )
|
||||
if( pt_index < table->size )
|
||||
{
|
||||
table->current_index = index;
|
||||
return 0;
|
||||
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;
|
||||
if(pt_index)
|
||||
*pt_index = table->current_index;
|
||||
return SUCCEED;
|
||||
}
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -649,7 +738,7 @@ 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
|
||||
@ -668,7 +757,7 @@ herr_t H5PTcreate_index(hid_t table_id)
|
||||
|
||||
/* find the table struct from its ID */
|
||||
if((table = (htbl_t *) (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
return H5PT_create_index(table);
|
||||
}
|
||||
@ -679,7 +768,7 @@ herr_t H5PTset_index(hid_t table_id, hsize_t pt_index)
|
||||
|
||||
/* find the table struct from its ID */
|
||||
if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
return H5PT_set_index(table, pt_index);
|
||||
}
|
||||
@ -690,7 +779,7 @@ herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
|
||||
|
||||
/* find the table struct from its ID */
|
||||
if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
return H5PT_get_index(table, pt_index);
|
||||
}
|
||||
@ -705,9 +794,9 @@ 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
|
||||
@ -727,14 +816,15 @@ herr_t H5PTget_num_packets( hid_t table_id, hsize_t *nrecords)
|
||||
|
||||
/* find the table struct from its ID */
|
||||
if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
if(nrecords)
|
||||
*nrecords = table->size;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
return -1;
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
@ -743,7 +833,7 @@ out:
|
||||
*
|
||||
* 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
|
||||
@ -761,19 +851,18 @@ 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;
|
||||
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
|
||||
@ -794,17 +883,18 @@ herr_t H5PTis_varlen(hid_t table_id)
|
||||
|
||||
/* find the table struct from its ID */
|
||||
if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
if((type = H5Tget_class( table->type_id )) == H5T_NO_CLASS)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
if( type == H5T_VLEN )
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
out:
|
||||
return -1;
|
||||
|
||||
error:
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -815,12 +905,12 @@ 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
|
||||
@ -836,25 +926,25 @@ out:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
herr_t H5PTfree_vlen_readbuff( hid_t table_id,
|
||||
herr_t H5PTfree_vlen_buff( hid_t table_id,
|
||||
size_t _bufflen,
|
||||
void * buff )
|
||||
{
|
||||
hid_t space_id = H5I_BADID;
|
||||
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;
|
||||
goto error;
|
||||
|
||||
if((space_id = H5Screate_simple(1, &bufflen, NULL)) < 0)
|
||||
goto out;
|
||||
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;
|
||||
goto error;
|
||||
|
||||
/* If the dataspace cannot be closed, return -2 to indicate that memory */
|
||||
/* was freed successfully but an error still occurred. */
|
||||
@ -863,11 +953,83 @@ herr_t H5PTfree_vlen_readbuff( hid_t table_id,
|
||||
|
||||
return ret_value;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5E_BEGIN_TRY
|
||||
H5Sclose(space_id);
|
||||
H5E_END_TRY
|
||||
return -1;
|
||||
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;
|
||||
}
|
||||
|
@ -22,74 +22,58 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Create/Open/Close functions
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* NOTE: H5PTcreate is replacing H5PTcreate_fl for better name due to the
|
||||
removal of H5PTcreate_vl. H5PTcreate_fl may be retired in 1.8.19. */
|
||||
H5_HLDLL hid_t H5PTcreate(hid_t loc_id, const char *dset_name,
|
||||
hid_t dtype_id, hsize_t chunk_size, hid_t plist_id);
|
||||
|
||||
H5_HLDLL hid_t H5PTcreate_fl ( hid_t loc_id,
|
||||
const char *dset_name,
|
||||
hid_t dtype_id,
|
||||
hsize_t chunk_size,
|
||||
int compression );
|
||||
H5_HLDLL hid_t H5PTopen(hid_t loc_id, const char *dset_name);
|
||||
|
||||
#ifdef VLPT_REMOVED
|
||||
H5_HLDLL hid_t H5PTcreate_vl ( hid_t loc_id,
|
||||
const char *dset_name,
|
||||
hsize_t chunk_size );
|
||||
#endif /* VLPT_REMOVED */
|
||||
H5_HLDLL herr_t H5PTclose(hid_t table_id);
|
||||
|
||||
H5_HLDLL hid_t H5PTopen( hid_t loc_id,
|
||||
const char *dset_name );
|
||||
|
||||
H5_HLDLL herr_t H5PTclose( hid_t table_id );
|
||||
/* This function may be removed from the packet table in release 1.8.19. */
|
||||
H5_HLDLL hid_t H5PTcreate_fl(hid_t loc_id, const char *dset_name,
|
||||
hid_t dtype_id, hsize_t chunk_size, int compression);
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Write functions
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
H5_HLDLL herr_t H5PTappend( hid_t table_id,
|
||||
size_t nrecords,
|
||||
const void * data );
|
||||
H5_HLDLL herr_t H5PTappend(hid_t table_id, size_t nrecords, const void *data);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Read functions
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5_HLDLL herr_t H5PTget_next(hid_t table_id, size_t nrecords, void * data);
|
||||
|
||||
H5_HLDLL herr_t H5PTread_packets(hid_t table_id, hsize_t start,
|
||||
size_t nrecords, void *data);
|
||||
|
||||
H5_HLDLL herr_t H5PTget_next( hid_t table_id,
|
||||
size_t nrecords,
|
||||
void * data );
|
||||
/*-------------------------------------------------------------------------
|
||||
* Inquiry functions
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
H5_HLDLL herr_t H5PTget_num_packets(hid_t table_id, hsize_t *nrecords);
|
||||
|
||||
H5_HLDLL herr_t H5PTread_packets( hid_t table_id,
|
||||
hsize_t start,
|
||||
size_t nrecords,
|
||||
void *data );
|
||||
H5_HLDLL herr_t H5PTis_valid(hid_t table_id);
|
||||
|
||||
H5_HLDLL herr_t H5PTis_varlen(hid_t table_id);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* Inquiry functions
|
||||
* Accessor functions
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
H5_HLDLL hid_t H5PTget_dataset(hid_t table_id);
|
||||
|
||||
H5_HLDLL herr_t H5PTget_num_packets( hid_t table_id,
|
||||
hsize_t *nrecords );
|
||||
|
||||
H5_HLDLL herr_t H5PTis_valid( hid_t table_id );
|
||||
|
||||
#ifdef VLPT_REMOVED
|
||||
H5_HLDLL herr_t H5PTis_varlen( hid_t table_id );
|
||||
#endif /* VLPT_REMOVED */
|
||||
H5_HLDLL hid_t H5PTget_type(hid_t table_id);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
@ -113,11 +97,9 @@ H5_HLDLL herr_t H5PTget_index( hid_t table_id,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifdef VLPT_REMOVED
|
||||
H5_HLDLL herr_t H5PTfree_vlen_readbuff( hid_t table_id,
|
||||
H5_HLDLL herr_t H5PTfree_vlen_buff( hid_t table_id,
|
||||
size_t bufflen,
|
||||
void * buff );
|
||||
#endif /* VLPT_REMOVED */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -49,4 +49,7 @@ CHECK_CLEANFILES+=combine_tables[1-2].h5 test_ds[1-9].h5 test_ds10.h5 \
|
||||
test_packet_table.h5 test_packet_compress.h5 test_detach.h5 \
|
||||
test_dectris.h5
|
||||
|
||||
# Sources for test_packet executable
|
||||
test_packet_SOURCES=test_packet.c test_packet_vlen.c
|
||||
|
||||
include $(top_srcdir)/config/conclude.am
|
||||
|
@ -36,5 +36,7 @@
|
||||
/* Implements verbose 'assert' with 'goto error' exit */
|
||||
#define VERIFY(condition, string) do { if (!(condition)) FAIL_PUTS_ERROR(string) } while(0)
|
||||
|
||||
int test_packet_table_with_varlen(void);
|
||||
|
||||
#endif /* _H5HLTEST_H */
|
||||
|
||||
|
@ -31,9 +31,6 @@
|
||||
#define TEST_FILE_NAME "test_packet_table.h5"
|
||||
#define TEST_COMPRESS_FILE "test_packet_compress.h5"
|
||||
#define PT_NAME "Test Packet Table"
|
||||
#ifdef VLPT_REMOVED
|
||||
#define VL_TABLE_NAME "Varlen Test Table"
|
||||
#endif /* VLPT_REMOVED */
|
||||
#define H5TB_TABLE_NAME "Table1"
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -77,9 +74,9 @@ static int cmp_par(size_t i, size_t j, particle_t *rbuf, particle_t *wbuf )
|
||||
rbuf[i].longi != wbuf[j].longi ||
|
||||
!H5_FLT_ABS_EQUAL(rbuf[i].pressure,wbuf[j].pressure) ||
|
||||
!H5_DBL_ABS_EQUAL(rbuf[i].temperature,wbuf[j].temperature) ) {
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -95,22 +92,22 @@ make_particle_type(void)
|
||||
|
||||
/* Create the memory data type. */
|
||||
if ((type_id = H5Tcreate (H5T_COMPOUND, type_size )) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
/* Insert fields. */
|
||||
string_type = H5Tcopy( H5T_C_S1 );
|
||||
H5Tset_size( string_type, (size_t)16 );
|
||||
|
||||
if ( H5Tinsert(type_id, "Name", HOFFSET(particle_t, name) , string_type ) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
if ( H5Tinsert(type_id, "Lat", HOFFSET(particle_t, lati) , H5T_NATIVE_INT ) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
if ( H5Tinsert(type_id, "Long", HOFFSET(particle_t, longi) , H5T_NATIVE_INT ) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
if ( H5Tinsert(type_id, "Pressure", HOFFSET(particle_t, pressure) , H5T_NATIVE_FLOAT ) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
if ( H5Tinsert(type_id, "Temperature", HOFFSET(particle_t, temperature) , H5T_NATIVE_DOUBLE ) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
return type_id;
|
||||
}
|
||||
@ -156,9 +153,9 @@ static int create_hl_table(hid_t fid)
|
||||
chunk_size, fill_data, compress, testPart );
|
||||
|
||||
if(status<0)
|
||||
return -1;
|
||||
return FAIL;
|
||||
else
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
}
|
||||
|
||||
|
||||
@ -188,23 +185,21 @@ static int test_create_close(hid_t fid)
|
||||
table = H5PTcreate_fl(fid, PT_NAME, part_t, (hsize_t)100, -1);
|
||||
H5Tclose(part_t);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
#ifdef VLPT_REMOVED
|
||||
goto error;
|
||||
if( H5PTis_varlen(table) != 0)
|
||||
goto out;
|
||||
#endif /* VLPT_REMOVED */
|
||||
goto error;
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -224,23 +219,22 @@ static int test_open(hid_t fid)
|
||||
/* Open the table */
|
||||
table = H5PTopen(fid, PT_NAME);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
#ifdef VLPT_REMOVED
|
||||
goto error;
|
||||
if( H5PTis_varlen(table) != 0)
|
||||
goto out;
|
||||
#endif /* VLPT_REMOVED */
|
||||
goto error;
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
if (table > 0) H5PTclose(table);
|
||||
H5_FAILED();
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -261,52 +255,52 @@ static int test_append(hid_t fid)
|
||||
/* Open the table */
|
||||
table = H5PTopen(fid, PT_NAME);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Count the number of packets in the table */
|
||||
err = H5PTget_num_packets(table, &count);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
/* There should be 0 records in the table */
|
||||
if( count != 0 )
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Append one particle */
|
||||
err = H5PTappend(table, (size_t)1, &(testPart[0]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Append several particles */
|
||||
err = H5PTappend(table, (size_t)6, &(testPart[1]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Append one more particle */
|
||||
err = H5PTappend(table, (size_t)1, &(testPart[7]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Count the number of packets in the table */
|
||||
err = H5PTget_num_packets(table, &count);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
/* There should be 8 records in the table now */
|
||||
if( count != 8 )
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if( H5PTis_valid(table) < 0)
|
||||
if( H5PTis_valid(table) > 0)
|
||||
H5PTclose(table);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -328,44 +322,44 @@ static int test_read(hid_t fid)
|
||||
/* Open the table */
|
||||
table = H5PTopen(fid, PT_NAME);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Read several particles */
|
||||
err = H5PTread_packets(table, (hsize_t)0, 3, &(readBuf[0]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Read one particle */
|
||||
err = H5PTread_packets(table, (hsize_t)3, 1, &(readBuf[3]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Read several particles */
|
||||
err = H5PTread_packets(table, (hsize_t)4, (NRECORDS - 4 ), &(readBuf[4]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Ensure that particles were read correctly */
|
||||
for(c=0; c<NRECORDS; c++)
|
||||
{
|
||||
if( cmp_par(c%8, c, testPart, readBuf) != 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if( H5PTis_valid(table) < 0)
|
||||
if( H5PTis_valid(table) > 0)
|
||||
H5PTclose(table);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -389,21 +383,21 @@ static int test_get_next(hid_t fid)
|
||||
/* Open the table */
|
||||
table = H5PTopen(fid, PT_NAME);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Read several particles consecutively */
|
||||
for(c=0; c < NRECORDS; c++)
|
||||
{
|
||||
err = H5PTget_next(table, 1, &readBuf[c]);
|
||||
err = H5PTget_next(table, (size_t)1, &readBuf[c]);
|
||||
if(err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Ensure that particles were read correctly */
|
||||
for(c=0; c<NRECORDS; c++)
|
||||
{
|
||||
if( cmp_par(c, c, testPart, readBuf) != 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
H5PTcreate_index(table);
|
||||
@ -411,31 +405,31 @@ static int test_get_next(hid_t fid)
|
||||
/* Read particles two by two */
|
||||
for(c=0; c < NRECORDS / 2; c++)
|
||||
{
|
||||
err = H5PTget_next(table, 2, &readBuf2[c * 2]);
|
||||
err = H5PTget_next(table, (size_t)2, &readBuf2[c * 2]);
|
||||
if(err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Ensure that particles were read correctly */
|
||||
for(c=0; c<NRECORDS; c++)
|
||||
{
|
||||
if( cmp_par(c, c, testPart, readBuf2) != 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if( H5PTis_valid(table) < 0)
|
||||
if( H5PTis_valid(table) > 0)
|
||||
H5PTclose(table);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -466,7 +460,7 @@ static int test_big_table(hid_t fid)
|
||||
table = H5PTcreate_fl(fid, "Packet Test Dataset2", part_t, (hsize_t)33, -1);
|
||||
H5Tclose(part_t);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Add many particles */
|
||||
for(c = 0; c < BIG_TABLE_SIZE ; c+=8)
|
||||
@ -474,223 +468,45 @@ static int test_big_table(hid_t fid)
|
||||
/* Append eight particles at once*/
|
||||
err = H5PTappend(table, (size_t)8, &(testPart[0]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Count the number of packets in the table */
|
||||
err = H5PTget_num_packets(table, &count);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if( count != BIG_TABLE_SIZE )
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Read particles to ensure that all of them were written correctly */
|
||||
/* Also, ensure that H5PTcreate_fl set the current packet to */
|
||||
/* the first packet in the table */
|
||||
for(c = 0; c < BIG_TABLE_SIZE; c++)
|
||||
{
|
||||
err = H5PTget_next(table, 1, &readPart);
|
||||
err = H5PTget_next(table, (size_t)1, &readPart);
|
||||
if(err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Ensure that particles were read correctly */
|
||||
if( cmp_par(c % 8, 0, testPart, &readPart) != 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if( H5PTis_valid(table) < 0)
|
||||
if( H5PTis_valid(table) > 0)
|
||||
H5PTclose(table);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
#ifdef VLPT_REMOVED
|
||||
/*-------------------------------------------------------------------------
|
||||
* test_varlen
|
||||
*
|
||||
* Tests creation, opening, closing, writing, reading, etc. on a
|
||||
* variable-length packet table.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int test_varlen(hid_t fid)
|
||||
{
|
||||
herr_t err;
|
||||
hid_t table=H5I_BADID;
|
||||
hsize_t count;
|
||||
|
||||
/* Buffers to hold data */
|
||||
hvl_t writeBuffer[NRECORDS];
|
||||
hvl_t readBuffer[NRECORDS];
|
||||
|
||||
/* This example has three different sizes of "record": longs, shorts, and particles */
|
||||
long longBuffer[NRECORDS];
|
||||
short shortBuffer[NRECORDS];
|
||||
int x;
|
||||
|
||||
TESTING("variable-length packet tables");
|
||||
|
||||
/* Initialize buffers */
|
||||
for(x=0; x<NRECORDS; x++)
|
||||
{
|
||||
longBuffer[x] = -x;
|
||||
shortBuffer[x] = x;
|
||||
}
|
||||
|
||||
/* Fill the write buffer with a mix of variable types */
|
||||
for(x=0; x<8; x+=4)
|
||||
{
|
||||
writeBuffer[x].len = sizeof(long);
|
||||
writeBuffer[x].p = &(longBuffer[x]);
|
||||
writeBuffer[x+1].len = sizeof(short);
|
||||
writeBuffer[x+1].p = &(shortBuffer[x+1]);
|
||||
writeBuffer[x+2].len = sizeof(long);
|
||||
writeBuffer[x+2].p = &(longBuffer[x+2]);
|
||||
writeBuffer[x+3].len = sizeof(particle_t);
|
||||
writeBuffer[x+3].p = &(testPart[x+3]);
|
||||
}
|
||||
|
||||
/* Create the table */
|
||||
table = H5PTcreate_vl(fid, VL_TABLE_NAME, (hsize_t)1001);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
if( H5PTis_varlen(table) != 1)
|
||||
goto out;
|
||||
|
||||
/* Count the number of packets in the table */
|
||||
err = H5PTget_num_packets(table, &count);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
if( count != 0 )
|
||||
goto out;
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
|
||||
/* Re-open the table */
|
||||
table = H5PTopen(fid, VL_TABLE_NAME);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
if( H5PTis_varlen(table) != 1)
|
||||
goto out;
|
||||
|
||||
/* Count the number of packets in the table */
|
||||
err = H5PTget_num_packets(table, &count);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
if( count != 0 )
|
||||
goto out;
|
||||
|
||||
/* Add several variable-length packets */
|
||||
err = H5PTappend(table, (size_t)8, writeBuffer );
|
||||
if(err < 0)
|
||||
goto out;
|
||||
|
||||
/* Read them back */
|
||||
err = H5PTread_packets(table, (hsize_t)0, 4, &(readBuffer[0]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
err = H5PTread_packets(table, (hsize_t)4, 1, &(readBuffer[4]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
err = H5PTread_packets(table, (hsize_t)5, (NRECORDS - 5 ), &(readBuffer[5]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
|
||||
/* Ensure that packets were read correctly */
|
||||
for(x=0; x<NRECORDS; x++)
|
||||
{
|
||||
if( readBuffer[x].len != writeBuffer[x%4].len)
|
||||
goto out;
|
||||
switch(x%4)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if( *((long*)(readBuffer[x].p)) != *((long*)(writeBuffer[x].p)))
|
||||
goto out;
|
||||
break;
|
||||
case 1:
|
||||
if( *((short*)(readBuffer[x].p)) != *((short*)(writeBuffer[x].p)))
|
||||
goto out;
|
||||
break;
|
||||
case 3:
|
||||
if( cmp_par(0, 0, readBuffer[x].p, writeBuffer[x].p) < 0)
|
||||
goto out;
|
||||
break;
|
||||
default:
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* Free memory used by read buffer */
|
||||
if(H5PTfree_vlen_readbuff(table, NRECORDS, readBuffer) <0)
|
||||
goto out;
|
||||
|
||||
/* Read packets back using get_next */
|
||||
for(x=0; x < NRECORDS; x++)
|
||||
{
|
||||
err = H5PTget_next(table, 1, &readBuffer[x]);
|
||||
if(err < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Ensure that packets were read correctly */
|
||||
for(x=0; x<NRECORDS; x++)
|
||||
{
|
||||
if( readBuffer[x].len != writeBuffer[x%4].len)
|
||||
goto out;
|
||||
switch(x%4)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
if( *((long*)(readBuffer[x].p)) != *((long*)(writeBuffer[x].p)))
|
||||
goto out;
|
||||
break;
|
||||
case 1:
|
||||
if( *((short*)(readBuffer[x].p)) != *((short*)(writeBuffer[x].p)))
|
||||
goto out;
|
||||
break;
|
||||
case 3:
|
||||
if( cmp_par(0, 0, readBuffer[x].p, writeBuffer[x].p) < 0)
|
||||
goto out;
|
||||
break;
|
||||
default:
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* Free memory used by read buffer */
|
||||
if(H5PTfree_vlen_readbuff(table, NRECORDS, readBuffer) <0)
|
||||
goto out;
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
|
||||
out:
|
||||
H5_FAILED();
|
||||
H5E_BEGIN_TRY
|
||||
H5PTclose(table);
|
||||
H5E_END_TRY
|
||||
return -1;
|
||||
}
|
||||
#endif /* VLPT_REMOVED */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* test_opaque
|
||||
*
|
||||
@ -710,50 +526,50 @@ static int test_opaque(hid_t fid)
|
||||
|
||||
/* Create an opaque datatype for the particle struct */
|
||||
if ((part_t = H5Tcreate (H5T_OPAQUE, sizeof(particle_t) )) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
HDassert(part_t != -1);
|
||||
|
||||
/* Tag the opaque datatype */
|
||||
if ( H5Tset_tag(part_t, "Opaque Particle" ) < 0)
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
/* Create a new table */
|
||||
table = H5PTcreate_fl(fid, "Packet Test Dataset3", part_t, (hsize_t)100, -1);
|
||||
H5Tclose(part_t);
|
||||
if( H5PTis_valid(table) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Append several particles, starting at particle 1 */
|
||||
err = H5PTappend(table, (size_t)(NRECORDS - 1), &(testPart[1]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Read the particles back */
|
||||
err = H5PTread_packets(table, (hsize_t)0, 7, &(readBuf[0]));
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Ensure that particles were read correctly */
|
||||
for(c=0; c<NRECORDS - 1; c++)
|
||||
{
|
||||
if( cmp_par(c+1, c, testPart, readBuf) != 0)
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Close the table */
|
||||
err = H5PTclose(table);
|
||||
if( err < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if( H5PTis_valid(table) < 0)
|
||||
if( H5PTis_valid(table) > 0)
|
||||
H5PTclose(table);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -767,12 +583,12 @@ static int test_opaque(hid_t fid)
|
||||
static int
|
||||
test_compress(void)
|
||||
{
|
||||
hid_t fid1 = -1;
|
||||
hid_t fid1 = H5I_INVALID_HID;
|
||||
herr_t err;
|
||||
hid_t table = -1;
|
||||
hid_t part_t = -1;
|
||||
hid_t dset_id = -1;
|
||||
hid_t plist_id = -1;
|
||||
hid_t table = H5I_INVALID_HID;
|
||||
hid_t part_t = H5I_INVALID_HID;
|
||||
hid_t dset_id = H5I_INVALID_HID;
|
||||
hid_t plist_id = H5I_INVALID_HID;
|
||||
size_t c;
|
||||
size_t num_elems = 1;
|
||||
unsigned filter_vals[1];
|
||||
@ -812,7 +628,7 @@ test_compress(void)
|
||||
HDmemset(readPart, 0, sizeof(readPart));
|
||||
for(c = 0; c < BIG_TABLE_SIZE; c++)
|
||||
{
|
||||
err = H5PTget_next(table, 1, readPart);
|
||||
err = H5PTget_next(table, (size_t)1, readPart);
|
||||
if(err < 0) TEST_ERROR;
|
||||
|
||||
/* Ensure that particles were read correctly */
|
||||
@ -881,7 +697,7 @@ test_compress(void)
|
||||
if( err < 0) TEST_ERROR;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
@ -892,7 +708,7 @@ error:
|
||||
H5Fclose(fid1);
|
||||
} H5E_END_TRY
|
||||
H5_FAILED();
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -932,54 +748,54 @@ static int test_rw_nonnative_dt(hid_t fid)
|
||||
ptable = H5PTcreate_fl(fid, "Packet Test Dataset, Non-native", H5T_STD_I32LE, (hsize_t)100, -1);
|
||||
}
|
||||
if(ptable == H5I_INVALID_HID)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Write one packet to the packet table */
|
||||
if( (err = H5PTappend(ptable, (hsize_t)1, &(writeBuffer[0]))) < 0 )
|
||||
goto out;
|
||||
if( (err = H5PTappend(ptable, (size_t)1, &(writeBuffer[0]))) < 0 )
|
||||
goto error;
|
||||
|
||||
/* Write several packets to the packet table */
|
||||
if( (err = H5PTappend(ptable, (hsize_t)4, &(writeBuffer[1]))) < 0)
|
||||
goto out;
|
||||
if( (err = H5PTappend(ptable, (size_t)4, &(writeBuffer[1]))) < 0)
|
||||
goto error;
|
||||
|
||||
if( (err = H5PTclose(ptable)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Open the Packet table */
|
||||
if( (ptable = H5PTopen(fid, "Packet Test Dataset, Non-native")) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Get the number of packets in the packet table. This should be five. */
|
||||
if( (err = H5PTget_num_packets(ptable, &count)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
if( (int)count != 5 )
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Initialize packet table's "current record" */
|
||||
if( (err = H5PTcreate_index(ptable)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Iterate through packets, read each one back */
|
||||
for(x=0; x<5; x++) {
|
||||
if( (err = H5PTget_next(ptable, (hsize_t)1, &(readBuffer[x]))) < 0)
|
||||
goto out;
|
||||
if( (err = H5PTget_next(ptable, (size_t)1, &(readBuffer[x]))) < 0)
|
||||
goto error;
|
||||
if( x != readBuffer[x])
|
||||
goto out;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Close the packet table */
|
||||
if( (err = H5PTclose(ptable)) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if( H5PTis_valid(ptable) < 0)
|
||||
if( H5PTis_valid(ptable) > 0)
|
||||
H5PTclose(ptable);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -992,7 +808,7 @@ static int test_rw_nonnative_dt(hid_t fid)
|
||||
*/
|
||||
static int test_error(hid_t fid)
|
||||
{
|
||||
hid_t id = H5I_BADID;
|
||||
hid_t id = H5I_INVALID_HID;
|
||||
int id_open=0;
|
||||
particle_t readBuf[1];
|
||||
|
||||
@ -1000,121 +816,121 @@ static int test_error(hid_t fid)
|
||||
|
||||
/* Create a HL table */
|
||||
if(create_hl_table(fid) < 0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Try to open things that are not packet tables */
|
||||
H5E_BEGIN_TRY
|
||||
if(H5PTopen(fid, "Bogus_name") >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTopen(fid, "group1") >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
H5E_END_TRY
|
||||
|
||||
/* Try to execute packet table commands on an invalid ID */
|
||||
H5E_BEGIN_TRY
|
||||
if(H5PTis_valid(id) >= 0)
|
||||
goto out;
|
||||
#ifdef VLPT_REMOVED
|
||||
goto error;
|
||||
if(H5PTis_varlen(id) >= 0)
|
||||
goto out;
|
||||
#endif /* VLPT_REMOVED */
|
||||
goto error;
|
||||
if(H5PTclose(id) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTappend(id, (size_t)1, testPart) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTcreate_index(id) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTset_index(id, (hsize_t)1) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTget_index(id, NULL) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
H5E_END_TRY
|
||||
|
||||
/* Open a high-level non-packet (H5TB) table and try to */
|
||||
/* execute commands on it. */
|
||||
if((id=H5Dopen2(fid, H5TB_TABLE_NAME, H5P_DEFAULT)) <0)
|
||||
goto out;
|
||||
goto error;
|
||||
id_open = 1;
|
||||
|
||||
H5E_BEGIN_TRY
|
||||
if(H5PTis_valid(id) >= 0)
|
||||
goto out;
|
||||
#ifdef VLPT_REMOVED
|
||||
goto error;
|
||||
if(H5PTis_varlen(id) >= 0)
|
||||
goto out;
|
||||
#endif /* VLPT_REMOVED */
|
||||
goto error;
|
||||
if(H5PTclose(id) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTappend(id, (size_t)1, testPart) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTcreate_index(id) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTset_index(id, (hsize_t)1) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTget_index(id, NULL) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
H5E_END_TRY
|
||||
|
||||
id_open=0;
|
||||
if(H5Dclose(id) <0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
/* Open and close a packet table. Try to execute */
|
||||
/* commands on the closed ID. */
|
||||
if((id=H5PTopen(fid, PT_NAME))<0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTclose(id) <0)
|
||||
goto out;
|
||||
goto error;
|
||||
|
||||
H5E_BEGIN_TRY
|
||||
if(H5PTis_valid(id) >= 0)
|
||||
goto out;
|
||||
#ifdef VLPT_REMOVED
|
||||
goto error;
|
||||
if(H5PTis_varlen(id) >= 0)
|
||||
goto out;
|
||||
#endif /* VLPT_REMOVED */
|
||||
goto error;
|
||||
if(H5PTclose(id) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTappend(id, (size_t)1, testPart) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTcreate_index(id) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTset_index(id, (hsize_t)1) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
if(H5PTget_index(id, NULL) >= 0)
|
||||
goto out;
|
||||
goto error;
|
||||
H5E_END_TRY
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
|
||||
out:
|
||||
error:
|
||||
H5_FAILED();
|
||||
if(id_open)
|
||||
H5Dclose(id);
|
||||
return -1;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* test_packet_table(): Invokes individual tests to ensure that all
|
||||
* functions work correctly, except for the variable-length related
|
||||
* functions, which are tested in "test_packet_vlen.c".
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int test_packet_table(hid_t fid)
|
||||
{
|
||||
|
||||
if( test_create_close(fid) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
if( test_open(fid) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
/* test_append must be run before test_count and test_read, as it */
|
||||
/* creates the packet table they use. */
|
||||
if( test_append(fid) < 0 )
|
||||
return -1;
|
||||
return FAIL;
|
||||
|
||||
/* These tests will not necessarily cause failures in each other,
|
||||
so we don't abort the other tests if one fails. */
|
||||
@ -1122,24 +938,24 @@ static int test_packet_table(hid_t fid)
|
||||
test_get_next(fid);
|
||||
test_big_table(fid);
|
||||
test_rw_nonnative_dt(fid);
|
||||
#ifdef VLPT_REMOVED
|
||||
test_varlen(fid);
|
||||
#endif /* VLPT_REMOVED */
|
||||
test_opaque(fid);
|
||||
test_compress();
|
||||
test_error(fid);
|
||||
|
||||
return 0;
|
||||
return SUCCEED;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
/* identifier for the file */
|
||||
hid_t fid;
|
||||
int status = 0;
|
||||
/* identifier for the file that is used in FL PT tests */
|
||||
hid_t fid;
|
||||
int status = 0;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Packet test: test each function of the packet table
|
||||
* Packet test: test each function of the packet table library
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@ -1148,12 +964,16 @@ int main(void)
|
||||
|
||||
HDputs("Testing packet table");
|
||||
|
||||
/* run tests */
|
||||
if ( test_packet_table(fid) < 0)
|
||||
status = 1;
|
||||
/* Test packet table with fixed length */
|
||||
if (test_packet_table(fid) < 0)
|
||||
status = 1;
|
||||
|
||||
/* close */
|
||||
H5Fclose(fid);
|
||||
/* Test packet table with variable length, using separate data file */
|
||||
if (test_packet_table_with_varlen() < 0)
|
||||
status = 1;
|
||||
|
||||
return status;
|
||||
/* Close the file */
|
||||
H5Fclose(fid);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
1098
hl/test/test_packet_vlen.c
Normal file
1098
hl/test/test_packet_vlen.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user