diff options
Diffstat (limited to 'hl/src/H5TB.c')
-rw-r--r-- | hl/src/H5TB.c | 2346 |
1 files changed, 1173 insertions, 1173 deletions
diff --git a/hl/src/H5TB.c b/hl/src/H5TB.c index 30a8490..a035319 100644 --- a/hl/src/H5TB.c +++ b/hl/src/H5TB.c @@ -1,17 +1,17 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * 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. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +* 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. * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include <stdlib.h> #include <string.h> @@ -20,11 +20,11 @@ /*------------------------------------------------------------------------- - * - * internal functions - * - *------------------------------------------------------------------------- - */ +* +* internal functions +* +*------------------------------------------------------------------------- +*/ static int H5TB_find_field(const char *field, const char *field_list); @@ -43,47 +43,47 @@ static hid_t H5TB_create_type(hid_t loc_id, hid_t ftype_id); /*------------------------------------------------------------------------- - * - * Create functions - * - *------------------------------------------------------------------------- - */ +* +* Create functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TBmake_table - * - * Purpose: Make a table - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * Quincey Koziol - * - * Date: January 17, 2001 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ +* Function: H5TBmake_table +* +* Purpose: Make a table +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* Quincey Koziol +* +* Date: January 17, 2001 +* +* Comments: +* +* Modifications: +* +*------------------------------------------------------------------------- +*/ herr_t H5TBmake_table( const char *table_title, - hid_t loc_id, - const char *dset_name, - hsize_t nfields, - hsize_t nrecords, - size_t type_size, - const char *field_names[], - const size_t *field_offset, - const hid_t *field_types, - hsize_t chunk_size, - void *fill_data, - int compress, - const void *buf ) + hid_t loc_id, + const char *dset_name, + hsize_t nfields, + hsize_t nrecords, + size_t type_size, + const char *field_names[], + const size_t *field_offset, + const hid_t *field_types, + hsize_t chunk_size, + void *fill_data, + int compress, + const void *buf ) { - + hid_t did; hid_t sid; hid_t mem_type_id; @@ -97,37 +97,37 @@ herr_t H5TBmake_table( const char *table_title, char aux[255]; hsize_t i; unsigned char *tmp_buf; - + dims[0] = nrecords; dims_chunk[0] = chunk_size; - + /* create the memory data type. */ if ((mem_type_id = H5Tcreate (H5T_COMPOUND, type_size )) < 0) return -1; - + /* insert fields. */ for ( i = 0; i < nfields; i++) { if(H5Tinsert(mem_type_id, field_names[i], field_offset[i], field_types[i] ) < 0) return -1; } - + /* create a simple data space with unlimited size */ if ((sid = H5Screate_simple( 1, dims, maxdims )) < 0) return -1; - + /* modify dataset creation properties, i.e. enable chunking */ plist_id = H5Pcreate(H5P_DATASET_CREATE); if (H5Pset_chunk(plist_id, 1, dims_chunk) < 0) return -1; - + /* set the fill value using a struct as the data type. */ if (fill_data) { if(H5Pset_fill_value(plist_id, mem_type_id, fill_data) < 0) return -1; } - + /* dataset creation property list is modified to use GZIP compression with the compression effort set to 6. @@ -137,11 +137,11 @@ herr_t H5TBmake_table( const char *table_title, if(H5Pset_deflate(plist_id, 6) < 0) return -1; } - + /* create the dataset. */ if ((did = H5Dcreate2(loc_id, dset_name, mem_type_id, sid, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0) goto out; - + /* only write if there is something to write */ if (buf) { @@ -149,108 +149,108 @@ herr_t H5TBmake_table( const char *table_title, if (H5Dwrite( did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf ) < 0) goto out; } - + /* terminate access to the data space. */ if (H5Sclose(sid) < 0) goto out; - + /* end access to the dataset */ if (H5Dclose(did) < 0) goto out; - + /* end access to the property list */ if (H5Pclose(plist_id) < 0) goto out; - + /*------------------------------------------------------------------------- * set the conforming table attributes *------------------------------------------------------------------------- */ - + /* attach the CLASS attribute */ if (H5LTset_attribute_string( loc_id, dset_name, "CLASS", TABLE_CLASS ) < 0) goto out; - + /* attach the VERSION attribute */ if (H5LTset_attribute_string( loc_id, dset_name, "VERSION", TABLE_VERSION ) < 0) goto out; - + /* attach the TITLE attribute */ if (H5LTset_attribute_string( loc_id, dset_name, "TITLE", table_title ) < 0) goto out; - + /* attach the FIELD_ name attribute */ for ( i = 0; i < nfields; i++) { /* get the member name */ member_name = H5Tget_member_name( mem_type_id,(unsigned) i ); - + strcpy( attr_name, "FIELD_" ); sprintf( aux, "%d", (int)i ); strcat( attr_name, aux ); sprintf( aux, "%s", "_NAME" ); strcat( attr_name, aux ); - + /* attach the attribute */ if (H5LTset_attribute_string( loc_id, dset_name, attr_name, member_name ) < 0) goto out; - + free( member_name ); - + } - + /* attach the FIELD_ fill value attribute */ if (fill_data ) { - - tmp_buf = fill_data; - + + tmp_buf = (unsigned char *) fill_data; + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + if (( sid = H5Screate(H5S_SCALAR)) < 0) goto out; - + for ( i = 0; i < nfields; i++) { - + /* get the member name */ member_name = H5Tget_member_name(mem_type_id, (unsigned)i); - + strcpy(attr_name, "FIELD_"); sprintf(aux, "%d", (int)i); strcat(attr_name, aux); sprintf(aux, "%s", "_FILL"); strcat(attr_name, aux); - + if ((attr_id = H5Acreate2(did, attr_name, field_types[i], sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; - + if (H5Awrite(attr_id, field_types[i], tmp_buf+field_offset[i]) < 0) goto out; - + if (H5Aclose(attr_id) < 0) goto out; - + free(member_name); } - + /* terminate access to the data space. */ if (H5Sclose(sid) < 0) goto out; - + /* end access to the dataset */ if (H5Dclose(did) < 0) goto out; } - + /* release the datatype. */ if (H5Tclose( mem_type_id ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY { @@ -260,45 +260,45 @@ out: H5Tclose(mem_type_id); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * - * Write functions - * - *------------------------------------------------------------------------- - */ +* +* Write functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TBappend_records - * - * Purpose: Appends records to a table - * - * Return: Success: 0, Failure: -1 - * - * Programmers: - * Pedro Vicente, pvn@ncsa.uiuc.edu - * Quincey Koziol - * - * Date: November 19, 2001 - * - * Comments: Uses memory offsets - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define the memory type ID - * returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBappend_records +* +* Purpose: Appends records to a table +* +* Return: Success: 0, Failure: -1 +* +* Programmers: +* Pedro Vicente, pvn@ncsa.uiuc.edu +* Quincey Koziol +* +* Date: November 19, 2001 +* +* Comments: Uses memory offsets +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define the memory type ID +* returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBappend_records( hid_t loc_id, - const char *dset_name, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - const void *buf ) + const char *dset_name, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + const void *buf ) { hid_t did; hid_t tid=-1; @@ -307,26 +307,26 @@ herr_t H5TBappend_records( hid_t loc_id, hid_t m_sid=-1; hsize_t nrecords_orig; hsize_t nfields; - + /* get the original number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords_orig ) < 0) return -1; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatypes */ if ((tid = H5Dget_type( did )) < 0) goto out; - + if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,tid)) < 0) goto out; - + /* append the records */ if ((H5TB_common_append_records(did, mem_type_id, (size_t)nrecords, nrecords_orig, buf)) < 0) goto out; - + /* close */ if (H5Tclose( tid ) < 0) return -1; @@ -334,9 +334,9 @@ herr_t H5TBappend_records( hid_t loc_id, goto out; if (H5Dclose( did ) < 0) goto out; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -351,36 +351,36 @@ out: } /*------------------------------------------------------------------------- - * Function: H5TBwrite_records - * - * Purpose: Writes records - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - * Comments: Uses memory offsets - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define the memory type ID - * returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBwrite_records +* +* Purpose: Writes records +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +* Comments: Uses memory offsets +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define the memory type ID +* returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBwrite_records( hid_t loc_id, - const char *dset_name, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - const void *buf ) + const char *dset_name, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + const void *buf ) { - + hid_t did; hid_t tid; hsize_t count[1]; @@ -390,43 +390,43 @@ herr_t H5TBwrite_records( hid_t loc_id, hsize_t mem_size[1]; hsize_t dims[1]; hid_t mem_type_id=-1; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,tid)) < 0) goto out; - + /* get the dataspace handle */ if ((sid = H5Dget_space( did )) < 0) goto out; - + /* get records */ if (H5Sget_simple_extent_dims( sid, dims, NULL) < 0) goto out; - + if (start + nrecords > dims[0] ) goto out; - + /* define a hyperslab in the dataset of the size of the records */ offset[0] = start; count[0] = nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0) goto out; - + /* close */ if (H5Sclose( m_sid ) < 0) goto out; @@ -438,9 +438,9 @@ herr_t H5TBwrite_records( hid_t loc_id, return -1; if (H5Dclose( did ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -455,32 +455,32 @@ out: } /*------------------------------------------------------------------------- - * Function: H5TBwrite_fields_name - * - * Purpose: Writes fields - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 21, 2001 - * - * Comments: - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define a memory type ID - * - *------------------------------------------------------------------------- - */ +* Function: H5TBwrite_fields_name +* +* Purpose: Writes fields +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 21, 2001 +* +* Comments: +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define a memory type ID +* +*------------------------------------------------------------------------- +*/ herr_t H5TBwrite_fields_name( hid_t loc_id, - const char *dset_name, - const char *field_names, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - const void *buf ) + const char *dset_name, + const char *field_names, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + const void *buf ) { hid_t did; hid_t tid=-1; @@ -496,57 +496,57 @@ herr_t H5TBwrite_fields_name( hid_t loc_id, hssize_t i, j; hid_t preserve_id; size_t size_native; - + /* create xfer properties to preserve initialized data */ if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0) return -1; if (H5Pset_preserve (preserve_id, 1) < 0) return -1; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + /* get the number of fields */ if (( nfields = H5Tget_nmembers( tid )) < 0) goto out; - + /* create a write id */ if (( write_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0) goto out; - + j = 0; - + /* iterate tru the members */ for ( i = 0; i < nfields; i++) { /* get the member name */ member_name = H5Tget_member_name( tid, (unsigned)i ); - + if(H5TB_find_field( member_name, field_names ) > 0 ) { - + /* get the member type */ if(( member_type_id = H5Tget_member_type( tid,(unsigned) i )) < 0) goto out; - + /* convert to native type */ if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0) goto out; - + size_native=H5Tget_size(nmtype_id); - + /* adjust, if necessary */ if (field_sizes[j]!=size_native) { if (H5Tset_size(nmtype_id, field_sizes[j]) < 0) goto out; } - + /* the field in the file is found by its name */ if (field_offset ) { @@ -559,36 +559,36 @@ herr_t H5TBwrite_fields_name( hid_t loc_id, if (H5Tinsert( write_type_id, member_name, (size_t)0, nmtype_id ) < 0) goto out; } - + j++; - + /* close */ if(H5Tclose( member_type_id ) < 0) goto out; if(H5Tclose( nmtype_id ) < 0) goto out; } - + free( member_name ); - + } - + /* get the dataspace handle */ if ((file_space_id = H5Dget_space( did )) < 0) goto out; if ((m_sid = H5Screate_simple(1, &nrecords, NULL)) < 0) goto out; - + /* define a hyperslab in the dataset */ offset[0] = start; count[0] = nrecords; if (H5Sselect_hyperslab( file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* write */ if (H5Dwrite( did, write_type_id, m_sid, file_space_id, preserve_id, buf ) < 0) goto out; - + /* close */ if(H5Tclose( write_type_id ) ) goto out; @@ -602,9 +602,9 @@ herr_t H5TBwrite_fields_name( hid_t loc_id, return -1; if(H5Sclose( m_sid ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -617,41 +617,41 @@ out: H5Tclose(tid); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBwrite_fields_index - * - * Purpose: Writes fields - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 21, 2001 - * - * Comments: Uses memory offsets - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define a memory type ID - * - *------------------------------------------------------------------------- - */ +* Function: H5TBwrite_fields_index +* +* Purpose: Writes fields +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 21, 2001 +* +* Comments: Uses memory offsets +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define a memory type ID +* +*------------------------------------------------------------------------- +*/ herr_t H5TBwrite_fields_index( hid_t loc_id, - const char *dset_name, - hsize_t nfields, - const int *field_index, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - const void *buf ) + const char *dset_name, + hsize_t nfields, + const int *field_index, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + const void *buf ) { hid_t did; hid_t tid=-1; @@ -666,50 +666,50 @@ herr_t H5TBwrite_fields_index( hid_t loc_id, hsize_t i, j; hid_t preserve_id; size_t size_native; - + /* create xfer properties to preserve initialized data */ if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0) return -1; if (H5Pset_preserve (preserve_id, 1) < 0) return -1; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + /* create a write id */ if (( write_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0) goto out; - + /* iterate tru the members */ for ( i = 0; i < nfields; i++) { - + j = field_index[i]; - + /* get the member name */ member_name = H5Tget_member_name( tid, (unsigned) j ); - + /* get the member type */ if (( member_type_id = H5Tget_member_type( tid, (unsigned) j )) < 0) goto out; - + /* convert to native type */ if ((nmtype_id = H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0) goto out; - + size_native = H5Tget_size(nmtype_id); - + if (field_sizes[i]!=size_native) { if (H5Tset_size(nmtype_id, field_sizes[i]) < 0) goto out; } - + /* the field in the file is found by its name */ if ( field_offset ) { @@ -727,27 +727,27 @@ herr_t H5TBwrite_fields_index( hid_t loc_id, goto out; if(H5Tclose( nmtype_id ) < 0) goto out; - + free( member_name ); - + } - + /* get the dataspace handles */ if ((file_space_id = H5Dget_space( did )) < 0) goto out; if ((m_sid = H5Screate_simple(1, &nrecords, NULL)) < 0) goto out; - + /* define a hyperslab in the dataset */ offset[0] = start; count[0] = nrecords; if (H5Sselect_hyperslab( file_space_id, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* write */ if (H5Dwrite( did, write_type_id, m_sid, file_space_id, preserve_id, buf ) < 0) goto out; - + /* close */ if (H5Tclose( write_type_id ) ) goto out; @@ -761,9 +761,9 @@ herr_t H5TBwrite_fields_index( hid_t loc_id, return -1; if (H5Sclose( m_sid ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -780,68 +780,68 @@ out: /*------------------------------------------------------------------------- - * - * Read functions - * - *------------------------------------------------------------------------- - */ +* +* Read functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TBread_table - * - * Purpose: Reads a table - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 20, 2001 - * - * Comments: - * - * Modifications: April 1, 2004 - * used a memory type ID returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBread_table +* +* Purpose: Reads a table +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 20, 2001 +* +* Comments: +* +* Modifications: April 1, 2004 +* used a memory type ID returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBread_table( hid_t loc_id, - const char *dset_name, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - void *dst_buf ) + const char *dset_name, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + void *dst_buf ) { hid_t did; hid_t ftype_id=-1; hid_t mem_type_id=-1; hid_t sid; hsize_t dims[1]; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get the dataspace handle */ if ((sid = H5Dget_space( did )) < 0) goto out; - + /* get dimensions */ if (H5Sget_simple_extent_dims( sid, dims, NULL) < 0) goto out; - + /* get the datatypes */ if ((ftype_id=H5Dget_type (did)) < 0) goto out; - + if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,ftype_id)) < 0) goto out; - + /* read */ if (H5Dread( did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, dst_buf) < 0) goto out; - + /* close */ if (H5Tclose( ftype_id ) < 0) goto out; @@ -851,9 +851,9 @@ herr_t H5TBread_table( hid_t loc_id, goto out; if (H5Dclose( did ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -867,36 +867,36 @@ out: } /*------------------------------------------------------------------------- - * Function: H5TBread_records - * - * Purpose: Reads records - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - * Comments: - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define the memory type ID - * returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBread_records +* +* Purpose: Reads records +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +* Comments: +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define the memory type ID +* returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBread_records( hid_t loc_id, - const char *dset_name, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - void *buf ) + const char *dset_name, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + void *buf ) { - + hid_t did; hid_t ftype_id; hid_t mem_type_id=-1; @@ -904,22 +904,22 @@ herr_t H5TBread_records( hid_t loc_id, hid_t m_sid=-1; hsize_t nrecords_orig; hsize_t nfields; - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords_orig ) < 0) return -1; - + /* open the dataset */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get the datatypes */ if ((ftype_id = H5Dget_type( did )) < 0) goto out; - + if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,ftype_id)) < 0) goto out; - + /* read the records */ if ((H5TB_common_read_records(did, mem_type_id, start, (size_t)nrecords, nrecords_orig, buf)) < 0) goto out; @@ -931,9 +931,9 @@ herr_t H5TBread_records( hid_t loc_id, return -1; if (H5Dclose( did ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY { @@ -944,40 +944,40 @@ out: H5Sclose(sid); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBread_fields_name - * - * Purpose: Reads fields - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - * Comments: - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define the memory type ID - * returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBread_fields_name +* +* Purpose: Reads fields +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +* Comments: +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define the memory type ID +* returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBread_fields_name( hid_t loc_id, - const char *dset_name, - const char *field_names, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - void *buf ) + const char *dset_name, + const char *field_names, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + void *buf ) { hid_t did; @@ -994,41 +994,41 @@ herr_t H5TBread_fields_name( hid_t loc_id, hsize_t mem_size[1]; size_t size_native; hssize_t i, j; - + /* open the dataset */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((ftype_id = H5Dget_type( did )) < 0) goto out; - + /* get the number of fields */ if (( nfields = H5Tget_nmembers( ftype_id )) < 0) goto out; - + /* create a memory read id */ if (( mem_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0) goto out; - + /* iterate tru the members */ for ( i=0,j=0; i<nfields; i++) { /* get the member name */ member_name = H5Tget_member_name( ftype_id, (unsigned)i ); - + if(H5TB_find_field( member_name, field_names ) > 0 ) { /* get the member type */ if (( mtype_id = H5Tget_member_type( ftype_id, (unsigned) i )) < 0) goto out; - + /* convert to native type */ if ((nmtype_id=H5Tget_native_type(mtype_id,H5T_DIR_DEFAULT)) < 0) goto out; - + size_native=H5Tget_size(nmtype_id); - + if (field_sizes[j]!=size_native) { if (H5Tset_size(nmtype_id, field_sizes[j]) < 0) @@ -1045,7 +1045,7 @@ herr_t H5TBread_fields_name( hid_t loc_id, if(H5Tinsert( mem_type_id, member_name, (size_t)0, nmtype_id ) < 0) goto out; } - + /* close */ if(H5Tclose( mtype_id ) < 0) goto out; @@ -1055,26 +1055,26 @@ herr_t H5TBread_fields_name( hid_t loc_id, } free( member_name ); } - + /* get the dataspace handle */ if ((sid = H5Dget_space( did )) < 0) goto out; - + /* define a hyperslab in the dataset */ offset[0] = start; count[0] = nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + /* read */ if (H5Dread( did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0) goto out; - + /* close */ if (H5Tclose( mem_type_id ) ) goto out; @@ -1086,9 +1086,9 @@ herr_t H5TBread_fields_name( hid_t loc_id, goto out; if (H5Dclose( did ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -1100,43 +1100,43 @@ out: H5Sclose(sid); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBread_fields_index - * - * Purpose: Reads fields - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - * Comments: - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define the memory type ID - * returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBread_fields_index +* +* Purpose: Reads fields +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +* Comments: +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define the memory type ID +* returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBread_fields_index( hid_t loc_id, - const char *dset_name, - hsize_t nfields, - const int *field_index, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - void *buf ) + const char *dset_name, + hsize_t nfields, + const int *field_index, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + void *buf ) { - + hid_t did; hid_t tid=-1; hid_t read_type_id=-1; @@ -1150,47 +1150,47 @@ herr_t H5TBread_fields_index( hid_t loc_id, hsize_t mem_size[1]; size_t size_native; hsize_t i, j; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + /* create a read id */ if (( read_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0) goto out; - + /* iterate tru the members */ for ( i = 0; i < nfields; i++) { j = field_index[i]; - + /* get the member name */ member_name = H5Tget_member_name( tid, (unsigned) j ); - + /* get the member type */ if (( member_type_id = H5Tget_member_type( tid, (unsigned) j )) < 0) goto out; - + /* get the member size */ if (H5Tget_size( member_type_id ) == 0 ) goto out; - + /* convert to native type */ if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT)) < 0) goto out; - + size_native=H5Tget_size(nmtype_id); - + if (field_sizes[i]!=size_native) { if (H5Tset_size(nmtype_id, field_sizes[i]) < 0) goto out; } - + /* the field in the file is found by its name */ if (field_offset ) { @@ -1202,35 +1202,35 @@ herr_t H5TBread_fields_index( hid_t loc_id, if(H5Tinsert( read_type_id, member_name, (size_t)0, nmtype_id ) < 0) goto out; } - + /* close the member type */ if (H5Tclose( member_type_id ) < 0) goto out; if (H5Tclose( nmtype_id ) < 0) goto out; - + free( member_name ); } - + /* get the dataspace handle */ if ((sid = H5Dget_space( did )) < 0) goto out; - + /* define a hyperslab in the dataset */ offset[0] = start; count[0] = nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + /* read */ if (H5Dread( did, read_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0) goto out; - + /* close */ if (H5Sclose( sid ) < 0) goto out; @@ -1242,9 +1242,9 @@ herr_t H5TBread_fields_index( hid_t loc_id, return -1; if (H5Dclose( did ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -1256,40 +1256,40 @@ out: H5Sclose(sid); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * - * Manipulation functions - * - *------------------------------------------------------------------------- - */ +* +* Manipulation functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TBdelete_record - * - * Purpose: Delete records from middle of table ("pulling up" all the records after it) - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 26, 2001 - * - * Modifications: April 29, 2003 - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TBdelete_record +* +* Purpose: Delete records from middle of table ("pulling up" all the records after it) +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 26, 2001 +* +* Modifications: April 29, 2003 +* +* +*------------------------------------------------------------------------- +*/ herr_t H5TBdelete_record( hid_t loc_id, - const char *dset_name, - hsize_t start, - hsize_t nrecords ) + const char *dset_name, + hsize_t start, + hsize_t nrecords ) { - + hsize_t nfields; hsize_t ntotal_records; hsize_t read_start; @@ -1306,24 +1306,24 @@ herr_t H5TBdelete_record( hid_t loc_id, size_t *src_offset; size_t *src_sizes; hsize_t dims[1]; - + /*------------------------------------------------------------------------- * first we get information about type size and offsets on disk *------------------------------------------------------------------------- */ - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &ntotal_records ) < 0) return -1; - + src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t)); src_sizes = (size_t *)malloc((size_t)nfields * sizeof(size_t)); - + if (src_offset == NULL ) return -1; if (src_sizes == NULL ) return -1; - + /* get field info */ if (H5TBget_field_info( loc_id, dset_name, NULL, src_sizes, src_offset, &src_size ) < 0) return -1; @@ -1331,53 +1331,53 @@ herr_t H5TBdelete_record( hid_t loc_id, /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /*------------------------------------------------------------------------- * read the records after the deleted one(s) *------------------------------------------------------------------------- */ - + read_start = start + nrecords; read_nrecords = ntotal_records - read_start; if ( read_nrecords ) { tmp_buf = (unsigned char *)calloc((size_t) read_nrecords, src_size ); - + if (tmp_buf == NULL ) return -1; - + /* read the records after the deleted one(s) */ if (H5TBread_records( loc_id, dset_name, read_start, read_nrecords, src_size, src_offset, src_sizes, tmp_buf ) < 0) return -1; - + /*------------------------------------------------------------------------- * write the records in another position *------------------------------------------------------------------------- */ - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + /* get the dataspace handle */ if ((sid = H5Dget_space( did )) < 0) goto out; - + /* define a hyperslab in the dataset of the size of the records */ offset[0] = start; count[0] = read_nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + if (H5Dwrite( did, tid, m_sid, sid, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /* close */ if (H5Sclose( m_sid ) < 0) goto out; @@ -1385,10 +1385,10 @@ herr_t H5TBdelete_record( hid_t loc_id, goto out; if (H5Tclose( tid ) < 0) goto out; - + } /* read_nrecords */ - - + + /*------------------------------------------------------------------------- * change the dataset dimension *------------------------------------------------------------------------- @@ -1396,20 +1396,20 @@ herr_t H5TBdelete_record( hid_t loc_id, dims[0] = ntotal_records - nrecords; if (H5Dset_extent( did, dims ) < 0) goto out; - + /* close dataset */ if (H5Dclose( did ) < 0) return -1; - + if (tmp_buf !=NULL) free( tmp_buf ); free( src_offset ); free( src_sizes ); - - + + return 0; - /* error zone */ + /* error zone */ out: if (tmp_buf !=NULL ) @@ -1421,41 +1421,41 @@ out: H5Sclose(sid); } H5E_END_TRY; return -1; - - + + } /*------------------------------------------------------------------------- - * Function: H5TBinsert_record - * - * Purpose: Inserts records into middle of table ("pushing down" all the records after it) - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 26, 2001 - * - * Comments: Uses memory offsets - * - * Modifications: April 1, 2004 - * the FIELD_SIZES parameter is used to define the memory type ID - * returned by H5TB_create_type - * - *------------------------------------------------------------------------- - */ +* Function: H5TBinsert_record +* +* Purpose: Inserts records into middle of table ("pushing down" all the records after it) +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 26, 2001 +* +* Comments: Uses memory offsets +* +* Modifications: April 1, 2004 +* the FIELD_SIZES parameter is used to define the memory type ID +* returned by H5TB_create_type +* +*------------------------------------------------------------------------- +*/ herr_t H5TBinsert_record( hid_t loc_id, - const char *dset_name, - hsize_t start, - hsize_t nrecords, - size_t type_size, - const size_t *field_offset, - const size_t *field_sizes, - void *buf ) + const char *dset_name, + hsize_t start, + hsize_t nrecords, + size_t type_size, + const size_t *field_offset, + const size_t *field_sizes, + void *buf ) { - + hsize_t nfields; hsize_t ntotal_records; hsize_t read_nrecords; @@ -1469,93 +1469,93 @@ herr_t H5TBinsert_record( hid_t loc_id, hsize_t dims[1]; hsize_t mem_dims[1]; unsigned char *tmp_buf; - + /*------------------------------------------------------------------------- * read the records after the inserted one(s) *------------------------------------------------------------------------- */ - + /* get the dimensions */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &ntotal_records ) < 0) return -1; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + /* create the memory data type. */ if ((mem_type_id=H5TB_create_type(loc_id,dset_name,type_size,field_offset,field_sizes,tid)) < 0) goto out; - + read_nrecords = ntotal_records - start; tmp_buf = (unsigned char *)calloc((size_t) read_nrecords, type_size); - + /* read the records after the inserted one(s) */ if (H5TBread_records( loc_id, dset_name, start, read_nrecords, type_size, field_offset, field_sizes, tmp_buf ) < 0) return -1; - + /* extend the dataset */ dims[0] = ntotal_records + nrecords; - + if (H5Dset_extent(did, dims) < 0) goto out; - + /*------------------------------------------------------------------------- * write the inserted records *------------------------------------------------------------------------- */ - + /* create a simple memory data space */ mem_dims[0] = nrecords; if ((m_sid = H5Screate_simple(1, mem_dims, NULL)) < 0) return -1; - + /* get the file data space */ if ((sid = H5Dget_space( did )) < 0) return -1; - + /* define a hyperslab in the dataset to write the new data */ offset[0] = start; count[0] = nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0) goto out; - + /* terminate access to the dataspace */ if (H5Sclose( m_sid ) < 0) goto out; if (H5Sclose( sid ) < 0) goto out; - + /*------------------------------------------------------------------------- * write the "pushed down" records *------------------------------------------------------------------------- */ - + /* create a simple memory data space */ mem_dims[0]=read_nrecords; if ((m_sid = H5Screate_simple( 1, mem_dims, NULL )) < 0) return -1; - + /* get the file data space */ if ((sid = H5Dget_space( did )) < 0) return -1; - + /* define a hyperslab in the dataset to write the new data */ offset[0] = start + nrecords; count[0] = read_nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + if (H5Dwrite( did, mem_type_id, m_sid, sid, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /* close */ if (H5Sclose( m_sid ) < 0) goto out; @@ -1567,11 +1567,11 @@ herr_t H5TBinsert_record( hid_t loc_id, return -1; if (H5Dclose( did ) < 0) return -1; - + free( tmp_buf ); - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -1586,30 +1586,30 @@ out: } /*------------------------------------------------------------------------- - * Function: H5TBadd_records_from - * - * Purpose: Add records from first table to second table - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December 5, 2001 - * - * Comments: - * - * Modifications: - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TBadd_records_from +* +* Purpose: Add records from first table to second table +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: December 5, 2001 +* +* Comments: +* +* Modifications: +* +* +*------------------------------------------------------------------------- +*/ herr_t H5TBadd_records_from( hid_t loc_id, - const char *dset_name1, - hsize_t start1, - hsize_t nrecords, - const char *dset_name2, - hsize_t start2 ) + const char *dset_name1, + hsize_t start1, + hsize_t nrecords, + const char *dset_name2, + hsize_t start2 ) { hid_t did_1; hid_t tid_1; @@ -1625,75 +1625,75 @@ herr_t H5TBadd_records_from( hid_t loc_id, size_t src_size; size_t *src_offset; size_t *src_sizes; - + /*------------------------------------------------------------------------- * first we get information about type size and offsets on disk *------------------------------------------------------------------------- */ - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name1, &nfields, &ntotal_records ) < 0) return -1; - + src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t)); src_sizes = (size_t *)malloc((size_t)nfields * sizeof(size_t)); - + if (src_offset == NULL ) return -1; - + /* get field info */ if (H5TBget_field_info( loc_id, dset_name1, NULL, src_sizes, src_offset, &src_size ) < 0) return -1; - + /*------------------------------------------------------------------------- * Get information about the first table and read it *------------------------------------------------------------------------- */ - + /* open the 1st dataset. */ if ((did_1 = H5Dopen2(loc_id, dset_name1, H5P_DEFAULT)) < 0) return -1; - + /* get the datatype */ if ((tid_1 = H5Dget_type( did_1 )) < 0) goto out; - + /* get the dataspace handle */ if ((sid_1 = H5Dget_space( did_1 )) < 0) goto out; - + /* get the size of the datatype */ if (( type_size1 = H5Tget_size( tid_1 )) == 0 ) goto out; - + tmp_buf = (unsigned char *)calloc((size_t)nrecords, type_size1 ); - + /* define a hyperslab in the dataset of the size of the records */ offset[0] = start1; count[0] = nrecords; if (H5Sselect_hyperslab( sid_1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((msid_1 = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + if (H5Dread( did_1, tid_1, msid_1, sid_1, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * add to the second table *------------------------------------------------------------------------- */ if (H5TBinsert_record(loc_id,dset_name2,start2,nrecords,src_size,src_offset,src_sizes,tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * close resources for table 1 *------------------------------------------------------------------------- */ - + if (H5Sclose( msid_1 ) < 0) goto out; if (H5Sclose( sid_1 ) < 0) @@ -1702,13 +1702,13 @@ herr_t H5TBadd_records_from( hid_t loc_id, return -1; if (H5Dclose( did_1 ) < 0) return -1; - + free( tmp_buf ); free( src_offset ); free( src_sizes ); - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -1719,34 +1719,34 @@ out: H5Tclose(tid_1); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBcombine_tables - * - * Purpose: Combine records from two tables into a third - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December 10, 2001 - * - * Comments: - * - * Modifications: - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TBcombine_tables +* +* Purpose: Combine records from two tables into a third +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: December 10, 2001 +* +* Comments: +* +* Modifications: +* +* +*------------------------------------------------------------------------- +*/ herr_t H5TBcombine_tables( hid_t loc_id1, - const char *dset_name1, - hid_t loc_id2, - const char *dset_name2, - const char *dset_name3 ) + const char *dset_name1, + hid_t loc_id2, + const char *dset_name2, + const char *dset_name3 ) { - + /* identifiers for the 1st dataset. */ hid_t did_1=-1; hid_t tid_1=-1; @@ -1784,178 +1784,178 @@ herr_t H5TBcombine_tables( hid_t loc_id1, size_t *src_offset; size_t *src_sizes; int has_fill=0; - + /*------------------------------------------------------------------------- * first we get information about type size and offsets on disk *------------------------------------------------------------------------- */ - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id1, dset_name1, &nfields, &nrecords ) < 0) return -1; - + src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t)); src_sizes = (size_t *)malloc((size_t)nfields * sizeof(size_t)); - + if (src_offset == NULL ) return -1; - + /* get field info */ if (H5TBget_field_info( loc_id1, dset_name1, NULL, src_sizes, src_offset, &src_size ) < 0) return -1; - + /*------------------------------------------------------------------------- * get information about the first table *------------------------------------------------------------------------- */ - + /* open the 1st dataset. */ if ((did_1 = H5Dopen2(loc_id1, dset_name1, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((tid_1 = H5Dget_type( did_1 )) < 0) goto out; - + /* get the dataspace handle */ if ((sid_1 = H5Dget_space( did_1 )) < 0) goto out; - + /* get creation properties list */ if ((pid_1 = H5Dget_create_plist( did_1 )) < 0) goto out; - + /* get the dimensions */ if (H5TBget_table_info ( loc_id1, dset_name1, &nfields, &nrecords ) < 0) return -1; - + /*------------------------------------------------------------------------- * make the merged table with no data originally *------------------------------------------------------------------------- */ - + /* clone the property list */ if ((pid_3 = H5Pcopy(pid_1)) < 0) goto out; - + /* clone the type id */ if ((tid_3 = H5Tcopy(tid_1)) < 0) goto out; - + /*------------------------------------------------------------------------- * here we do not clone the file space from the 1st dataset, because we want to create * an empty table. Instead we create a new dataspace with zero records and expandable. *------------------------------------------------------------------------- */ dims[0] = 0; - + /* create a simple data space with unlimited size */ if ((sid_3 = H5Screate_simple(1, dims, maxdims)) < 0) return -1; - + /* create the dataset */ if ((did_3 = H5Dcreate2(loc_id1, dset_name3, tid_3, sid_3, H5P_DEFAULT, pid_3, H5P_DEFAULT)) < 0) goto out; - + /*------------------------------------------------------------------------- * attach the conforming table attributes *------------------------------------------------------------------------- */ if (H5TB_attach_attributes("Merge table", loc_id1, dset_name3, nfields, tid_3) < 0) goto out; - + /*------------------------------------------------------------------------- * get attributes *------------------------------------------------------------------------- */ - + type_size = H5Tget_size(tid_3); - + /* alloc fill value attribute buffer */ tmp_fill_buf = (unsigned char *)malloc(type_size); - + /* get the fill value attributes */ has_fill = H5TBAget_fill(loc_id1, dset_name1, did_1, tmp_fill_buf); - + /*------------------------------------------------------------------------- * attach the fill attributes from previous table *------------------------------------------------------------------------- */ if (has_fill == 1 ) { - + if (( sid = H5Screate(H5S_SCALAR)) < 0) goto out; - + for ( i = 0; i < nfields; i++) { - + /* get the member type */ if (( member_type_id = H5Tget_member_type( tid_3, (unsigned) i )) < 0) goto out; - + /* get the member offset */ member_offset = H5Tget_member_offset(tid_3, (unsigned)i); - + strcpy(attr_name, "FIELD_"); sprintf(aux, "%d", (int)i); strcat(attr_name, aux); sprintf(aux, "%s", "_FILL"); strcat(attr_name, aux); - + if ((attr_id = H5Acreate2(did_3, attr_name, member_type_id, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; - + if (H5Awrite(attr_id, member_type_id, tmp_fill_buf+member_offset) < 0) goto out; - + if (H5Aclose(attr_id) < 0) goto out; - + if (H5Tclose(member_type_id) < 0) goto out; } - + /* close data space. */ if (H5Sclose( sid ) < 0) goto out; } - + /*------------------------------------------------------------------------- * read data from 1st table *------------------------------------------------------------------------- */ - + tmp_buf = (unsigned char *)calloc((size_t) nrecords, type_size ); - + /* define a hyperslab in the dataset of the size of the records */ offset[0] = 0; count[0] = nrecords; if (H5Sselect_hyperslab( sid_1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + if (H5Dread( did_1, tid_1, m_sid, sid_1, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * save data from 1st table into new table *------------------------------------------------------------------------- */ - + /* append the records to the new table */ if (H5TBappend_records( loc_id1, dset_name3, nrecords, src_size, src_offset, src_sizes, tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * release resources from 1st table *------------------------------------------------------------------------- */ - + if (H5Sclose( m_sid ) < 0) goto out; if(H5Sclose( sid_1 ) < 0) @@ -1966,70 +1966,70 @@ herr_t H5TBcombine_tables( hid_t loc_id1, goto out; if(H5Dclose( did_1 ) < 0) goto out; - + /* Release resources. */ free( tmp_buf ); - + /*------------------------------------------------------------------------- * get information about the 2nd table *------------------------------------------------------------------------- */ - + /* open the dataset. */ if ((did_2 = H5Dopen2(loc_id2, dset_name2, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if ((tid_2 = H5Dget_type( did_2 )) < 0) goto out; - + /* get the dataspace handle */ if ((sid_2 = H5Dget_space( did_2 )) < 0) goto out; - + /* get the property list handle */ if ((pid_2 = H5Dget_create_plist( did_2 )) < 0) goto out; - + /* get the dimensions */ if (H5TBget_table_info ( loc_id2, dset_name2, &nfields, &nrecords ) < 0) return -1; - + /*------------------------------------------------------------------------- * read data from 2nd table *------------------------------------------------------------------------- */ - + tmp_buf = (unsigned char *)calloc((size_t) nrecords, type_size ); - + /* define a hyperslab in the dataset of the size of the records */ offset[0] = 0; count[0] = nrecords; if (H5Sselect_hyperslab( sid_2, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + if (H5Dread( did_2, tid_2, m_sid, sid_2, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * save data from 2nd table into new table *------------------------------------------------------------------------- */ - + /* append the records to the new table */ if (H5TBappend_records( loc_id1, dset_name3, nrecords, src_size, src_offset, src_sizes, tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * release resources from 2nd table *------------------------------------------------------------------------- */ - + if (H5Sclose( m_sid ) < 0) goto out; if (H5Sclose( sid_2 ) < 0) @@ -2040,12 +2040,12 @@ herr_t H5TBcombine_tables( hid_t loc_id1, goto out; if (H5Dclose( did_2 ) < 0) return -1; - + /*------------------------------------------------------------------------- * release resources from 3rd table *------------------------------------------------------------------------- */ - + if (H5Sclose( sid_3 ) < 0) return -1; if (H5Tclose( tid_3 ) < 0) @@ -2054,16 +2054,16 @@ herr_t H5TBcombine_tables( hid_t loc_id1, return -1; if (H5Dclose( did_3 ) < 0) return -1; - + /* Release resources. */ free( tmp_buf ); free( tmp_fill_buf ); free( src_offset ); free( src_sizes ); - + return 0; - - /* error zone */ + + /* error zone */ out: H5E_BEGIN_TRY { @@ -2081,34 +2081,34 @@ out: H5Pclose(pid_3); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBinsert_field - * - * Purpose: Inserts a field - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: January 30, 2002 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ +* Function: H5TBinsert_field +* +* Purpose: Inserts a field +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: January 30, 2002 +* +* Comments: +* +* Modifications: +* +*------------------------------------------------------------------------- +*/ herr_t H5TBinsert_field( hid_t loc_id, - const char *dset_name, - const char *field_name, - hid_t field_type, - hsize_t position, - const void *fill_data, - const void *buf ) + const char *dset_name, + const char *field_name, + hid_t field_type, + hsize_t position, + const void *fill_data, + const void *buf ) { /* identifiers for the 1st, original dataset */ hid_t did_1; @@ -2148,214 +2148,214 @@ herr_t H5TBinsert_field( hid_t loc_id, unsigned char *tmp_buf; unsigned char *tmp_fill_buf; hsize_t i; - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0) return -1; - + /*------------------------------------------------------------------------- * get information about the old data type *------------------------------------------------------------------------- */ - + /* open the dataset. */ if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get creation properties list */ if ((pid_1 = H5Dget_create_plist( did_1 )) < 0) goto out; - + /* get the datatype */ if ((tid_1 = H5Dget_type( did_1 )) < 0) goto out; - + /* get the size of the datatype */ if (( total_size = H5Tget_size( tid_1 )) == 0 ) goto out; - + /* get the dataspace handle */ if ((sid_1 = H5Dget_space( did_1 )) < 0) goto out; - + /* get dimension */ if (H5Sget_simple_extent_dims( sid_1, dims, NULL) < 0) goto out; - + /*------------------------------------------------------------------------- * get attributes *------------------------------------------------------------------------- */ - + /* get the table title */ if ((H5TBAget_title( did_1, table_title )) < 0) goto out; - + /* alloc fill value attribute buffer */ tmp_fill_buf = (unsigned char *)malloc(total_size ); - + /* get the fill value attributes */ if ((H5TBAget_fill( loc_id, dset_name, did_1, tmp_fill_buf )) < 0) goto out; - + /*------------------------------------------------------------------------- * create a new data type *------------------------------------------------------------------------- */ - + /* get the new member size */ member_size = H5Tget_size( field_type ); - + /* create the data type. */ if (( tid_2 = H5Tcreate (H5T_COMPOUND,(size_t)(total_size + member_size) )) < 0) goto out; - + curr_offset = 0; inserted = 0; - + /* insert the old fields, counting with the new one */ for ( i = 0; i < nfields + 1; i++) { idx = i; if (inserted ) idx = i - 1; - + if (i == position ) { /* get the new member size */ new_member_size = H5Tget_size( field_type ); - + /* insert the new field type */ if (H5Tinsert( tid_2, field_name, curr_offset, field_type ) < 0) goto out; - + curr_offset += new_member_size; - + inserted = 1; - + continue; } - + /* get the member name */ member_name = H5Tget_member_name( tid_1, (unsigned)idx ); - + /* get the member type */ if (( member_type_id = H5Tget_member_type( tid_1,(unsigned)idx )) < 0) goto out; - + /* get the member size */ member_size = H5Tget_size( member_type_id ); - + /* insert it into the new type */ if (H5Tinsert( tid_2, member_name, curr_offset, member_type_id ) < 0) goto out; - + curr_offset += member_size; - + free( member_name ); - + /* close the member type */ if(H5Tclose( member_type_id ) < 0) goto out; } /* i */ - + /*------------------------------------------------------------------------- * create a new temporary dataset *------------------------------------------------------------------------- */ - + /* retrieve the size of chunk */ if (H5Pget_chunk(pid_1, 1, dims_chunk) < 0) goto out; - + /* create a new simple data space with unlimited size, using the dimension */ if ((sid_2 = H5Screate_simple( 1, dims, maxdims)) < 0) return -1; - + /* modify dataset creation properties, i.e. enable chunking */ pid_2 = H5Pcreate(H5P_DATASET_CREATE); if (H5Pset_chunk(pid_2, 1, dims_chunk) < 0) return -1; - + /* create the dataset. */ if ((did_2 = H5Dcreate2(loc_id, "new", tid_2, sid_2, H5P_DEFAULT, pid_2, H5P_DEFAULT)) < 0) goto out; - + /*------------------------------------------------------------------------- * read data from 1st table *------------------------------------------------------------------------- */ - + tmp_buf = (unsigned char *)calloc((size_t)nrecords, (size_t)total_size); - + /* define a hyperslab in the dataset of the size of the records */ offset[0] = 0; count[0] = nrecords; if (H5Sselect_hyperslab(sid_1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((msid_1 = H5Screate_simple(1, mem_size, NULL)) < 0) goto out; - + if (H5Dread(did_1, tid_1, msid_1, H5S_ALL, H5P_DEFAULT, tmp_buf) < 0) goto out; - + /*------------------------------------------------------------------------- * save data from 1st table into new table, using the 1st type id *------------------------------------------------------------------------- */ - + /* write */ if (H5Dwrite( did_2, tid_1, msid_1, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /*------------------------------------------------------------------------- * save the function supplied data of the new field *------------------------------------------------------------------------- */ - + /* create a write id */ if (( write_type_id = H5Tcreate( H5T_COMPOUND, (size_t)new_member_size )) < 0) goto out; - + /* the field in the file is found by its name */ if (H5Tinsert( write_type_id, field_name, (size_t)0, field_type ) < 0) goto out; - + /* create xfer properties to preserve initialized data */ if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0) goto out; if (H5Pset_preserve (preserve_id, 1) < 0) goto out; - + /* only write if there is something to write */ if ( buf ) { /* create a memory dataspace handle */ if ((msid_2 = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; - + /* write */ if (H5Dwrite( did_2, write_type_id, msid_2, sid_2, preserve_id, buf ) < 0) goto out; - + /* terminate access to the memory dataspace */ if (H5Sclose( msid_2 ) < 0) goto out; } - + /* end access to the property list */ if (H5Pclose( preserve_id ) < 0) goto out; - + /*------------------------------------------------------------------------- * release resources from 1st table *------------------------------------------------------------------------- */ - + if (H5Sclose( msid_1 ) < 0) goto out; if (H5Tclose( tid_1 ) < 0) @@ -2366,13 +2366,13 @@ herr_t H5TBinsert_field( hid_t loc_id, goto out; if (H5Dclose( did_1 ) < 0) goto out; - - + + /*------------------------------------------------------------------------- * release resources from 2nd table *------------------------------------------------------------------------- */ - + if (H5Sclose( sid_2 ) < 0) goto out; if (H5Tclose( tid_2 ) < 0) @@ -2380,112 +2380,112 @@ herr_t H5TBinsert_field( hid_t loc_id, if (H5Pclose( pid_2 ) < 0) goto out; if (H5Dclose( did_2 ) < 0) - goto out; - + goto out; + /*------------------------------------------------------------------------- * delete 1st table *------------------------------------------------------------------------- */ if (H5Ldelete( loc_id, dset_name, H5P_DEFAULT ) < 0) return -1; - + /*------------------------------------------------------------------------- * rename 2nd table *------------------------------------------------------------------------- */ - + if (H5Lmove( loc_id, "new", H5L_SAME_LOC, dset_name, H5P_DEFAULT, H5P_DEFAULT ) < 0) return -1; - + /*------------------------------------------------------------------------- * attach the conforming table attributes *------------------------------------------------------------------------- */ - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0) return -1; - + /* open the dataset. */ if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get the datatype */ if ((tid_1 = H5Dget_type( did_1 )) < 0) goto out; - + /* set the attributes */ if (H5TB_attach_attributes( table_title, loc_id, dset_name,(hsize_t) nfields, tid_1 ) < 0) return -1; - + /*------------------------------------------------------------------------- * attach the fill attributes from previous table *------------------------------------------------------------------------- */ - + if (( sid_1 = H5Screate(H5S_SCALAR)) < 0) goto out; - + for ( i = 0; i < nfields-1; i++) { /* get the member type */ if(( member_type_id = H5Tget_member_type( tid_1, (unsigned) i )) < 0) goto out; - + /* get the member offset */ member_offset = H5Tget_member_offset(tid_1, (unsigned)i); - + strcpy(attr_name, "FIELD_"); sprintf(aux, "%d", (int)i); strcat(attr_name, aux); sprintf(aux, "%s", "_FILL"); strcat(attr_name, aux); - + if ((attr_id = H5Acreate2(did_1, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; - + if (H5Awrite(attr_id, member_type_id, tmp_fill_buf+member_offset) < 0) goto out; - + if (H5Aclose(attr_id) < 0) goto out; - + /* close the member type */ if (H5Tclose(member_type_id) < 0) goto out; } - + /*------------------------------------------------------------------------- * attach the fill attribute from the new field, if present *------------------------------------------------------------------------- */ if (fill_data) { - + strcpy(attr_name, "FIELD_"); sprintf(aux, "%d",(int)(nfields - 1)); strcat(attr_name, aux); sprintf(aux, "%s", "_FILL"); strcat(attr_name, aux); - + /* get the member type */ if ((member_type_id = H5Tget_member_type(tid_1, (unsigned)nfields - 1)) < 0) goto out; - + if ((attr_id = H5Acreate2(did_1, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; - + if (H5Awrite(attr_id, member_type_id, fill_data) < 0) goto out; - + if (H5Aclose(attr_id) < 0) goto out; - + if (H5Tclose(member_type_id) < 0) goto out; - + } - + /* close */ if (H5Sclose( sid_1 ) < 0) goto out; @@ -2493,13 +2493,13 @@ herr_t H5TBinsert_field( hid_t loc_id, goto out; if (H5Dclose( did_1 ) < 0) goto out; - + /* release resources. */ free ( tmp_buf ); free ( tmp_fill_buf ); - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -2512,33 +2512,33 @@ out: H5Sclose(sid_2); H5Tclose(tid_2); H5Pclose(pid_2); - + } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBdelete_field - * - * Purpose: Deletes a field - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: January 30, 2002 - * - * Comments: - * - * Modifications: - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TBdelete_field +* +* Purpose: Deletes a field +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: January 30, 2002 +* +* Comments: +* +* Modifications: +* +* +*------------------------------------------------------------------------- +*/ herr_t H5TBdelete_field( hid_t loc_id, - const char *dset_name, - const char *field_name ) + const char *dset_name, + const char *field_name ) { /* identifiers for the 1st original dataset */ hid_t did_1; @@ -2574,179 +2574,179 @@ herr_t H5TBdelete_field( hid_t loc_id, hid_t attr_id; hsize_t i; int has_fill=0; - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0) return -1; - + /*------------------------------------------------------------------------- * get information about the old data type *------------------------------------------------------------------------- */ - + /* open the dataset. */ if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get creation properties list */ if ((pid_1 = H5Dget_create_plist( did_1 )) < 0) goto out; - + /* get the datatype */ if ((tid_1 = H5Dget_type( did_1 )) < 0) goto out; - + /* get the size of the datatype */ type_size1 = H5Tget_size( tid_1 ); - + /* get the dataspace handle */ if ((sid_1 = H5Dget_space( did_1 )) < 0) goto out; - + /* get dimension */ if (H5Sget_simple_extent_dims( sid_1, dims, NULL) < 0) goto out; - + /*------------------------------------------------------------------------- * create a new data type; first we find the size of the datatype to delete *------------------------------------------------------------------------- */ - + /* check out the field */ for ( i = 0; i < nfields; i++) { /* get the member name */ member_name = H5Tget_member_name( tid_1,(unsigned) i ); - + /* we want to find the field to delete */ if (H5TB_find_field( member_name, field_name ) > 0 ) { /* get the member type */ if (( member_type_id = H5Tget_member_type( tid_1,(unsigned) i )) < 0) goto out; - + /* get the member size */ delete_member_size = H5Tget_size( member_type_id ); - + /* close the member type */ if (H5Tclose( member_type_id ) < 0) goto out; - + free( member_name ); - + break; - + } - + free( member_name ); - + } /* i */ - + /* no field to delete was found */ if (delete_member_size == 0 ) goto out; - + /*------------------------------------------------------------------------- * create a new data type; we now insert all the fields into the new type *------------------------------------------------------------------------- */ - + type_size2 = type_size1 - delete_member_size; - + /* create the data type. */ if (( tid_2 = H5Tcreate (H5T_COMPOUND, type_size2 )) < 0) goto out; - + curr_offset = 0; - + /* alloc fill value attribute buffer */ tmp_fill_buf = (unsigned char *)malloc((size_t) type_size2 ); - + /*------------------------------------------------------------------------- * get attributes from previous table in the process *------------------------------------------------------------------------- */ - + /* get the table title */ if ((H5TBAget_title( did_1, table_title )) < 0) goto out; - + /* insert the old fields except the one to delete */ for ( i = 0; i < nfields; i++) { /* get the member name */ member_name = H5Tget_member_name( tid_1, (unsigned) i ); - + /* we want to skip the field to delete */ if (H5TB_find_field( member_name, field_name ) > 0 ) { free( member_name ); continue; } - + /* get the member type */ if (( member_type_id = H5Tget_member_type( tid_1, (unsigned)i )) < 0) goto out; - + /* get the member size */ member_size = H5Tget_size( member_type_id ); - + /* insert it into the new type */ if (H5Tinsert( tid_2, member_name, curr_offset, member_type_id ) < 0) goto out; - + /*------------------------------------------------------------------------- * get the fill value information *------------------------------------------------------------------------- */ - + strcpy( attr_name, "FIELD_" ); sprintf( aux, "%d", (int)i ); strcat( attr_name, aux ); sprintf( aux, "%s", "_FILL" ); strcat( attr_name, aux ); - + /* check if we have the _FILL attribute */ has_fill = H5LT_find_attribute( did_1, attr_name ); - + /* get it */ if (has_fill == 1 ) { if(H5LT_get_attribute_disk( did_1, attr_name, tmp_fill_buf+curr_offset ) < 0) goto out; } - + curr_offset += member_size; - + free(member_name); - + /* close the member type */ if (H5Tclose(member_type_id) < 0) goto out; } /* i */ - + /*------------------------------------------------------------------------- * create a new temporary dataset *------------------------------------------------------------------------- */ - + /* retrieve the size of chunk */ if (H5Pget_chunk(pid_1, 1, dims_chunk) < 0) goto out; - + /* create a new simple data space with unlimited size, using the dimension */ if ((sid_2 = H5Screate_simple(1, dims, maxdims)) < 0) return -1; - + /* modify dataset creation properties, i.e. enable chunking */ pid_2 = H5Pcreate(H5P_DATASET_CREATE); if (H5Pset_chunk(pid_2, 1, dims_chunk) < 0) return -1; - + /* create the dataset. */ if ((did_2 = H5Dcreate2(loc_id, "new", tid_2, sid_2, H5P_DEFAULT, pid_2, H5P_DEFAULT)) < 0) goto out; - + /*------------------------------------------------------------------------- * we have to read field by field of the old dataset and save it into the new one *------------------------------------------------------------------------- @@ -2755,80 +2755,80 @@ herr_t H5TBdelete_field( hid_t loc_id, { /* get the member name */ member_name = H5Tget_member_name(tid_1, (unsigned)i); - + /* skip the field to delete */ if (H5TB_find_field(member_name, field_name) > 0) { free(member_name); continue; } - + /* get the member type */ if ((member_type_id = H5Tget_member_type(tid_1, (unsigned)i)) < 0) goto out; - + /* get the member size */ member_size = H5Tget_size(member_type_id); - + /* create a read id */ if ((read_type_id = H5Tcreate(H5T_COMPOUND, member_size)) < 0) goto out; - + /* insert it into the new type */ if (H5Tinsert( read_type_id, member_name, (size_t)0, member_type_id ) < 0) goto out; - + tmp_buf = (unsigned char *)calloc((size_t) nrecords, member_size ); - + /* read */ if (H5Dread( did_1, read_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0) goto out; - + /* create a write id */ if (( write_type_id = H5Tcreate( H5T_COMPOUND, member_size )) < 0) goto out; - + /* the field in the file is found by its name */ if (H5Tinsert( write_type_id, member_name, (size_t)0, member_type_id ) < 0) goto out; - + /* create xfer properties to preserve initialized data */ if ((preserve_id = H5Pcreate (H5P_DATASET_XFER)) < 0) goto out; if (H5Pset_preserve (preserve_id, 1) < 0) goto out; - + /* write */ if(H5Dwrite( did_2, write_type_id, H5S_ALL, H5S_ALL, preserve_id, tmp_buf ) < 0) goto out; - + /* end access to the property list */ if (H5Pclose( preserve_id ) < 0) goto out; - + /* close the member type */ if (H5Tclose( member_type_id ) < 0) goto out; - + /* close the read type */ if (H5Tclose( read_type_id ) < 0) goto out; - + /* close the write type */ if (H5Tclose( write_type_id ) < 0) goto out; - + /* release resources. */ free( member_name ); free ( tmp_buf ); - + } /* i */ - + /*------------------------------------------------------------------------- * release resources from 1st table *------------------------------------------------------------------------- */ - + if (H5Tclose( tid_1 ) < 0) goto out; if (H5Pclose( pid_1 ) < 0) @@ -2837,13 +2837,13 @@ herr_t H5TBdelete_field( hid_t loc_id, goto out; if (H5Dclose( did_1 ) < 0) goto out; - - + + /*------------------------------------------------------------------------- * release resources from 2nd table *------------------------------------------------------------------------- */ - + if (H5Sclose( sid_2 ) < 0) goto out; if (H5Tclose( tid_2 ) < 0) @@ -2852,104 +2852,104 @@ herr_t H5TBdelete_field( hid_t loc_id, goto out; if (H5Dclose( did_2 ) < 0) goto out; - + /*------------------------------------------------------------------------- * delete 1st table *------------------------------------------------------------------------- */ - + if (H5Ldelete( loc_id, dset_name, H5P_DEFAULT ) < 0) return -1; - + /*------------------------------------------------------------------------- * rename 2nd table *------------------------------------------------------------------------- */ - + if (H5Lmove( loc_id, "new", H5L_SAME_LOC, dset_name, H5P_DEFAULT, H5P_DEFAULT ) < 0) return -1; - + /*------------------------------------------------------------------------- * attach the conforming table attributes *------------------------------------------------------------------------- */ - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0) return -1; - + /* open the dataset. */ if ((did_1 = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get the datatype */ if ((tid_1 = H5Dget_type( did_1 )) < 0) goto out; - + /* set the attributes */ if (H5TB_attach_attributes( table_title, loc_id, dset_name, nfields, tid_1 ) < 0) return -1; - + /*------------------------------------------------------------------------- * attach the fill attributes from previous table *------------------------------------------------------------------------- */ - + if (has_fill == 1) { if((sid_1 = H5Screate(H5S_SCALAR)) < 0) goto out; - + for(i = 0; i < nfields; i++) { - + /* get the member type */ if (( member_type_id = H5Tget_member_type( tid_1, (unsigned)i )) < 0) goto out; - + /* get the member offset */ member_offset = H5Tget_member_offset(tid_1, (unsigned)i); - + strcpy(attr_name, "FIELD_"); sprintf(aux, "%d", (int)i); strcat(attr_name, aux); sprintf(aux, "%s", "_FILL"); strcat(attr_name, aux); - + if ((attr_id = H5Acreate2(did_1, attr_name, member_type_id, sid_1, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; - + if (H5Awrite(attr_id, member_type_id, tmp_fill_buf+member_offset) < 0) goto out; - + if (H5Aclose(attr_id) < 0) goto out; - + /* close the member type */ if (H5Tclose(member_type_id) < 0) goto out; } - + /* close data space. */ if (H5Sclose(sid_1) < 0) goto out; - + } /*has_fill*/ - + /* release the datatype. */ if (H5Tclose( tid_1 ) < 0) goto out; - + /* end access to the dataset */ if (H5Dclose( did_1 ) < 0) goto out; - + /* Release resources. */ free ( tmp_fill_buf ); - + return 0; - -/* error zone */ + + /* error zone */ out: H5E_BEGIN_TRY { @@ -2961,74 +2961,74 @@ out: H5Sclose(sid_2); H5Tclose(tid_2); H5Pclose(pid_2); - + } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * - * Table attribute functions - * - *------------------------------------------------------------------------- - */ +* +* Table attribute functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TBAget_title - * - * Purpose: Read the table title - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: January 30, 2001 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ +* Function: H5TBAget_title +* +* Purpose: Read the table title +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: January 30, 2001 +* +* Comments: +* +* Modifications: +* +*------------------------------------------------------------------------- +*/ herr_t H5TBAget_title( hid_t loc_id, - char *table_title ) + char *table_title ) { - + /* Get the TITLE attribute */ if(H5LT_get_attribute_disk( loc_id, "TITLE", table_title ) < 0) return -1; - - + + return 0; - + } /*------------------------------------------------------------------------- - * Function: H5TBAget_fill - * - * Purpose: Read the table attribute fill values - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: January 30, 2002 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ +* Function: H5TBAget_fill +* +* Purpose: Read the table attribute fill values +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: January 30, 2002 +* +* Comments: +* +* Modifications: +* +*------------------------------------------------------------------------- +*/ herr_t H5TBAget_fill( hid_t loc_id, - const char *dset_name, - hid_t dset_id, - unsigned char *dst_buf ) + const char *dset_name, + hid_t dset_id, + unsigned char *dst_buf ) { - + hsize_t nfields; hsize_t nrecords; char attr_name[255]; @@ -3036,20 +3036,20 @@ herr_t H5TBAget_fill( hid_t loc_id, hsize_t i; size_t *src_offset; int has_fill=0; - + /* get the number of records and fields */ if (H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0) return -1; - + src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t)); - + if (src_offset == NULL ) return -1; - + /* get field info */ if (H5TBget_field_info( loc_id, dset_name, NULL, NULL, src_offset, NULL ) < 0) goto out; - + for ( i = 0; i < nfields; i++) { strcpy( attr_name, "FIELD_" ); @@ -3057,125 +3057,125 @@ herr_t H5TBAget_fill( hid_t loc_id, strcat( attr_name, aux ); sprintf( aux, "%s", "_FILL" ); strcat( attr_name, aux ); - + /* check if we have the _FILL attribute */ has_fill = H5LT_find_attribute( dset_id, attr_name ); - + /* get it */ if (has_fill == 1 ) { if(H5LT_get_attribute_disk( dset_id, attr_name, dst_buf+src_offset[i] ) < 0) goto out; } - + } - + free( src_offset ); - + return has_fill; - + out: free( src_offset ); return -1; - + } /*------------------------------------------------------------------------- - * - * Inquiry functions - * - *------------------------------------------------------------------------- - */ +* +* Inquiry functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TBget_table_info - * - * Purpose: Gets the number of records and fields of a table - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - * Comments: - * - * Modifications: - * May 08, 2003 - * In version 2.0 of Table, the number of records is stored as an - * attribute "NROWS" - * November 24, 2008 - * In version 3.0 of Table, "NROWS" was deprecated - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TBget_table_info +* +* Purpose: Gets the number of records and fields of a table +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +* Comments: +* +* Modifications: +* May 08, 2003 +* In version 2.0 of Table, the number of records is stored as an +* attribute "NROWS" +* November 24, 2008 +* In version 3.0 of Table, "NROWS" was deprecated +* +* +*------------------------------------------------------------------------- +*/ herr_t H5TBget_table_info ( hid_t loc_id, - const char *dset_name, - hsize_t *nfields, - hsize_t *nrecords ) + const char *dset_name, + hsize_t *nfields, + hsize_t *nrecords ) { hid_t tid=-1; hid_t sid=-1; hid_t did=-1; int num_members; hsize_t dims[1]; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) return -1; - + /* get the datatype */ if ((tid = H5Dget_type( did )) < 0) goto out; - + /* get the number of members */ if ((num_members = H5Tget_nmembers( tid )) < 0) goto out; - + /*------------------------------------------------------------------------- * get number of nfields *------------------------------------------------------------------------- */ - + if (nfields) { *nfields = num_members; } - - + + /*------------------------------------------------------------------------- * get number of records *------------------------------------------------------------------------- */ - + if (nrecords) { /* get the dataspace handle */ if ((sid = H5Dget_space( did )) < 0) goto out; - + /* get dimension */ if (H5Sget_simple_extent_dims( sid, dims, NULL) < 0) goto out; - + /* terminate access to the dataspace */ if (H5Sclose( sid ) < 0) goto out; - + *nrecords = dims[0]; } - + /* close */ if (H5Tclose( tid ) < 0) goto out; if (H5Dclose( did ) < 0) return -1; - + return 0; - + /* error zone */ out: H5E_BEGIN_TRY @@ -3185,33 +3185,33 @@ out: H5Tclose(tid); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TBget_field_info - * - * Purpose: Get information about fields - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - * Comments: - * - * Modifications: - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TBget_field_info +* +* Purpose: Get information about fields +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +* Comments: +* +* Modifications: +* +* +*------------------------------------------------------------------------- +*/ herr_t H5TBget_field_info( hid_t loc_id, - const char *dset_name, - char *field_names[], - size_t *field_sizes, - size_t *field_offsets, - size_t *type_size ) + const char *dset_name, + char *field_names[], + size_t *field_sizes, + size_t *field_offsets, + size_t *type_size ) { hid_t did; /* dataset ID */ hid_t tid; /* file type ID */ @@ -3224,73 +3224,73 @@ herr_t H5TBget_field_info( hid_t loc_id, size_t member_offset; size_t size; hssize_t i; - + /* open the dataset. */ if ((did = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0) goto out; - + /* get the datatype */ if (( tid = H5Dget_type( did )) < 0) goto out; - + if ((n_tid = H5Tget_native_type(tid,H5T_DIR_DEFAULT)) < 0) goto out; - + /* get the type size */ size = H5Tget_size( n_tid ); - + if ( type_size ) { *type_size = size; } - + /* get the number of members */ if (( nfields = H5Tget_nmembers( tid )) < 0) goto out; - + /* iterate tru the members */ for ( i = 0; i < nfields; i++) { /* get the member name */ member_name = H5Tget_member_name( tid, (unsigned)i ); - + if (field_names ) { strcpy( field_names[i], member_name ); } - + /* get the member type */ if (( m_tid = H5Tget_member_type( tid,(unsigned) i )) < 0) goto out; if ((nm_tid = H5Tget_native_type(m_tid,H5T_DIR_DEFAULT)) < 0) goto out; - + /* get the member size */ member_size = H5Tget_size( nm_tid ); - + if(field_sizes ) { field_sizes[i] = member_size; } - + /* get the member offset */ member_offset = H5Tget_member_offset( n_tid,(unsigned) i ); - + if(field_offsets ) { field_offsets[i] = member_offset; } - + /* close the member types */ if (H5Tclose( m_tid ) < 0) goto out; if (H5Tclose( nm_tid ) < 0) goto out; - + free( member_name ); - + } /* i */ - + /* close */ if (H5Tclose( tid ) < 0) goto out; @@ -3298,10 +3298,10 @@ herr_t H5TBget_field_info( hid_t loc_id, goto out; if (H5Dclose( did ) < 0) return -1; - + return 0; - - /* error zone */ + + /* error zone */ out: H5E_BEGIN_TRY { @@ -3310,36 +3310,36 @@ out: H5Tclose(n_tid); } H5E_END_TRY; return -1; - + } /*------------------------------------------------------------------------- - * - * internal functions - * - *------------------------------------------------------------------------- - */ +* +* internal functions +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TB_find_field - * - * Purpose: Find a string field - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: November 19, 2001 - * - *------------------------------------------------------------------------- - */ +* Function: H5TB_find_field +* +* Purpose: Find a string field +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: November 19, 2001 +* +*------------------------------------------------------------------------- +*/ static int H5TB_find_field( const char *field, const char *field_list ) { const char *start = field_list; const char *end; - + while ( (end = strstr( start, "," )) != 0 ) { size_t count = end - start; @@ -3347,105 +3347,105 @@ int H5TB_find_field( const char *field, const char *field_list ) return 1; start = end + 1; } - + if(strcmp( start, field ) == 0 ) return 1; - + return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TB_attach_attributes - * - * Purpose: Private function that creates the conforming table attributes; - * Used by H5TBcombine_tables; not used by H5TBmake_table, which does not read - * the fill value attributes from an existing table - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December 6, 2001 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ +* Function: H5TB_attach_attributes +* +* Purpose: Private function that creates the conforming table attributes; +* Used by H5TBcombine_tables; not used by H5TBmake_table, which does not read +* the fill value attributes from an existing table +* +* Return: Success: 0, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: December 6, 2001 +* +* Comments: +* +* Modifications: +* +*------------------------------------------------------------------------- +*/ static herr_t H5TB_attach_attributes( const char *table_title, - hid_t loc_id, - const char *dset_name, - hsize_t nfields, - hid_t tid ) + hid_t loc_id, + const char *dset_name, + hsize_t nfields, + hid_t tid ) { - + char attr_name[255]; char *member_name; char aux[255]; hsize_t i; - + /* attach the CLASS attribute */ if (H5LTset_attribute_string( loc_id, dset_name, "CLASS", TABLE_CLASS ) < 0) goto out; - + /* attach the VERSION attribute */ if (H5LTset_attribute_string( loc_id, dset_name, "VERSION", TABLE_VERSION ) < 0) goto out; - + /* attach the TITLE attribute */ if (H5LTset_attribute_string( loc_id, dset_name, "TITLE", table_title ) < 0) goto out; - + /* attach the FIELD_ name attribute */ for ( i = 0; i < nfields; i++) { - + /* get the member name */ member_name = H5Tget_member_name( tid, (unsigned)i ); - + strcpy( attr_name, "FIELD_" ); sprintf( aux, "%d", (int)i ); strcat( attr_name, aux ); sprintf( aux, "%s", "_NAME" ); strcat( attr_name, aux ); - + /* attach the attribute */ if (H5LTset_attribute_string( loc_id, dset_name, attr_name, member_name ) < 0) goto out; - + free( member_name ); - + } - + return 0; - + out: return -1; - + } /*------------------------------------------------------------------------- - * Function: H5TB_create_type - * - * Purpose: Private function that creates a memory type ID - * - * Return: Success: the memory type ID, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: March 31, 2004 - * - * Comments: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ +* Function: H5TB_create_type +* +* Purpose: Private function that creates a memory type ID +* +* Return: Success: the memory type ID, Failure: -1 +* +* Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu +* +* Date: March 31, 2004 +* +* Comments: +* +* Modifications: +* +*------------------------------------------------------------------------- +*/ static hid_t H5TB_create_type(hid_t loc_id, @@ -3462,31 +3462,31 @@ hid_t H5TB_create_type(hid_t loc_id, hsize_t nfields; char **fnames; unsigned i; - + /* get the number of fields */ if (H5TBget_table_info(loc_id,dset_name,&nfields,NULL) < 0) return -1; - - if ((fnames=malloc(sizeof(char*)*(size_t)nfields))==NULL) + + if ((fnames = (char**) malloc(sizeof(char*)*(size_t)nfields))==NULL) return -1; - + for ( i = 0; i < nfields; i++) { - if ((fnames[i]=malloc(sizeof(char)*HLTB_MAX_FIELD_LEN))==NULL) + if ((fnames[i] = (char*) malloc(sizeof(char)*HLTB_MAX_FIELD_LEN))==NULL) { free(fnames); return -1; } } - + /* get field info */ if (H5TBget_field_info(loc_id,dset_name,fnames,NULL,NULL,NULL) < 0) goto out; - + /* create the memory data type */ if ((mem_type_id=H5Tcreate(H5T_COMPOUND,type_size)) < 0) goto out; - + /* get each field ID and adjust its size, if necessary */ for ( i = 0; i < nfields; i++) { @@ -3507,15 +3507,15 @@ hid_t H5TB_create_type(hid_t loc_id, if (H5Tclose(nmtype_id) < 0) goto out; } - + for ( i=0; i<nfields; i++) { free (fnames[i]); } free (fnames); - + return mem_type_id; - + /* error zone */ out: H5E_BEGIN_TRY @@ -3531,40 +3531,40 @@ out: if (fnames) free (fnames); return -1; - + } /*------------------------------------------------------------------------- - * - * Functions shared between H5TB and H5PT - * - *------------------------------------------------------------------------- - */ +* +* Functions shared between H5TB and H5PT +* +*------------------------------------------------------------------------- +*/ /*------------------------------------------------------------------------- - * Function: H5TB_common_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: - * - *------------------------------------------------------------------------- - */ +* Function: H5TB_common_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 H5TB_common_append_records( hid_t dataset_id, - hid_t mem_type_id, - size_t nrecords, - hsize_t orig_table_size, - const void * buf) + hid_t mem_type_id, + size_t nrecords, + hsize_t orig_table_size, + const void * buf) { hsize_t count[1]; hsize_t offset[1]; @@ -3572,39 +3572,39 @@ herr_t H5TB_common_append_records( hid_t dataset_id, hid_t m_sid = H5I_BADID; hsize_t dims[1]; hsize_t mem_dims[1]; - + /* extend the dataset */ dims[0] = nrecords + orig_table_size; if (H5Dset_extent(dataset_id, dims) < 0) goto out; - + /* create a simple memory data space */ mem_dims[0] = nrecords; if((m_sid = H5Screate_simple(1, mem_dims, NULL)) < 0) goto out; - + /* get a copy of the new file data space for writing */ if ((sid = H5Dget_space(dataset_id)) < 0) goto out; - + /* define a hyperslab in the dataset */ offset[0] = orig_table_size; count[0] = nrecords; if (H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* write the records */ if (H5Dwrite( dataset_id, mem_type_id, m_sid, sid, H5P_DEFAULT, buf ) < 0) goto out; - + /* close */ if (H5Sclose( m_sid ) < 0) goto out; if (H5Sclose( sid ) < 0) goto out; - + return 0; - + out: H5E_BEGIN_TRY { @@ -3617,66 +3617,66 @@ out: /*------------------------------------------------------------------------- - * Function: H5TB_common_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: - * - * - *------------------------------------------------------------------------- - */ +* Function: H5TB_common_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 H5TB_common_read_records( hid_t dataset_id, - hid_t mem_type_id, - hsize_t start, - size_t nrecords, - hsize_t table_size, - void *buf) + hid_t mem_type_id, + hsize_t start, + size_t nrecords, + hsize_t table_size, + void *buf) { hsize_t count[1]; hsize_t offset[1]; hid_t sid = H5I_BADID; hid_t m_sid = 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 ((sid = 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( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0) goto out; - + /* create a memory dataspace handle */ mem_size[0] = count[0]; if ((m_sid = H5Screate_simple( 1, mem_size, NULL )) < 0) goto out; if ((H5Dread( dataset_id, mem_type_id, m_sid, sid, H5P_DEFAULT, buf)) < 0) goto out; - + /* close */ if (H5Sclose( m_sid ) < 0) goto out; if (H5Sclose( sid ) < 0) goto out; - + return 0; - + out: H5E_BEGIN_TRY { |