summaryrefslogtreecommitdiffstats
path: root/hl/src/H5HL_private.c
diff options
context:
space:
mode:
authorJames Laird <jlaird@hdfgroup.org>2005-03-18 17:19:36 (GMT)
committerJames Laird <jlaird@hdfgroup.org>2005-03-18 17:19:36 (GMT)
commit349ca8daa9a1d0f094d716ea603d7d41ac14b862 (patch)
treed5180e62e013724f1c8972c018963bfe4da74e17 /hl/src/H5HL_private.c
parentf7ee415cdb4e6000636a55ff017c516d65ed64c1 (diff)
downloadhdf5-349ca8daa9a1d0f094d716ea603d7d41ac14b862.zip
hdf5-349ca8daa9a1d0f094d716ea603d7d41ac14b862.tar.gz
hdf5-349ca8daa9a1d0f094d716ea603d7d41ac14b862.tar.bz2
[svn-r10234] Purpose:
Added Packet Table to high-level APIs Description: The Packet Table is an API that allows the user to append records ("packets") to a table, and read the back again. It supports fixed-length records with a defined datatype and variable-length records. It also supports a "current record" index to track the user's position in the table. Solution: The Packet Table code lives in hl/src, and its tests in hl/test. Some code is shared between the H5TB table and the H5PT Packet Table in the form of functions in H5HL_private.c. Some documentation exists for a previous version of the API. Updated documentation and C++ wrapper API coming soon. Platforms tested: sleipnir, eirene, copper, modi4
Diffstat (limited to 'hl/src/H5HL_private.c')
-rw-r--r--hl/src/H5HL_private.c167
1 files changed, 167 insertions, 0 deletions
diff --git a/hl/src/H5HL_private.c b/hl/src/H5HL_private.c
new file mode 100644
index 0000000..723e9ea
--- /dev/null
+++ b/hl/src/H5HL_private.c
@@ -0,0 +1,167 @@
+/****************************************************************************
+ * NCSA HDF *
+ * Scientific Data Technologies *
+ * National Center for Supercomputing Applications *
+ * University of Illinois at Urbana-Champaign *
+ * 605 E. Springfield, Champaign IL 61820 *
+ * *
+ * For conditions of distribution and use, see the accompanying *
+ * hdf/COPYING file. *
+ * *
+ ****************************************************************************/
+
+#include "H5HL_private.h"
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions shared between H5TB and H5PT
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBcommon_append_records
+ *
+ * Purpose: Common code for reading records shared between H5PT and H5TB
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
+ * James Laird, jlaird@ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments: Called by H5TBappend_records and H5PTappend_records
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5TBcommon_append_records( hid_t dataset_id,
+ hid_t mem_type_id,
+ hsize_t nrecords,
+ hsize_t orig_table_size,
+ const void * data)
+{
+ hsize_t count[1];
+ hsize_t offset[1];
+ hid_t space_id = H5I_BADID;
+ hid_t mem_space_id = H5I_BADID;
+ hsize_t dims[1];
+ hsize_t mem_dims[1];
+
+ /* Extend the dataset */
+ dims[0] = nrecords + orig_table_size;
+ if ( H5Dextend ( dataset_id, dims ) < 0 )
+ goto out;
+
+ /* Create a simple memory data space */
+ mem_dims[0]=nrecords;
+ if ( (mem_space_id = H5Screate_simple( 1, mem_dims, NULL )) < 0 )
+ goto out;
+
+ /* Get a copy of the new file data space for writing */
+ if ( (space_id = H5Dget_space( dataset_id )) < 0 )
+ goto out;
+
+ /* Define a hyperslab in the dataset */
+ offset[0] = orig_table_size;
+ count[0] = nrecords;
+ if ( H5Sselect_hyperslab( space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+ goto out;
+
+ /* Write the records */
+ if ( H5Dwrite( dataset_id, mem_type_id, mem_space_id, space_id, H5P_DEFAULT, data ) <
+0 )
+ goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+ goto out;
+
+ if ( H5Sclose( space_id ) < 0 )
+ goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY
+ H5Sclose(mem_space_id);
+ H5Sclose(space_id);
+ H5E_END_TRY
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBcommon_read_records
+ *
+ * Purpose: Common code for reading records shared between H5PT and H5TB
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Nat Furrer, nfurrer@ncsa.uiuc.edu
+ * James Laird, jlaird@ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments: Called by H5TBread_records and H5PTread_records
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5TBcommon_read_records( hid_t dataset_id,
+ hid_t mem_type_id,
+ hsize_t start,
+ hsize_t nrecords,
+ hsize_t table_size,
+ void *data)
+{
+ hsize_t count[1];
+ hsize_t offset[1];
+ hid_t space_id = H5I_BADID;
+ hid_t mem_space_id = H5I_BADID;
+ hsize_t mem_size[1];
+
+ /* Make sure the read request is in bounds */
+ if ( start + nrecords > table_size )
+ goto out;
+
+ /* Get the dataspace handle */
+ if ( (space_id = H5Dget_space( dataset_id )) < 0 )
+ goto out;
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = start;
+ count[0] = nrecords;
+ if ( H5Sselect_hyperslab( space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+ goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ((mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+ goto out;
+ if ((H5Dread( dataset_id, mem_type_id, mem_space_id, space_id, H5P_DEFAULT, data)) < 0
+ )
+ goto out;
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+ goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id ) < 0 )
+ goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY
+ H5Sclose(space_id);
+ H5Sclose(mem_space_id);
+ H5E_END_TRY
+ return -1;
+}
+