summaryrefslogtreecommitdiffstats
path: root/hl/src/H5DO.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2014-03-07 19:12:20 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2014-03-07 19:12:20 (GMT)
commitac0ef34a4132dcf8c27eb6731cb2686acc593205 (patch)
tree2efe1bf4d516206f806ae74016e921a3a42ee58a /hl/src/H5DO.c
parente367f64e24b95876d7c2673c7181aa12533d3f31 (diff)
downloadhdf5-ac0ef34a4132dcf8c27eb6731cb2686acc593205.zip
hdf5-ac0ef34a4132dcf8c27eb6731cb2686acc593205.tar.gz
hdf5-ac0ef34a4132dcf8c27eb6731cb2686acc593205.tar.bz2
[svn-r24769] Description:
Check in Mohamad's changes to support collective I/O on point selections, along with some other minor cleanups. Tested on: Mac OSX/64 10.9.2 (amazon) w/parallel & serial (h5committest forthcoming)
Diffstat (limited to 'hl/src/H5DO.c')
-rw-r--r--hl/src/H5DO.c122
1 files changed, 42 insertions, 80 deletions
diff --git a/hl/src/H5DO.c b/hl/src/H5DO.c
index 9cfd8c1..99dbd93 100644
--- a/hl/src/H5DO.c
+++ b/hl/src/H5DO.c
@@ -18,8 +18,14 @@
#include <assert.h>
#include <stdio.h>
-#include "H5DOprivate.h"
+/* High-level library internal header file */
+#include "H5HLprivate2.h"
+/* public LT prototypes */
+#include "H5DOpublic.h"
+
+
+
/*-------------------------------------------------------------------------
* Function: H5DOwrite_chunk
*
@@ -30,108 +36,64 @@
* Programmer: Raymond Lu
* 30 July 2012
*
- * Modifications:
*-------------------------------------------------------------------------
*/
herr_t
H5DOwrite_chunk(hid_t dset_id, hid_t dxpl_id, uint32_t filters, const hsize_t *offset,
size_t data_size, const void *buf)
{
- hbool_t created_dxpl = FALSE;
- herr_t ret_value = SUCCEED; /* Return value */
+ hbool_t created_dxpl = FALSE; /* Whether we created a DXPL */
+ hbool_t do_direct_write = TRUE; /* Flag for direct writes */
+ uint32_t data_size_32; /* Chunk data size (limited to 32-bits currently) */
+ herr_t ret_value = FAIL; /* Return value */
- if(dset_id < 0) {
- ret_value = FAIL;
+ /* Check arguments */
+ if(dset_id < 0)
goto done;
- }
-
- if(!buf) {
- ret_value = FAIL;
+ if(!buf)
goto done;
- }
-
- if(!offset) {
- ret_value = FAIL;
+ if(!offset)
goto done;
- }
-
- if(!data_size) {
- ret_value = FAIL;
+ if(!data_size)
+ goto done;
+ data_size_32 = (uint32_t)data_size;
+ if(data_size != (size_t)data_size_32)
goto done;
- }
+ /* If the user passed in a default DXPL, create one to pass to H5Dwrite() */
if(H5P_DEFAULT == dxpl_id) {
- if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) {
- ret_value = FAIL;
+ if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
goto done;
- }
-
created_dxpl = TRUE;
- }
+ } /* end if */
- if(H5DO_write_chunk(dset_id, dxpl_id, filters, offset, data_size, buf) < 0) {
- ret_value = FAIL;
+ /* Set direct write parameters */
+ if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME, &do_direct_write) < 0)
goto done;
- }
-
-done:
- if(created_dxpl) {
- if(H5Pclose(dxpl_id) < 0)
- ret_value = FAIL;
- }
-
- return ret_value;
-}
-
-/*-------------------------------------------------------------------------
- * Function: H5DO_write_chunk
- *
- * Purpose: Private function for H5DOwrite_chunk
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Raymond Lu
- * 30 July 2012
- *
- * Modifications:
- *-------------------------------------------------------------------------
- */
-herr_t
-H5DO_write_chunk(hid_t dset_id, hid_t dxpl_id, uint32_t filters, const hsize_t *offset,
- size_t data_size, const void *buf)
-{
- hbool_t do_direct_write = TRUE;
- herr_t ret_value = SUCCEED; /* Return value */
-
- if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME, &do_direct_write) < 0) {
- ret_value = FAIL;
+ if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_NAME, &filters) < 0)
goto done;
- }
-
- if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_NAME, &filters) < 0) {
- ret_value = FAIL;
+ if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_NAME, &offset) < 0)
goto done;
- }
-
- if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_NAME, &offset) < 0) {
- ret_value = FAIL;
+ if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_NAME, &data_size_32) < 0)
goto done;
- }
- if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_NAME, &data_size) < 0) {
- ret_value = FAIL;
+ /* Write chunk */
+ if(H5Dwrite(dset_id, 0, H5S_ALL, H5S_ALL, dxpl_id, buf) < 0)
goto done;
- }
- if(H5Dwrite(dset_id, 0, H5S_ALL, H5S_ALL, dxpl_id, buf) < 0) {
- ret_value = FAIL;
- goto done;
- }
+ /* Indicate success */
+ ret_value = SUCCEED;
done:
- do_direct_write = FALSE;
- if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME, &do_direct_write) < 0)
- ret_value = FAIL;
+ if(created_dxpl) {
+ if(H5Pclose(dxpl_id) < 0)
+ ret_value = FAIL;
+ } /* end if */
+ else
+ /* Reset the direct write flag on user DXPL */
+ if(H5Pset(dxpl_id, H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME, &do_direct_write) < 0)
+ ret_value = FAIL;
+
+ return(ret_value);
+} /* end H5DOwrite_chunk() */
- return ret_value;
-}