Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

305 lines (248 sloc) 7.379 kb
#include "H5ARRAY-opt.h"
#include <stdlib.h>
#include <string.h>
/*-------------------------------------------------------------------------
* Function: H5ARRAYOread_readSlice
*
* Purpose: Read records from an opened Array
*
* Return: Success: 0, Failure: -1
*
* Programmer: Francesc Alted, faltet@pytables.com
*
* Date: May 27, 2004
*
* Comments:
*
* Modifications:
*
*
*-------------------------------------------------------------------------
*/
herr_t H5ARRAYOread_readSlice( hid_t dataset_id,
hid_t type_id,
hsize_t irow,
hsize_t start,
hsize_t stop,
void *data )
{
hid_t space_id;
hid_t mem_space_id;
hsize_t count[2];
int rank = 2;
hsize_t offset[2];
hsize_t stride[2] = {1, 1};
count[0] = 1;
count[1] = stop - start;
offset[0] = irow;
offset[1] = start;
/* Get the dataspace handle */
if ( (space_id = H5Dget_space( dataset_id )) < 0 )
goto out;
/* Create a memory dataspace handle */
if ( (mem_space_id = H5Screate_simple( rank, count, NULL )) < 0 )
goto out;
/* Define a hyperslab in the dataset of the size of the records */
if ( H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, stride, count, NULL) < 0 )
goto out;
/* Read */
if ( H5Dread( dataset_id, type_id, mem_space_id, space_id, H5P_DEFAULT, data ) < 0 )
goto out;
/* Terminate access to the memory dataspace */
if ( H5Sclose( mem_space_id ) < 0 )
goto out;
/* Terminate access to the dataspace */
if ( H5Sclose( space_id ) < 0 )
goto out;
return 0;
out:
H5Dclose( dataset_id );
return -1;
}
/*-------------------------------------------------------------------------
* Function: H5ARRAYOinit_readSlice
*
* Purpose: Prepare structures to read specifics arrays faster
*
* Return: Success: 0, Failure: -1
*
* Programmer: Francesc Alted, faltet@pytables.com
*
* Date: May 18, 2006
*
* Comments:
* - The H5ARRAYOinit_readSlice and H5ARRAYOread_readSlice
* are intended to read indexes slices only!
* F. Alted 2006-05-18
*
* Modifications:
*
*
*-------------------------------------------------------------------------
*/
herr_t H5ARRAYOinit_readSlice( hid_t dataset_id,
hid_t *mem_space_id,
hsize_t count)
{
hid_t space_id;
int rank = 2;
hsize_t count2[2] = {1, count};
/* Get the dataspace handle */
if ( (space_id = H5Dget_space(dataset_id )) < 0 )
goto out;
/* Create a memory dataspace handle */
if ( (*mem_space_id = H5Screate_simple(rank, count2, NULL)) < 0 )
goto out;
/* Terminate access to the dataspace */
if ( H5Sclose( space_id ) < 0 )
goto out;
return 0;
out:
H5Dclose(dataset_id);
return -1;
}
/*-------------------------------------------------------------------------
* Function: H5ARRAYOread_readSortedSlice
*
* Purpose: Read records from an opened Array
*
* Return: Success: 0, Failure: -1
*
* Programmer: Francesc Alted, faltet@pytables.com
*
* Date: Aug 11, 2005
*
* Comments:
*
* Modifications:
* - Modified to cache the mem_space_id as well.
* F. Alted 2005-08-11
*
*
*-------------------------------------------------------------------------
*/
herr_t H5ARRAYOread_readSortedSlice( hid_t dataset_id,
hid_t mem_space_id,
hid_t type_id,
hsize_t irow,
hsize_t start,
hsize_t stop,
void *data )
{
hid_t space_id;
hsize_t count[2] = {1, stop-start};
hsize_t offset[2] = {irow, start};
hsize_t stride[2] = {1, 1};
/* Get the dataspace handle */
if ( (space_id = H5Dget_space(dataset_id)) < 0 )
goto out;
/* Define a hyperslab in the dataset of the size of the records */
if ( H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, stride, count, NULL) < 0 )
goto out;
/* Read */
if ( H5Dread( dataset_id, type_id, mem_space_id, space_id, H5P_DEFAULT, data ) < 0 )
goto out;
/* Terminate access to the dataspace */
if ( H5Sclose( space_id ) < 0 )
goto out;
return 0;
out:
H5Dclose( dataset_id );
return -1;
}
/*-------------------------------------------------------------------------
* Function: H5ARRAYOread_readBoundsSlice
*
* Purpose: Read records from an opened Array
*
* Return: Success: 0, Failure: -1
*
* Programmer: Francesc Alted, faltet@pytables.com
*
* Date: Aug 19, 2005
*
* Comments: This is exactly the same as H5ARRAYOread_readSortedSlice,
* but I just want to distinguish the calls in profiles.
*
* Modifications:
*
*
*-------------------------------------------------------------------------
*/
herr_t H5ARRAYOread_readBoundsSlice( hid_t dataset_id,
hid_t mem_space_id,
hid_t type_id,
hsize_t irow,
hsize_t start,
hsize_t stop,
void *data )
{
hid_t space_id;
hsize_t count[2] = {1, stop-start};
hsize_t offset[2] = {irow, start};
hsize_t stride[2] = {1, 1};
/* Get the dataspace handle */
if ( (space_id = H5Dget_space(dataset_id)) < 0 )
goto out;
/* Define a hyperslab in the dataset of the size of the records */
if ( H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, stride, count, NULL) < 0 )
goto out;
/* Read */
if ( H5Dread( dataset_id, type_id, mem_space_id, space_id, H5P_DEFAULT, data ) < 0 )
goto out;
/* Terminate access to the dataspace */
if ( H5Sclose( space_id ) < 0 )
goto out;
return 0;
out:
H5Dclose( dataset_id );
return -1;
}
/*-------------------------------------------------------------------------
* Function: H5ARRAYreadSliceLR
*
* Purpose: Reads a slice of LR index cache from disk.
*
* Return: Success: 0, Failure: -1
*
* Programmer: Francesc Alted, faltet@pytables.com
*
* Date: August 17, 2005
*
*-------------------------------------------------------------------------
*/
herr_t H5ARRAYOreadSliceLR(hid_t dataset_id,
hid_t type_id,
hsize_t start,
hsize_t stop,
void *data)
{
hid_t space_id;
hid_t mem_space_id;
hsize_t count[1] = {stop - start};
hsize_t stride[1] = {1};
hsize_t offset[1] = {start};
/* Get the dataspace handle */
if ( (space_id = H5Dget_space(dataset_id)) < 0 )
goto out;
/* Define a hyperslab in the dataset of the size of the records */
if ( H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, stride, count, NULL) < 0 )
goto out;
/* Create a memory dataspace handle */
if ( (mem_space_id = H5Screate_simple(1, count, NULL)) < 0 )
goto out;
/* Read */
if ( H5Dread( dataset_id, type_id, mem_space_id, space_id, H5P_DEFAULT, data ) < 0 )
goto out;
/* Release resources */
/* Terminate access to the memory dataspace */
if ( H5Sclose( mem_space_id ) < 0 )
goto out;
/* Terminate access to the dataspace */
if ( H5Sclose( space_id ) < 0 )
goto out;
return 0;
out:
H5Dclose( dataset_id );
return -1;
}
Jump to Line
Something went wrong with that request. Please try again.