diff options
Diffstat (limited to 'hl/src')
-rw-r--r-- | hl/src/H5LT.c | 194 | ||||
-rw-r--r-- | hl/src/H5LTpublic.h | 28 |
2 files changed, 134 insertions, 88 deletions
diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c index 32c1dbe..12036ea 100644 --- a/hl/src/H5LT.c +++ b/hl/src/H5LT.c @@ -2672,82 +2672,8 @@ out: return FAIL; } -#ifdef NOT_YET -/*------------------------------------------------------------------------- - * Function: H5LTrepack - * - * Purpose: Packs/Unpacks data from buffers. This function transfers data from a packed - * data, src_buf, to a "natural byte aligned" (an n-byte item at an n-byte boundary) - * data, dst_buf, and vice-versa. - * - * Return: Success: 0, Failure: -1 - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: January 17, 2002 - * - * Comments: - * - * Modifications: - * - * - *------------------------------------------------------------------------- - */ - -herr_t H5LTrepack( hsize_t nfields, - hsize_t nrecords, - size_t src_size, - const size_t *src_offset, - const size_t *src_sizes, - size_t dst_size, - const size_t *dst_offset, - const size_t *dst_sizes, - unsigned char *src_buf, - unsigned char *dst_buf ) -{ - hsize_t i, j; - /* size of each field of destination data counting with padding */ - size_t *size_pad = (size_t *)malloc((size_t)nfields * sizeof(size_t)); - - /* Shut compiler */ - src_size=src_size; - src_offset=src_offset; - - if ( size_pad == NULL ) - goto out; - - for ( i= 0; i < nfields; i++) - { - size_pad[i] = ( i == nfields-1 ? dst_size-dst_offset[i] : dst_offset[i+1]-dst_offset[i] ); - } - - /* Iterate tru the records */ - for ( i = 0; i < nrecords; i++) - { - /* Iterate tru the members */ - for ( j = 0; j < nfields; j++) - { - - memcpy( dst_buf, src_buf, dst_sizes[j] ); - dst_buf += size_pad[j]; - src_buf += src_sizes[j]; - - } - - } - - if ( size_pad != NULL ) - free( size_pad ); - -return 0; - -out: - return -1; - -} -#endif /* NOT_YET */ /*------------------------------------------------------------------------- @@ -3578,3 +3504,123 @@ out: } +#ifdef NOT_YET + +/*------------------------------------------------------------------------- + * Function: H5LTcreate_compound_type + * + * Purpose: + * + * Return: Success: 0, Failure: -1 + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: September 18, 2001 + * + * Comments: + * + * Modifications: + * + * + *------------------------------------------------------------------------- + */ + +hid_t H5LTcreate_compound_type( hsize_t nfields, size_t size, const char *field_names[], + const size_t *field_offset, const hid_t *field_types ) +{ + + hid_t tid; + hsize_t i; + + /* Create the memory data type. */ + if ((tid = H5Tcreate (H5T_COMPOUND, size )) < 0 ) + goto out; + + /* Insert fields. */ + for ( i = 0; i < nfields; i++) + { + if ( H5Tinsert(tid, field_names[i], field_offset[i], field_types[i] ) < 0 ) + goto out; + } + + return tid; + +out: + return -1; +} + +/*------------------------------------------------------------------------- + * Function: H5LTrepack + * + * Purpose: Packs/Unpacks data from buffers. This function transfers data from a packed + * data, src_buf, to a "natural byte aligned" (an n-byte item at an n-byte boundary) + * data, dst_buf, and vice-versa. + * + * Return: Success: 0, Failure: -1 + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: January 17, 2002 + * + * Comments: + * + * Modifications: + * + * + *------------------------------------------------------------------------- + */ + +herr_t H5LTrepack( hsize_t nfields, + hsize_t nrecords, + size_t src_size, + const size_t *src_offset, + const size_t *src_sizes, + size_t dst_size, + const size_t *dst_offset, + const size_t *dst_sizes, + unsigned char *src_buf, + unsigned char *dst_buf ) +{ + hsize_t i, j; + /* size of each field of destination data counting with padding */ + size_t *size_pad = (size_t *)malloc((size_t)nfields * sizeof(size_t)); + + /* Shut compiler */ + src_size=src_size; + src_offset=src_offset; + + if ( size_pad == NULL ) + goto out; + + for ( i= 0; i < nfields; i++) + { + + size_pad[i] = ( i == nfields-1 ? dst_size-dst_offset[i] : dst_offset[i+1]-dst_offset[i] ); + + } + + /* Iterate tru the records */ + for ( i = 0; i < nrecords; i++) + { + /* Iterate tru the members */ + for ( j = 0; j < nfields; j++) + { + + memcpy( dst_buf, src_buf, dst_sizes[j] ); + dst_buf += size_pad[j]; + src_buf += src_sizes[j]; + + } + + } + + if ( size_pad != NULL ) + free( size_pad ); + +return 0; + +out: + return -1; + +} +#endif /* NOT_YET */
\ No newline at end of file diff --git a/hl/src/H5LTpublic.h b/hl/src/H5LTpublic.h index 09e8f60..b7145a8 100644 --- a/hl/src/H5LTpublic.h +++ b/hl/src/H5LTpublic.h @@ -331,7 +331,21 @@ H5_HLDLL herr_t H5LTget_attribute_info( hid_t loc_id, H5_HLDLL hid_t H5LTtext_to_dtype(const char *text, H5LT_lang_t lang_type); H5_HLDLL herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type, size_t *len); + +/*------------------------------------------------------------------------- + * + * Utility functions + * + *------------------------------------------------------------------------- + */ + +H5_HLDLL herr_t H5LTfind_attribute( hid_t loc_id, const char *name ); + + #ifdef NOT_YET + +H5_HLDLL hid_t H5LTcreate_compound_type( hsize_t nfields, size_t size, const char *field_names[], + const size_t *field_offset, const hid_t *field_types ); H5_HLDLL herr_t H5LTrepack( hsize_t nfields, hsize_t nrecords, size_t src_size, @@ -345,20 +359,6 @@ H5_HLDLL herr_t H5LTrepack( hsize_t nfields, #endif /* NOT_YET */ - - - -/*------------------------------------------------------------------------- - * - * Utility functions - * - *------------------------------------------------------------------------- - */ - -H5_HLDLL herr_t H5LTfind_attribute( hid_t loc_id, const char *name ); - - - #ifdef __cplusplus } #endif |