diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2010-04-27 22:15:14 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2010-04-27 22:15:14 (GMT) |
commit | b9ca2f8f6f045b4a4d08b4412910c65966e42616 (patch) | |
tree | fae192480a7479bee052e6d996e6654046480a1b /src | |
parent | 6c5e42a96720ccd4c7b517af8c00c658112dc7af (diff) | |
download | hdf5-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.c | 7 | ||||
-rw-r--r-- | src/H5D.c | 1 | ||||
-rw-r--r-- | src/H5Dbtree.c | 1 | ||||
-rw-r--r-- | src/H5Dchunk.c | 3 | ||||
-rw-r--r-- | src/H5Dcontig.c | 1 | ||||
-rw-r--r-- | src/H5Ddbg.c | 1 | ||||
-rw-r--r-- | src/H5Ddeprec.c | 1 | ||||
-rw-r--r-- | src/H5Dfill.c | 1 | ||||
-rw-r--r-- | src/H5Dint.c | 4 | ||||
-rw-r--r-- | src/H5Dlayout.c | 2 | ||||
-rw-r--r-- | src/H5Dpkg.h | 1 | ||||
-rw-r--r-- | src/H5EA.c | 6 | ||||
-rw-r--r-- | src/H5EAtest.c | 2 | ||||
-rw-r--r-- | src/H5FA.c | 2 | ||||
-rw-r--r-- | src/H5FApkg.h | 2 | ||||
-rw-r--r-- | src/H5FDcore.c | 2 | ||||
-rw-r--r-- | src/H5FDdirect.c | 2 | ||||
-rw-r--r-- | src/H5FDlog.c | 2 | ||||
-rw-r--r-- | src/H5FDmpiposix.c | 2 | ||||
-rw-r--r-- | src/H5FDstdio.c | 4 | ||||
-rw-r--r-- | src/H5FDwindows.c | 2 | ||||
-rw-r--r-- | src/H5Fsuper_cache.c | 2 | ||||
-rw-r--r-- | src/H5O.c | 4 | ||||
-rw-r--r-- | src/H5Oalloc.c | 5 | ||||
-rw-r--r-- | src/H5Olayout.c | 7 | ||||
-rw-r--r-- | src/H5Opkg.h | 1 | ||||
-rw-r--r-- | src/H5Oprivate.h | 9 | ||||
-rw-r--r-- | src/H5V.c | 69 | ||||
-rw-r--r-- | src/H5Vprivate.h | 2 |
29 files changed, 95 insertions, 53 deletions
@@ -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 * @@ -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 */ @@ -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 */ /********************/ @@ -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") @@ -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' @@ -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, |