/* * Copyright (C) 2000-2001 NCSA * All rights reserved. * * Programmer: Raymond Lu * 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 UNUSED *f, const H5O_layout_t *layout, size_t nseq, size_t size_arr[], hsize_t offset_arr[], hid_t UNUSED 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 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 UNUSED *f, H5O_layout_t *layout, size_t nseq, size_t size_arr[], hsize_t offset_arr[], hid_t UNUSED dxpl_id, const void *_buf) { const unsigned char *buf=(const 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 0) { HDmemcpy((unsigned char*)layout->buf+offset, buf, size); buf += size; } } layout->dirty = TRUE; done: FUNC_LEAVE(ret_value); } /* end H5F_compact_writev */