diff options
-rw-r--r-- | src/.distdep | 178 | ||||
-rw-r--r-- | src/H5Ssimp.c | 776 |
2 files changed, 89 insertions, 865 deletions
diff --git a/src/.distdep b/src/.distdep index 062f38a..b402f5a 100644 --- a/src/.distdep +++ b/src/.distdep @@ -117,39 +117,6 @@ H5Fstdio.o: \ H5Dpublic.h \ H5MMprivate.h \ H5MMpublic.h -H5G.o: \ - H5G.c \ - H5private.h \ - H5public.h \ - H5config.h \ - H5Bprivate.h \ - H5Bpublic.h \ - H5Fprivate.h \ - H5Fpublic.h \ - H5Ipublic.h \ - H5Dpublic.h \ - H5Dprivate.h \ - H5Gprivate.h \ - H5Gpublic.h \ - H5Oprivate.h \ - H5Opublic.h \ - H5HGprivate.h \ - H5HGpublic.h \ - H5Tprivate.h \ - H5Tpublic.h \ - H5Sprivate.h \ - H5Spublic.h \ - H5Zprivate.h \ - H5Zpublic.h \ - H5Eprivate.h \ - H5Epublic.h \ - H5Gpkg.h \ - H5ACprivate.h \ - H5ACpublic.h \ - H5HLprivate.h \ - H5HLpublic.h \ - H5Iprivate.h \ - H5MMprivate.h H5Gent.o: \ H5Gent.c \ H5private.h \ @@ -886,39 +853,6 @@ H5.o: \ H5HGpublic.h \ H5Tprivate.h \ H5Tpublic.h -H5D.o: \ - H5D.c \ - H5private.h \ - H5public.h \ - H5config.h \ - H5Iprivate.h \ - H5Ipublic.h \ - H5ACprivate.h \ - H5ACpublic.h \ - H5Fprivate.h \ - H5Fpublic.h \ - H5Dpublic.h \ - H5Dprivate.h \ - H5Gprivate.h \ - H5Gpublic.h \ - H5Bprivate.h \ - H5Bpublic.h \ - H5Oprivate.h \ - H5Opublic.h \ - H5HGprivate.h \ - H5HGpublic.h \ - H5Tprivate.h \ - H5Tpublic.h \ - H5Sprivate.h \ - H5Spublic.h \ - H5Zprivate.h \ - H5Zpublic.h \ - H5Eprivate.h \ - H5Epublic.h \ - H5HLprivate.h \ - H5HLpublic.h \ - H5MFprivate.h \ - H5MFpublic.h H5Odtype.o: \ H5Odtype.c \ H5private.h \ @@ -942,29 +876,6 @@ H5Odtype.o: \ H5HGpublic.h \ H5Tprivate.h \ H5Tpublic.h -H5S.o: \ - H5S.c \ - H5private.h \ - H5public.h \ - H5config.h \ - H5Iprivate.h \ - H5Ipublic.h \ - H5Eprivate.h \ - H5Epublic.h \ - H5MMprivate.h \ - H5MMpublic.h \ - H5Oprivate.h \ - H5Opublic.h \ - H5Fprivate.h \ - H5Fpublic.h \ - H5Dpublic.h \ - H5Gprivate.h \ - H5Gpublic.h \ - H5Bprivate.h \ - H5Bpublic.h \ - H5HGprivate.h \ - H5HGpublic.h \ - H5Tprivate.h H5Sall.o: \ H5Sall.c \ H5private.h \ @@ -1117,3 +1028,92 @@ H5Fistore.o: \ H5Epublic.h \ H5MFprivate.h \ H5MFpublic.h +H5D.o: \ + H5D.c \ + H5private.h \ + H5public.h \ + H5config.h \ + H5Iprivate.h \ + H5Ipublic.h \ + H5ACprivate.h \ + H5ACpublic.h \ + H5Fprivate.h \ + H5Fpublic.h \ + H5Dpublic.h \ + H5Dprivate.h \ + H5Gprivate.h \ + H5Gpublic.h \ + H5Bprivate.h \ + H5Bpublic.h \ + H5Oprivate.h \ + H5Opublic.h \ + H5HGprivate.h \ + H5HGpublic.h \ + H5Tprivate.h \ + H5Tpublic.h \ + H5Sprivate.h \ + H5Spublic.h \ + H5Zprivate.h \ + H5Zpublic.h \ + H5Eprivate.h \ + H5Epublic.h \ + H5HLprivate.h \ + H5HLpublic.h \ + H5MFprivate.h \ + H5MFpublic.h +H5G.o: \ + H5G.c \ + H5private.h \ + H5public.h \ + H5config.h \ + H5Bprivate.h \ + H5Bpublic.h \ + H5Fprivate.h \ + H5Fpublic.h \ + H5Ipublic.h \ + H5Dpublic.h \ + H5Dprivate.h \ + H5Gprivate.h \ + H5Gpublic.h \ + H5Oprivate.h \ + H5Opublic.h \ + H5HGprivate.h \ + H5HGpublic.h \ + H5Tprivate.h \ + H5Tpublic.h \ + H5Sprivate.h \ + H5Spublic.h \ + H5Zprivate.h \ + H5Zpublic.h \ + H5Eprivate.h \ + H5Epublic.h \ + H5Gpkg.h \ + H5ACprivate.h \ + H5ACpublic.h \ + H5HLprivate.h \ + H5HLpublic.h \ + H5Iprivate.h \ + H5MMprivate.h +H5S.o: \ + H5S.c \ + H5private.h \ + H5public.h \ + H5config.h \ + H5Iprivate.h \ + H5Ipublic.h \ + H5Eprivate.h \ + H5Epublic.h \ + H5MMprivate.h \ + H5MMpublic.h \ + H5Oprivate.h \ + H5Opublic.h \ + H5Fprivate.h \ + H5Fpublic.h \ + H5Dpublic.h \ + H5Gprivate.h \ + H5Gpublic.h \ + H5Bprivate.h \ + H5Bpublic.h \ + H5HGprivate.h \ + H5HGpublic.h \ + H5Tprivate.h diff --git a/src/H5Ssimp.c b/src/H5Ssimp.c deleted file mode 100644 index 40981fb..0000000 --- a/src/H5Ssimp.c +++ /dev/null @@ -1,776 +0,0 @@ -/* - * Copyright (C) 1998 NCSA - * All rights reserved. - * - * Programmer: Robb Matzke <matzke@llnl.gov> - * Wednesday, January 21, 1998 - * - * Purpose: Simple selection data space I/O functions. - */ -#include <H5private.h> -#include <H5Eprivate.h> -#include <H5Sprivate.h> -#include <H5Vprivate.h> - -/* Interface initialization */ -#define PABLO_MASK H5S_simp_mask -#define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; - -/*------------------------------------------------------------------------- - * Function: H5S_simp_init - * - * Purpose: Generates element numbering information for the data - * spaces involved in a data space conversion. - * - * Return: Success: Number of elements that can be efficiently - * transferred at a time. - * - * Failure: Zero - * - * Programmer: Robb Matzke - * Wednesday, January 21, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -size_t -H5S_simp_init (const struct H5O_layout_t __unused__ *layout, - const H5S_t *mem_space, const H5S_t *file_space, - size_t desired_nelmts) -{ - hsize_t nelmts; - int m_ndims, f_ndims; /*mem, file dimensionality */ - hsize_t size[H5O_LAYOUT_NDIMS]; /*size of selected hyperslab */ - hsize_t acc; - int i; - - FUNC_ENTER (H5S_simp_init, 0); - - /* Check args */ - assert (layout); - assert (mem_space && H5S_SIMPLE==mem_space->extent.type); - assert (file_space && H5S_SIMPLE==file_space->extent.type); - - /* - * The stripmine size is such that only the slowest varying dimension can - * be split up. We choose the largest possible strip mine size which is - * not larger than the desired size. - */ - m_ndims = H5S_get_hyperslab (mem_space, NULL, size, NULL); - for (i=m_ndims-1, acc=1; i>0; --i) acc *= size[i]; - nelmts = (desired_nelmts/acc) * acc; - if (nelmts<=0) { - HRETURN_ERROR (H5E_IO, H5E_UNSUPPORTED, 0, - "strip mine buffer is too small"); - } - - /* - * The value chosen for mem_space must be the same as the value chosen for - * file_space. - */ - f_ndims = H5S_get_hyperslab (file_space, NULL, size, NULL); - if (m_ndims!=f_ndims) { - nelmts = H5S_select_npoints (file_space); - if (nelmts>desired_nelmts) { - HRETURN_ERROR (H5E_IO, H5E_UNSUPPORTED, 0, - "strip mining not supported across dimensionalities"); - } - assert (nelmts==H5S_select_npoints (mem_space)); - } else { - for (i=f_ndims-1, acc=1; i>0; --i) acc *= size[i]; - acc *= (desired_nelmts/acc); - if (nelmts!=acc) { - HRETURN_ERROR (H5E_IO, H5E_UNSUPPORTED, 0, - "unsupported strip mine size for shape change"); - } - } - - assert (nelmts < MAX_SIZET); - FUNC_LEAVE ((size_t)nelmts); -} - -/*------------------------------------------------------------------------- - * Function: H5S_simp_fgath - * - * Purpose: Gathers data points from file F and accumulates them in the - * type conversion buffer BUF. The LAYOUT argument describes - * how the data is stored on disk and EFL describes how the data - * is organized in external files. ELMT_SIZE is the size in - * bytes of a datum which this function treats as opaque. - * FILE_SPACE describes the data space of the dataset on disk - * and the elements that have been selected for reading (via - * hyperslab, etc) and NUMBERING describes how those elements - * are numbered (initialized by the H5S_*_init() call). This - * function will copy at most NELMTS elements beginning at the - * element numbered START. - * - * Return: Success: Number of elements copied. - * - * Failure: 0 - * - * Programmer: Robb Matzke - * Wednesday, January 21, 1998 - * - * Modifications: - * June 2, 1998 Albert Cheng - * Added xfer_mode argument - * - *------------------------------------------------------------------------- - */ -size_t -H5S_simp_fgath (H5F_t *f, const struct H5O_layout_t *layout, - const struct H5O_pline_t *pline, const struct H5O_efl_t *efl, - size_t elmt_size, const H5S_t *file_space, - size_t start, size_t nelmts, - const H5D_transfer_t xfer_mode, void *buf/*out*/) -{ - hssize_t file_offset[H5O_LAYOUT_NDIMS]; /*offset of slab in file*/ - hsize_t hsize[H5O_LAYOUT_NDIMS]; /*size of hyperslab */ - hssize_t zero[H5O_LAYOUT_NDIMS]; /*zero */ - hsize_t sample[H5O_LAYOUT_NDIMS]; /*hyperslab sampling */ - hsize_t acc; /*accumulator */ - intn space_ndims; /*dimensionality of space*/ - intn i; /*counters */ - - FUNC_ENTER (H5S_simp_fgath, 0); - - /* Check args */ - assert (f); - assert (layout); - assert (elmt_size>0); - assert (file_space); - assert (nelmts>0); - assert (buf); - - /* - * Get hyperslab information to determine what elements are being - * selected (there might eventually be other selection methods too). - * We only support hyperslabs with unit sample because there's no way to - * currently pass sample information into H5F_arr_read() much less - * H5F_istore_read(). - */ - if ((space_ndims=H5S_get_hyperslab (file_space, file_offset, - hsize, sample))<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, 0, - "unable to retrieve hyperslab parameters"); - } - - /* Check that there is no subsampling of the hyperslab */ - for (i=0; i<space_ndims; i++) { - if (sample[i]!=1) { - HRETURN_ERROR (H5E_ARGS, H5E_BADVALUE, 0, - "hyperslab sampling is not implemented yet"); - } - } - - /* Adjust the slowest varying dimension to take care of strip mining */ - for (i=1, acc=1; i<space_ndims; i++) acc *= hsize[i]; - assert (0==start % acc); - assert (0==nelmts % acc); - file_offset[0] += start / acc; - hsize[0] = nelmts / acc; - - /* The fastest varying dimension is for the data point itself */ - file_offset[space_ndims] = 0; - hsize[space_ndims] = elmt_size; - HDmemset (zero, 0, layout->ndims*sizeof(*zero)); - - /* - * Gather from file. - */ - if (H5F_arr_read (f, layout, pline, efl, hsize, hsize, zero, file_offset, - xfer_mode, buf/*out*/)<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_READERROR, 0, "read error"); - } - - FUNC_LEAVE (nelmts); -} - -/*------------------------------------------------------------------------- - * Function: H5S_simp_mscat - * - * Purpose: Scatters data points from the type conversion buffer - * TCONV_BUF to the application buffer BUF. Each element is - * ELMT_SIZE bytes and they are organized in application memory - * according to MEM_SPACE. The NUMBERING information together - * with START and NELMTS describe how the elements stored in - * TCONV_BUF are globally numbered. - * - * Return: Success: SUCCEED - * - * Failure: FAIL - * - * Programmer: Robb Matzke - * Wednesday, January 21, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -herr_t -H5S_simp_mscat (const void *tconv_buf, size_t elmt_size, - const H5S_t *mem_space, - size_t start, size_t nelmts, void *buf/*out*/) -{ - hssize_t mem_offset[H5O_LAYOUT_NDIMS]; /*slab offset in app buf*/ - hsize_t mem_size[H5O_LAYOUT_NDIMS]; /*total size of app buf */ - hsize_t hsize[H5O_LAYOUT_NDIMS]; /*size of hyperslab */ - hssize_t zero[H5O_LAYOUT_NDIMS]; /*zero */ - hsize_t sample[H5O_LAYOUT_NDIMS]; /*hyperslab sampling */ - hsize_t acc; /*accumulator */ - intn space_ndims; /*dimensionality of space*/ - intn i; /*counters */ - - FUNC_ENTER (H5S_simp_mscat, FAIL); - - /* Check args */ - assert (tconv_buf); - assert (elmt_size>0); - assert (mem_space && H5S_SIMPLE==mem_space->extent.type); - assert (nelmts>0); - assert (buf); - - /* - * Retrieve hyperslab information to determine what elements are being - * selected (there might be other selection methods in the future). We - * only handle hyperslabs with unit sample because there's currently no - * way to pass sample information to H5V_hyper_copy(). - */ - if ((space_ndims=H5S_get_hyperslab (mem_space, mem_offset, hsize, - sample))<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, - "unable to retrieve hyperslab parameters"); - } - - /* Check that there is no subsampling of the hyperslab */ - for (i=0; i<space_ndims; i++) { - if (sample[i]!=1) { - HRETURN_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, - "hyperslab sampling is not implemented yet"); - } - } - if (H5S_extent_dims (mem_space, mem_size, NULL)<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, - "unable to retrieve data space dimensions"); - } - - /* Adjust the slowest varying dimension to take care of strip mining */ - for (i=1, acc=1; i<space_ndims; i++) acc *= hsize[i]; - assert (0==start % acc); - assert (0==nelmts % acc); - mem_offset[0] += start / acc; - hsize[0] = nelmts / acc; - - /* The fastest varying dimension is for the data point itself */ - mem_offset[space_ndims] = 0; - mem_size[space_ndims] = elmt_size; - hsize[space_ndims] = elmt_size; - HDmemset (zero, 0, (space_ndims+1)*sizeof(*zero)); - - /* - * Scatter from conversion buffer to application memory. - */ - if (H5V_hyper_copy (space_ndims+1, hsize, mem_size, mem_offset, buf, - hsize, zero, tconv_buf)<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, - "unable to scatter data to memory"); - } - - FUNC_LEAVE (SUCCEED); -} - -/*------------------------------------------------------------------------- - * Function: H5S_simp_mgath - * - * Purpose: Gathers dataset elements from application memory BUF and - * copies them into the data type conversion buffer TCONV_BUF. - * Each element is ELMT_SIZE bytes and arranged in application - * memory according to MEM_SPACE. The elements selected from - * BUF by MEM_SPACE are numbered according to NUMBERING and the - * caller is requesting that at most NELMTS be gathered - * beginning with number START. The elements are packed into - * TCONV_BUF in order of their NUMBERING. - * - * Return: Success: Number of elements copied. - * - * Failure: 0 - * - * Programmer: Robb Matzke - * Wednesday, January 21, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -size_t -H5S_simp_mgath (const void *buf, size_t elmt_size, - const H5S_t *mem_space, - size_t start, size_t nelmts, void *tconv_buf/*out*/) -{ - hssize_t mem_offset[H5O_LAYOUT_NDIMS]; /*slab offset in app buf*/ - hsize_t mem_size[H5O_LAYOUT_NDIMS]; /*total size of app buf */ - hsize_t hsize[H5O_LAYOUT_NDIMS]; /*size of hyperslab */ - hssize_t zero[H5O_LAYOUT_NDIMS]; /*zero */ - hsize_t sample[H5O_LAYOUT_NDIMS]; /*hyperslab sampling */ - hsize_t acc; /*accumulator */ - intn space_ndims; /*dimensionality of space*/ - intn i; /*counters */ - - FUNC_ENTER (H5S_simp_mgath, 0); - - /* Check args */ - assert (buf); - assert (elmt_size>0); - assert (mem_space && H5S_SIMPLE==mem_space->extent.type); - assert (nelmts>0); - assert (tconv_buf); - - /* - * Retrieve hyperslab information to determine what elements are being - * selected (there might be other selection methods in the future). We - * only handle hyperslabs with unit sample because there's currently no - * way to pass sample information to H5V_hyper_copy(). - */ - if ((space_ndims=H5S_get_hyperslab (mem_space, mem_offset, hsize, - sample))<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, 0, - "unable to retrieve hyperslab parameters"); - } - - /* Check that there is no subsampling of the hyperslab */ - for (i=0; i<space_ndims; i++) { - if (sample[i]!=1) { - HRETURN_ERROR (H5E_ARGS, H5E_BADVALUE, 0, - "hyperslab sampling is not implemented yet"); - } - } - if (H5S_extent_dims (mem_space, mem_size, NULL)<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, 0, - "unable to retrieve data space dimensions"); - } - - /* Adjust the slowest varying dimension to account for strip mining */ - for (i=1, acc=1; i<space_ndims; i++) acc *= hsize[i]; - assert (0==start % acc); - assert (0==nelmts % acc); - mem_offset[0] += start / acc; - hsize[0] = nelmts / acc; - - /* The fastest varying dimension is for the data point itself */ - mem_offset[space_ndims] = 0; - mem_size[space_ndims] = elmt_size; - hsize[space_ndims] = elmt_size; - HDmemset (zero, 0, (space_ndims+1)*sizeof(*zero)); - - /* - * Scatter from conversion buffer to application memory. - */ - if (H5V_hyper_copy (space_ndims+1, hsize, hsize, zero, tconv_buf, - mem_size, mem_offset, buf)<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, 0, - "unable to scatter data to memory"); - } - - FUNC_LEAVE (nelmts); -} - -/*------------------------------------------------------------------------- - * Function: H5S_simp_fscat - * - * Purpose: Scatters dataset elements from the type conversion buffer BUF - * to the file F where the data points are arranged according to - * the file data space FILE_SPACE and stored according to - * LAYOUT and EFL. Each element is ELMT_SIZE bytes and has a - * unique number according to NUMBERING. The caller is - * requesting that NELMTS elements are coppied beginning with - * element number START. - * - * Return: Success: SUCCEED - * - * Failure: FAIL - * - * Programmer: Robb Matzke - * Wednesday, January 21, 1998 - * - * Modifications: - * June 2, 1998 Albert Cheng - * Added xfer_mode argument - * - *------------------------------------------------------------------------- - */ -herr_t -H5S_simp_fscat (H5F_t *f, const struct H5O_layout_t *layout, - const struct H5O_pline_t *pline, const struct H5O_efl_t *efl, - size_t elmt_size, const H5S_t *file_space, - size_t start, size_t nelmts, - const H5D_transfer_t xfer_mode, const void *buf) -{ - hssize_t file_offset[H5O_LAYOUT_NDIMS]; /*offset of hyperslab */ - hsize_t hsize[H5O_LAYOUT_NDIMS]; /*size of hyperslab */ - hssize_t zero[H5O_LAYOUT_NDIMS]; /*zero vector */ - hsize_t sample[H5O_LAYOUT_NDIMS]; /*hyperslab sampling */ - hsize_t acc; /*accumulator */ - intn space_ndims; /*space dimensionality */ - intn i; /*counters */ - - FUNC_ENTER (H5S_simp_fscat, FAIL); - - /* Check args */ - assert (f); - assert (layout); - assert (elmt_size>0); - assert (file_space); - assert (nelmts>0); - assert (buf); - - /* - * Get hyperslab information to determine what elements are being - * selected (there might eventually be other selection methods too). - * We only support hyperslabs with unit sample because there's no way to - * currently pass sample information into H5F_arr_read() much less - * H5F_istore_read(). - */ - if ((space_ndims=H5S_get_hyperslab (file_space, file_offset, hsize, - sample))<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, - "unable to retrieve hyperslab parameters"); - } - - /* Check that there is no subsampling of the hyperslab */ - for (i=0; i<space_ndims; i++) { - if (sample[i]!=1) { - HRETURN_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, - "hyperslab sampling is not implemented yet"); - } - } - - /* Adjust the slowest varying dimension to account for strip mining */ - for (i=1, acc=1; i<space_ndims; i++) acc *= hsize[i]; - assert (0==start % acc); - assert (0==nelmts % acc); - file_offset[0] += start / acc; - hsize[0] = nelmts / acc; - - /* The fastest varying dimension is for the data point itself */ - file_offset[space_ndims] = 0; - hsize[space_ndims] = elmt_size; - HDmemset (zero, 0, layout->ndims*sizeof(*zero)); - - /* - * Scatter to file. - */ - if (H5F_arr_write (f, layout, pline, efl, hsize, hsize, zero, - file_offset, xfer_mode, buf)<0) { - HRETURN_ERROR (H5E_DATASPACE, H5E_WRITEERROR, FAIL, "write error"); - } - - FUNC_LEAVE (SUCCEED); -} - - -/*------------------------------------------------------------------------- - * Function: H5S_simp_read - * - * Purpose: Reads a dataset from file F directly into application memory - * BUF performing data space conversion in a single step from - * FILE_SPACE to MEM_SPACE. The dataset is stored in the file - * according to the LAYOUT and EFL (external file list) and data - * point in the file is ELMT_SIZE bytes. - * - * Return: Success: SUCCEED - * - * Failure: FAIL - * - * Programmer: Robb Matzke - * Thursday, March 12, 1998 - * - * Modifications: - * June 2, 1998 Albert Cheng - * Added xfer_mode argument - * - *------------------------------------------------------------------------- - */ -herr_t -H5S_simp_read (H5F_t *f, const struct H5O_layout_t *layout, - const struct H5O_pline_t *pline, const struct H5O_efl_t *efl, - size_t elmt_size, const H5S_t *file_space, - const H5S_t *mem_space, const H5D_transfer_t xfer_mode, - void *buf/*out*/) -{ - hssize_t file_offset[H5O_LAYOUT_NDIMS]; - hsize_t hslab_size[H5O_LAYOUT_NDIMS]; - hssize_t mem_offset[H5O_LAYOUT_NDIMS]; - hsize_t mem_size[H5O_LAYOUT_NDIMS]; - int i; - - FUNC_ENTER (H5S_simp_read, FAIL); - -#ifndef NDEBUG - assert (file_space->extent.type==mem_space->extent.type); - assert (file_space->extent.u.simple.rank==mem_space->extent.u.simple.rank); - for (i=0; i<file_space->extent.u.simple.rank; i++) { -#ifdef FIXME - if (file_space->hslab_def && mem_space->hslab_def) { - assert (1==file_space->h.stride[i]); - assert (1==mem_space->h.stride[i]); - assert (file_space->h.count[i]==mem_space->h.count[i]); - } else if (file_space->hslab_def) { - assert (1==file_space->h.stride[i]); - assert (file_space->h.count[i]==mem_space->u.simple.size[i]); - } else if (mem_space->hslab_def) { - assert (1==mem_space->h.stride[i]); - assert (file_space->u.simple.size[i]==mem_space->h.count[i]); - } else { - assert (file_space->u.simple.size[i]== - mem_space->u.simple.size[i]); - } -#endif - } -#endif - - - /* - * Calculate size of hyperslab and offset of hyperslab into file and - * memory. - */ - switch(file_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<file_space->extent.u.simple.rank; i++) - hslab_size[i] = file_space->extent.u.simple.size[i]; - break; - } /* end switch */ - - switch(mem_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<mem_space->extent.u.simple.rank; i++) - mem_size[i] = mem_space->extent.u.simple.size[i]; - break; - } /* end switch */ - - switch(file_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ -#ifdef LATER - for (i=0; i<file_space->u.simple.rank; i++) - file_offset[i] = file_space->h.start[i]; -#endif - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<file_space->extent.u.simple.rank; i++) - file_offset[i] = 0; - break; - } /* end switch */ - - switch(mem_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ -#ifdef LATER - for (i=0; i<mem_space->u.simple.rank; i++) - mem_offset[i] = mem_space->h.start[i]; -#endif - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<mem_space->extent.u.simple.rank; i++) - mem_offset[i] = 0; - break; - } /* end switch */ - - hslab_size[file_space->extent.u.simple.rank] = elmt_size; - mem_size[file_space->extent.u.simple.rank] = elmt_size; - file_offset[file_space->extent.u.simple.rank] = 0; - mem_offset[file_space->extent.u.simple.rank] = 0; - - /* Read the hyperslab */ - if (H5F_arr_read (f, layout, pline, efl, hslab_size, - mem_size, mem_offset, file_offset, xfer_mode, buf)<0) { - HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL, "unable to read dataset"); - } - - FUNC_LEAVE (SUCCEED); -} - - -/*------------------------------------------------------------------------- - * Function: H5S_simp_write - * - * Purpose: Write a dataset from application memory BUF directly into - * file F performing data space conversion in a single step from - * MEM_SPACE to FILE_SPACE. The dataset is stored in the file - * according to the LAYOUT and EFL (external file list) and data - * point in the file is ELMT_SIZE bytes. - * - * Return: Success: SUCCEED - * - * Failure: FAIL - * - * Programmer: Robb Matzke - * Thursday, March 12, 1998 - * - * Modifications: - * June 2, 1998 Albert Cheng - * Added xfer_mode argument - * - *------------------------------------------------------------------------- - */ -herr_t -H5S_simp_write (H5F_t *f, const struct H5O_layout_t *layout, - const struct H5O_pline_t *pline, const struct H5O_efl_t *efl, - size_t elmt_size, const H5S_t *file_space, - const H5S_t *mem_space, const H5D_transfer_t xfer_mode, - const void *buf) -{ - hssize_t file_offset[H5O_LAYOUT_NDIMS]; - hsize_t hslab_size[H5O_LAYOUT_NDIMS]; - hssize_t mem_offset[H5O_LAYOUT_NDIMS]; - hsize_t mem_size[H5O_LAYOUT_NDIMS]; - int i; - - FUNC_ENTER (H5S_simp_write, FAIL); - -#ifndef NDEBUG - assert (file_space->extent.type==mem_space->extent.type); - assert (file_space->extent.u.simple.rank==mem_space->extent.u.simple.rank); -#ifdef LATER - for (i=0; i<file_space->u.simple.rank; i++) { - if (file_space->hslab_def && mem_space->hslab_def) { - assert (1==file_space->h.stride[i]); - assert (1==mem_space->h.stride[i]); - assert (file_space->h.count[i]==mem_space->h.count[i]); - } else if (file_space->hslab_def) { - assert (1==file_space->h.stride[i]); - assert (file_space->h.count[i]==mem_space->u.simple.size[i]); - } else if (mem_space->hslab_def) { - assert (1==mem_space->h.stride[i]); - assert (file_space->u.simple.size[i]==mem_space->h.count[i]); - } else { - assert (file_space->u.simple.size[i]== - mem_space->u.simple.size[i]); - } - } -#endif -#endif - - - /* - * Calculate size of hyperslab and offset of hyperslab into file and - * memory. - */ - switch(file_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<file_space->extent.u.simple.rank; i++) - hslab_size[i] = file_space->extent.u.simple.size[i]; - break; - } /* end switch */ - - switch(mem_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<mem_space->extent.u.simple.rank; i++) - mem_size[i] = mem_space->extent.u.simple.size[i]; - break; - } /* end switch */ - - switch(file_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ -#ifdef LATER - for (i=0; i<file_space->u.simple.rank; i++) - file_offset[i] = file_space->h.start[i]; -#endif - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<file_space->extent.u.simple.rank; i++) - file_offset[i] = 0; - break; - } /* end switch */ - - switch(mem_space->select.type) { - case H5S_SEL_NONE: /* no selection defined */ - HRETURN_ERROR (H5E_DATASPACE, H5E_BADVALUE, FAIL, - "selection not defined"); - - case H5S_SEL_POINTS: /* point sequence selection defined */ - case H5S_SEL_HYPERSLABS: /* hyperslab selection defined */ -#ifdef LATER - for (i=0; i<mem_space->u.simple.rank; i++) - mem_offset[i] = mem_space->h.start[i]; -#endif - HRETURN_ERROR (H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, - "selection type not supprted currently"); - - case H5S_SEL_ALL: /* entire dataspace selection */ - for (i=0; i<mem_space->extent.u.simple.rank; i++) - mem_offset[i] = 0; - break; - } /* end switch */ - - hslab_size[file_space->extent.u.simple.rank] = elmt_size; - mem_size[file_space->extent.u.simple.rank] = elmt_size; - file_offset[file_space->extent.u.simple.rank] = 0; - mem_offset[file_space->extent.u.simple.rank] = 0; - - /* Write the hyperslab */ - if (H5F_arr_write (f, layout, pline, efl, hslab_size, - mem_size, mem_offset, file_offset, xfer_mode, buf)<0) { - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, - "unable to write dataset"); - } - - FUNC_LEAVE (SUCCEED); -} - |