diff options
Diffstat (limited to 'src/H5Dcompact.c')
-rw-r--r-- | src/H5Dcompact.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/src/H5Dcompact.c b/src/H5Dcompact.c new file mode 100644 index 0000000..3a36edb --- /dev/null +++ b/src/H5Dcompact.c @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2000-2001 NCSA + * All rights reserved. + * + * Programmer: Raymond Lu <slu@ncsa.uiuc.edu> + * August 5, 2002 + * + * Purpose: Compact dataset I/O functions. These routines are similar + * H5F_contig_* and H5F_istore_*. + */ + +#define H5F_PACKAGE /*suppress error about including H5Fpkg */ + +#include "H5private.h" +#include "H5Eprivate.h" +#include "H5Fpkg.h" +#include "H5Oprivate.h" +#include "H5FDprivate.h" /*file driver */ +#include "H5FLprivate.h" /*Free Lists */ + +/* Interface initialization */ +#define PABLO_MASK H5Fcompact_mask +static int interface_initialize_g = 0; +#define INTERFACE_INIT NULL + +/*------------------------------------------------------------------------- + * Function: H5F_compact_readv + * + * Purpose: Reads some data vectors from a dataset into a buffer. + * The data is in compact dataset. The address is relative + * to the beginning address of the dataset. The offsets and + * sequence lengths are in bytes. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Raymond Lu + * August 5, 2002 + * + * Notes: + * Offsets in the sequences must be monotonically increasing + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +herr_t +H5F_compact_readv(H5F_t *f, const H5O_layout_t *layout, size_t nseq, + size_t size_arr[], hsize_t offset_arr[], + hid_t dxpl_id, void *_buf/*out*/) +{ + unsigned char *buf=(unsigned char *)_buf; + size_t size; + haddr_t offset; + unsigned u; + herr_t ret_value=SUCCEED; + + FUNC_ENTER_NOAPI(H5F_compact_readv, FAIL); + + for(u=0; u<nseq; u++) { + size=size_arr[u]; + offset=offset_arr[u]; + if(size > 0) { + HDmemcpy(buf, (unsigned char*)layout->buf+offset, size); + buf +=size; + } + } + +done: + FUNC_LEAVE(ret_value); +} /* end H5F_compact_readv() */ + +/*------------------------------------------------------------------------- + * Function: H5F_compact_writev + * + * Purpose: Writes some data vectors from a dataset into a buffer. + * The data is in compact dataset. The address is relative + * to the beginning address for the file. The offsets and + * sequence lengths are in bytes. This function only copies + * data into the buffer in the LAYOUT struct and mark it + * as DIRTY. Later in H5D_close, the data is copied into + * header message in memory. + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Raymond Lu + * August 5, 2002 + * + * Notes: + * Offsets in the sequences must be monotonically increasing + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +herr_t +H5F_compact_writev(H5F_t *f, H5O_layout_t *layout, size_t nseq, + size_t size_arr[], hsize_t offset_arr[], + hid_t dxpl_id, const void *_buf) +{ + unsigned char *buf=(unsigned char *)_buf; + size_t size; + haddr_t offset; + unsigned u; + herr_t ret_value=SUCCEED; + + FUNC_ENTER_NOAPI(H5F_compact_writev, FAIL); + + for(u=0; u<nseq; u++) { + size=size_arr[u]; + offset=offset_arr[u]; + if(size > 0) { + HDmemcpy((unsigned char*)layout->buf+offset, buf, size); + buf += size; + } + } + + layout->dirty = TRUE; + +done: + FUNC_LEAVE(ret_value); +} /* end H5F_compact_writev */ |