summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-04-27 22:15:14 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-04-27 22:15:14 (GMT)
commitb9ca2f8f6f045b4a4d08b4412910c65966e42616 (patch)
treefae192480a7479bee052e6d996e6654046480a1b /src
parent6c5e42a96720ccd4c7b517af8c00c658112dc7af (diff)
downloadhdf5-b9ca2f8f6f045b4a4d08b4412910c65966e42616.zip
hdf5-b9ca2f8f6f045b4a4d08b4412910c65966e42616.tar.gz
hdf5-b9ca2f8f6f045b4a4d08b4412910c65966e42616.tar.bz2
[svn-r18650] Description:
Bring back various minor tweaks & cleanups from the revise_chunks branch. Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (amani) w/Intel compilers, w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
Diffstat (limited to 'src')
-rw-r--r--src/H5C.c7
-rw-r--r--src/H5D.c1
-rw-r--r--src/H5Dbtree.c1
-rw-r--r--src/H5Dchunk.c3
-rw-r--r--src/H5Dcontig.c1
-rw-r--r--src/H5Ddbg.c1
-rw-r--r--src/H5Ddeprec.c1
-rw-r--r--src/H5Dfill.c1
-rw-r--r--src/H5Dint.c4
-rw-r--r--src/H5Dlayout.c2
-rw-r--r--src/H5Dpkg.h1
-rw-r--r--src/H5EA.c6
-rw-r--r--src/H5EAtest.c2
-rw-r--r--src/H5FA.c2
-rw-r--r--src/H5FApkg.h2
-rw-r--r--src/H5FDcore.c2
-rw-r--r--src/H5FDdirect.c2
-rw-r--r--src/H5FDlog.c2
-rw-r--r--src/H5FDmpiposix.c2
-rw-r--r--src/H5FDstdio.c4
-rw-r--r--src/H5FDwindows.c2
-rw-r--r--src/H5Fsuper_cache.c2
-rw-r--r--src/H5O.c4
-rw-r--r--src/H5Oalloc.c5
-rw-r--r--src/H5Olayout.c7
-rw-r--r--src/H5Opkg.h1
-rw-r--r--src/H5Oprivate.h9
-rw-r--r--src/H5V.c69
-rw-r--r--src/H5Vprivate.h2
29 files changed, 95 insertions, 53 deletions
diff --git a/src/H5C.c b/src/H5C.c
index 5c8a8cd..2289a42 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -5957,8 +5957,8 @@ H5C_adjust_flush_dependency_rc(H5C_cache_entry_t * cache_entry,
* Function: H5C_create_flush_dependency()
*
* Purpose: Initiates a parent<->child entry flush dependency. The parent
- * entry must be protected at the time of call, and must have all
- * dependencies removed before the cache can shut down.
+ * entry must be pinned or protected at the time of call, and must
+ * have all dependencies removed before the cache can shut down.
*
* Note: Flush dependencies in the cache indicate that a child entry
* must be flushed to the file before its parent. (This is
@@ -5971,8 +5971,7 @@ H5C_adjust_flush_dependency_rc(H5C_cache_entry_t * cache_entry,
* dependency height of its children.
*
* Creating a flush dependency between two entries will also pin
- * the parent entry. (The parent entry must _not_ be pinned
- * through some other mechanism)
+ * the parent entry.
*
* Return: Non-negative on success/Negative on failure
*
diff --git a/src/H5D.c b/src/H5D.c
index da8b0a6..30ce594 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -27,7 +27,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dpkg.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
#include "H5FLprivate.h" /* Free lists */
diff --git a/src/H5Dbtree.c b/src/H5Dbtree.c
index a7e61ce..374c1b6 100644
--- a/src/H5Dbtree.c
+++ b/src/H5Dbtree.c
@@ -33,7 +33,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Bprivate.h" /* B-link trees */
#include "H5Dpkg.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 2e0b096..9b9298e 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -51,7 +51,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dpkg.h" /* Dataset functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5FLprivate.h" /* Free Lists */
@@ -511,7 +510,7 @@ H5D_chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset, hid_t dapl_id)
if(dset->shared->layout.storage.u.chunk.ops->init && (dset->shared->layout.storage.u.chunk.ops->init)(&idx_info, dset->shared->space, dset->oloc.addr) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize indexing information")
- /* Set the number of chunks in dataset */
+ /* Set the number of chunks in dataset, etc. */
if(H5D_chunk_set_info(dset) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set # of chunks for dataset")
diff --git a/src/H5Dcontig.c b/src/H5Dcontig.c
index ca3b09e..567f4c9 100644
--- a/src/H5Dcontig.c
+++ b/src/H5Dcontig.c
@@ -34,7 +34,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dpkg.h" /* Dataset functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fprivate.h" /* Files */
diff --git a/src/H5Ddbg.c b/src/H5Ddbg.c
index 2feb773..fa4c54c 100644
--- a/src/H5Ddbg.c
+++ b/src/H5Ddbg.c
@@ -27,7 +27,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dpkg.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
#include "H5Iprivate.h" /* IDs */
diff --git a/src/H5Ddeprec.c b/src/H5Ddeprec.c
index cecf4a2..b06bce1 100644
--- a/src/H5Ddeprec.c
+++ b/src/H5Ddeprec.c
@@ -41,7 +41,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dpkg.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
#include "H5Iprivate.h" /* IDs */
diff --git a/src/H5Dfill.c b/src/H5Dfill.c
index 7180c8c..f418a81 100644
--- a/src/H5Dfill.c
+++ b/src/H5Dfill.c
@@ -34,7 +34,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dpkg.h" /* Dataset functions */
#include "H5Eprivate.h" /* Error handling */
#include "H5FLprivate.h" /* Free Lists */
diff --git a/src/H5Dint.c b/src/H5Dint.c
index cef551a..6253aa6 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -797,9 +797,11 @@ H5D_update_oh_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, hid_t dapl_id)
if(NULL == (oh = H5O_pin(oloc, dxpl_id)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTPIN, FAIL, "unable to pin dataset object header")
- /* Update the datatype and dataspace header messages */
+ /* Write the dataspace header message */
if(H5S_append(file, dxpl_id, oh, dset->shared->space) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update dataspace header message")
+
+ /* Write the datatype header message */
if(H5O_msg_append_oh(file, dxpl_id, oh, H5O_DTYPE_ID, H5O_MSG_FLAG_CONSTANT, 0, type) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update datatype header message")
diff --git a/src/H5Dlayout.c b/src/H5Dlayout.c
index 0245bec..6aa5b44 100644
--- a/src/H5Dlayout.c
+++ b/src/H5Dlayout.c
@@ -441,7 +441,7 @@ done:
/*-------------------------------------------------------------------------
* Function: H5D_layout_oh_write
*
- * Purpose: Read layout/pline/efl information for dataset
+ * Purpose: Write layout/pline/efl information for dataset
*
* Return: Success: SUCCEED
* Failure: FAIL
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index 38f1ab4..dbd495c 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -32,6 +32,7 @@
#include "H5Dprivate.h"
/* Other private headers needed by this file */
+#include "H5ACprivate.h" /* Metadata cache */
#include "H5Gprivate.h" /* Groups */
#include "H5SLprivate.h" /* Skip lists */
#include "H5Tprivate.h" /* Datatypes */
diff --git a/src/H5EA.c b/src/H5EA.c
index f8a2969..cca51a8 100644
--- a/src/H5EA.c
+++ b/src/H5EA.c
@@ -87,7 +87,7 @@ typedef herr_t (*H5EA__unprotect_func_t)(void *thing, hid_t dxpl_id,
extern const H5EA_class_t H5EA_CLS_TEST[1];
const H5EA_class_t *const H5EA_client_class_g[] = {
- H5EA_CLS_TEST, /* 0 - H5EA_TEST_ID */
+ H5EA_CLS_TEST, /* ? - H5EA_CLS_TEST_ID */
};
@@ -820,7 +820,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Set the shared array header's file context for this operation */
hdr->f = ea->f;
- /* Set up flush dependency between child_entry and metadata array 'thing' */
+ /* Set up flush dependency between parent entry and extensible array header */
if(H5EA__create_flush_depend(parent_entry, (H5AC_info_t *)hdr) < 0)
H5E_THROW(H5E_CANTDEPEND, "unable to create flush dependency on file metadata")
@@ -863,7 +863,7 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
/* Set the shared array header's file context for this operation */
hdr->f = ea->f;
- /* Remove flush dependency between child_entry and metadata array 'thing' */
+ /* Remove flush dependency between parent entry and extensible array header */
if(H5EA__destroy_flush_depend(parent_entry, (H5AC_info_t *)hdr) < 0)
H5E_THROW(H5E_CANTUNDEPEND, "unable to destroy flush dependency on file metadata")
diff --git a/src/H5EAtest.c b/src/H5EAtest.c
index 58da489..87f9195 100644
--- a/src/H5EAtest.c
+++ b/src/H5EAtest.c
@@ -50,6 +50,7 @@
/* Sanity checking value for callback contexts */
#define H5EA__TEST_BOGUS_VAL 42
+
/******************/
/* Local Typedefs */
/******************/
@@ -60,6 +61,7 @@ typedef struct H5EA__test_ctx_t {
H5EA__ctx_cb_t *cb; /* Pointer to context's callback action */
} H5EA__test_ctx_t;
+
/********************/
/* Package Typedefs */
/********************/
diff --git a/src/H5FA.c b/src/H5FA.c
index b235ef9..a30a4aa 100644
--- a/src/H5FA.c
+++ b/src/H5FA.c
@@ -78,7 +78,7 @@
extern const H5FA_class_t H5FA_CLS_TEST[1];
const H5FA_class_t *const H5FA_client_class_g[] = {
- H5FA_CLS_TEST, /* 0 - H5FA_TEST_ID */
+ H5FA_CLS_TEST, /* ? - H5FA_CLS_TEST_ID */
};
diff --git a/src/H5FApkg.h b/src/H5FApkg.h
index ddc4c59..9f82a32 100644
--- a/src/H5FApkg.h
+++ b/src/H5FApkg.h
@@ -224,9 +224,7 @@ H5_DLLVAR const H5FA_class_t H5FA_CLS_CHUNK[1];
H5_DLLVAR const H5FA_class_t H5FA_CLS_FILT_CHUNK[1];
/* Internal fixed array testing class */
-#ifdef H5FA_TESTING
H5_DLLVAR const H5FA_class_t H5FA_CLS_TEST[1];
-#endif /* H5FA_TESTING */
/* Array of fixed array client ID -> client class mappings */
extern const H5FA_class_t *const H5FA_client_class_g[H5FA_NUM_CLS_ID];
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index 3a56524..b3cc84d 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -900,7 +900,7 @@ H5FD_core_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, hadd
HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
if (REGION_OVERFLOW(addr, size))
HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
- if (addr + size > file->eoa)
+ if((addr + size) > file->eoa)
HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
/* Read the part which is before the EOF marker */
diff --git a/src/H5FDdirect.c b/src/H5FDdirect.c
index fff31f3..8219941 100644
--- a/src/H5FDdirect.c
+++ b/src/H5FDdirect.c
@@ -928,7 +928,7 @@ H5FD_direct_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, ha
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
if (REGION_OVERFLOW(addr, size))
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
- if (addr+size>file->eoa)
+ if((addr + size) > file->eoa)
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
/* If the system doesn't require data to be aligned, read the data in
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index 0da5765..c21fc92 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -1056,7 +1056,7 @@ H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
if (REGION_OVERFLOW(addr, size))
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
- if (addr+size>file->eoa)
+ if((addr + size) > file->eoa)
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
/* Log the I/O information about the read */
diff --git a/src/H5FDmpiposix.c b/src/H5FDmpiposix.c
index ff5b118..d5e58e9 100644
--- a/src/H5FDmpiposix.c
+++ b/src/H5FDmpiposix.c
@@ -1131,7 +1131,7 @@ H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
if (REGION_OVERFLOW(addr, size))
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
- if (addr+size>file->eoa)
+ if((addr + size) > file->eoa)
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
#ifdef REPORT_IO
diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c
index 7fffbd4..b241f4d 100644
--- a/src/H5FDstdio.c
+++ b/src/H5FDstdio.c
@@ -791,8 +791,8 @@ H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, siz
H5Epush_ret (func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
if (REGION_OVERFLOW(addr, size))
H5Epush_ret (func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
- if (addr+size>file->eoa)
- H5Epush_ret (func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+ if((addr + size) > file->eoa)
+ H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
/* Check easy cases */
if (0 == size)
diff --git a/src/H5FDwindows.c b/src/H5FDwindows.c
index aca03c8..47c7f2d 100644
--- a/src/H5FDwindows.c
+++ b/src/H5FDwindows.c
@@ -799,7 +799,7 @@ H5FD_windows_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, h
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
if (REGION_OVERFLOW(addr, size))
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
- if (addr+size>file->eoa)
+ if((addr + size) > file->eoa)
HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
/* Seek to the correct location */
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index f5e5a75..cb74322 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -183,7 +183,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, const void UNUSED
HDassert(fixed_size + variable_size <= sizeof(sbuf));
/* Read in variable-sized portion of superblock */
- if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, (haddr_t)fixed_size + variable_size) < 0)
+ if(H5FD_set_eoa(lf, H5FD_MEM_SUPER, (haddr_t)(fixed_size + variable_size)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "set end of space allocation request failed")
if(H5FD_read(lf, dxpl_id, H5FD_MEM_SUPER, (haddr_t)fixed_size, variable_size, p) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read superblock")
diff --git a/src/H5O.c b/src/H5O.c
index a2b592b..340f88e 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -125,8 +125,8 @@ const H5O_msg_class_t *const H5O_msg_class_g[] = {
H5O_MSG_DRVINFO, /*0x0014 Driver info settings */
H5O_MSG_AINFO, /*0x0015 Attribute information */
H5O_MSG_REFCOUNT, /*0x0016 Object's ref. count */
- H5O_MSG_FSINFO, /*0x0018 Free-space manager info message */
- H5O_MSG_UNKNOWN, /*0x0017 Placeholder for unknown message */
+ H5O_MSG_FSINFO, /*0x0017 Free-space manager info message */
+ H5O_MSG_UNKNOWN, /*0x0018 Placeholder for unknown message */
};
/* Declare a free list to manage the H5O_t struct */
diff --git a/src/H5Oalloc.c b/src/H5Oalloc.c
index 6b921f2..64d2f03 100644
--- a/src/H5Oalloc.c
+++ b/src/H5Oalloc.c
@@ -1128,7 +1128,10 @@ H5O_alloc(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t *type,
HDassert(mesg);
/* Compute the size needed to store the message in the object header */
- if((raw_size = (type->raw_size)(f, FALSE, mesg)) >= H5O_MESG_MAX_SIZE)
+ raw_size = (type->raw_size)(f, FALSE, mesg);
+ if(0 == raw_size)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "can't compute object header message size")
+ if(raw_size >= H5O_MESG_MAX_SIZE)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "object header message is too large")
aligned_size = H5O_ALIGN_OH(oh, raw_size);
diff --git a/src/H5Olayout.c b/src/H5Olayout.c
index a34dcc2..67dbf4d 100644
--- a/src/H5Olayout.c
+++ b/src/H5Olayout.c
@@ -58,15 +58,15 @@ const H5O_msg_class_t H5O_MSG_LAYOUT[1] = {{
H5O_layout_encode, /*encode message */
H5O_layout_copy, /*copy the native value */
H5O_layout_size, /*size of message on disk */
- H5O_layout_reset, /*reset method */
+ H5O_layout_reset, /*reset method */
H5O_layout_free, /*free the struct */
H5O_layout_delete, /* file delete method */
NULL, /* link method */
NULL, /*set share method */
NULL, /*can share method */
NULL, /* pre copy native value to file */
- H5O_layout_copy_file, /* copy native value to file */
- NULL, /* post copy native value to file */
+ H5O_layout_copy_file, /* copy native value to file */
+ NULL, /* post copy native value to file */
NULL, /* get creation index */
NULL, /* set creation index */
H5O_layout_debug /*debug the message */
@@ -589,6 +589,7 @@ H5O_layout_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
FUNC_ENTER_NOAPI_NOINIT(H5O_layout_copy_file)
/* check args */
+ HDassert(file_src);
HDassert(layout_src);
HDassert(file_dst);
diff --git a/src/H5Opkg.h b/src/H5Opkg.h
index 7e1ff4c..b64cf64 100644
--- a/src/H5Opkg.h
+++ b/src/H5Opkg.h
@@ -504,6 +504,7 @@ H5_DLLVAR const H5O_msg_class_t H5O_MSG_FSINFO[1];
/* Placeholder for unknown message. (0x0018) */
H5_DLLVAR const H5O_msg_class_t H5O_MSG_UNKNOWN[1];
+
/*
* Object header "object" types
*/
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index eab5d2c..c38ddea 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -154,7 +154,7 @@ typedef struct H5O_copy_t {
#define H5O_FILL_NEW_ID 0x0005 /* Fill Value Message. (New) */
#define H5O_LINK_ID 0x0006 /* Link Message. */
#define H5O_EFL_ID 0x0007 /* External File List Message */
-#define H5O_LAYOUT_ID 0x0008 /* Data Storage Layout Message. */
+#define H5O_LAYOUT_ID 0x0008 /* Data Layout Message. */
#define H5O_BOGUS_ID 0x0009 /* "Bogus" Message. */
#define H5O_GINFO_ID 0x000a /* Group info Message. */
#define H5O_PLINE_ID 0x000b /* Filter pipeline message. */
@@ -346,7 +346,12 @@ typedef struct H5O_efl_t {
*/
#define H5O_LAYOUT_VERSION_3 3
-/* This version adds different types of indices to chunked datasets */
+/* This version adds different types of indices to chunked datasets, allows
+ * for larger chunk dimensions, stores chunk indices into their own
+ * message (the "layout index" message), adds features for compact/dense
+ * storage of elements and/or chunk records, adds features for abbreviating
+ * the storage used for partial chunks on boundaries, etc.
+ */
#define H5O_LAYOUT_VERSION_4 4
/* The latest version of the format. Look through the 'encode'
diff --git a/src/H5V.c b/src/H5V.c
index 34cf714..48fa9ab 100644
--- a/src/H5V.c
+++ b/src/H5V.c
@@ -1132,6 +1132,47 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5V_array_calc_pre
+ *
+ * Purpose: Given a linear offset in an array, the dimensions of that
+ * array and the pre-computed 'down' (accumulator) sizes, this
+ * function computes the coordinates of that offset in the array.
+ *
+ * The dimensionality of the whole array, and the coordinates is N.
+ * The array dimensions are TOTAL_SIZE and the coordinates
+ * are returned in COORD. The linear offset is in OFFSET.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, July 16, 2009
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_array_calc_pre(hsize_t offset, unsigned n, const hsize_t *total_size,
+ const hsize_t *down, hsize_t *coords)
+{
+ unsigned u; /* Local index variable */
+
+ FUNC_ENTER_NOAPI_NOFUNC(H5V_array_calc_pre)
+
+ /* Sanity check */
+ HDassert(n <= H5V_HYPER_NDIMS);
+ HDassert(total_size);
+ HDassert(coords);
+
+ /* Compute the coordinates from the offset */
+ for(u = 0; u < n; u++) {
+ coords[u] = offset / down[u];
+ offset %= down[u];
+ } /* end for */
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5V_array_calc_pre() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5V_array_calc
*
* Purpose: Given a linear offset in an array and the dimensions of that
@@ -1155,31 +1196,25 @@ herr_t
H5V_array_calc(hsize_t offset, unsigned n, const hsize_t *total_size, hsize_t *coords)
{
hsize_t idx[H5V_HYPER_NDIMS]; /* Size of each dimension in bytes */
- hsize_t acc; /* Size accumulator */
- unsigned u; /* Local index variable */
- int i; /* Local index variable */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOFUNC(H5V_array_calc)
+ FUNC_ENTER_NOAPI(H5V_array_calc, FAIL)
/* Sanity check */
- assert(n <= H5V_HYPER_NDIMS);
- assert(total_size);
- assert(coords);
+ HDassert(n <= H5V_HYPER_NDIMS);
+ HDassert(total_size);
+ HDassert(coords);
/* Build the sizes of each dimension in the array */
- /* (From fastest to slowest) */
- for(i=(int)(n-1),acc=1; i>=0; i--) {
- idx[i]=acc;
- acc *= total_size[i];
- } /* end for */
+ if(H5V_array_down(n, total_size, idx) < 0)
+ HGOTO_ERROR(H5E_INTERNAL, H5E_BADVALUE, FAIL, "can't compute down sizes")
/* Compute the coordinates from the offset */
- for(u=0; u<n; u++) {
- coords[u]=offset/idx[u];
- offset %= idx[u];
- } /* end for */
+ if(H5V_array_calc_pre(offset, n, total_size, idx, coords) < 0)
+ HGOTO_ERROR(H5E_INTERNAL, H5E_BADVALUE, FAIL, "can't compute coordinates")
- FUNC_LEAVE_NOAPI(SUCCEED)
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
} /* end H5V_array_calc() */
diff --git a/src/H5Vprivate.h b/src/H5Vprivate.h
index 1dec0c0..e351f86 100644
--- a/src/H5Vprivate.h
+++ b/src/H5Vprivate.h
@@ -83,6 +83,8 @@ H5_DLL hsize_t H5V_array_offset_pre(unsigned n,
const hsize_t *acc, const hsize_t *offset);
H5_DLL hsize_t H5V_array_offset(unsigned n, const hsize_t *total_size,
const hsize_t *offset);
+H5_DLL herr_t H5V_array_calc_pre(hsize_t offset, unsigned n, const hsize_t *total_size,
+ const hsize_t *down, hsize_t *coords);
H5_DLL herr_t H5V_array_calc(hsize_t offset, unsigned n,
const hsize_t *total_size, hsize_t *coords);
H5_DLL herr_t H5V_chunk_index(unsigned ndims, const hsize_t *coord,