1997-07-31 05:17:56 +08:00
|
|
|
/****************************************************************************
|
1998-10-14 05:28:53 +08:00
|
|
|
* NCSA HDF *
|
|
|
|
* Software Development Group *
|
|
|
|
* National Center for Supercomputing Applications *
|
|
|
|
* University of Illinois at Urbana-Champaign *
|
|
|
|
* 605 E. Springfield, Champaign IL 61820 *
|
|
|
|
* *
|
|
|
|
* For conditions of distribution and use, see the accompanying *
|
|
|
|
* hdf/COPYING file. *
|
|
|
|
* *
|
1997-07-31 05:17:56 +08:00
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
/* $Id$ */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This file contains macros & information for file access
|
|
|
|
*/
|
|
|
|
|
1997-08-16 00:51:34 +08:00
|
|
|
#ifndef _H5Fprivate_H
|
|
|
|
#define _H5Fprivate_H
|
|
|
|
#include <H5Fpublic.h>
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1997-10-21 07:14:35 +08:00
|
|
|
/* This is a near top-level header! Try not to include much! */
|
1997-08-16 00:51:34 +08:00
|
|
|
#include <H5private.h>
|
1998-06-07 12:38:16 +08:00
|
|
|
#include <H5Dpublic.h> /*for the H5D_transfer_t type */
|
1999-07-03 18:31:26 +08:00
|
|
|
#include <H5MMpublic.h> /*for the H5MM_allocate_t and H5MM_free_t types */
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1997-10-23 06:08:14 +08:00
|
|
|
/*
|
|
|
|
* Feature: Define this constant to be non-zero if you want to enable code
|
1998-01-21 03:10:08 +08:00
|
|
|
* that minimizes the number of calls to lseek(). This has a huge
|
|
|
|
* performance benefit on some systems. Set this constant to zero
|
|
|
|
* on the compiler command line to disable that optimization.
|
1997-10-23 06:08:14 +08:00
|
|
|
*/
|
|
|
|
#ifndef H5F_OPT_SEEK
|
|
|
|
# define H5F_OPT_SEEK 1
|
|
|
|
#endif
|
|
|
|
|
1997-11-14 22:42:14 +08:00
|
|
|
/*
|
|
|
|
* Feature: Define this constant on the compiler command-line if you want to
|
1998-08-20 06:46:31 +08:00
|
|
|
* see some debugging messages on the debug stream.
|
1997-11-14 22:42:14 +08:00
|
|
|
*/
|
|
|
|
#ifdef NDEBUG
|
|
|
|
# undef H5F_DEBUG
|
|
|
|
#endif
|
|
|
|
|
1997-08-15 22:36:27 +08:00
|
|
|
/* Maximum size of boot-block buffer */
|
1997-08-12 00:10:38 +08:00
|
|
|
#define H5F_BOOTBLOCK_SIZE 1024
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1997-08-16 00:51:34 +08:00
|
|
|
/* Define the HDF5 file signature */
|
1998-01-21 03:10:08 +08:00
|
|
|
#define H5F_SIGNATURE "\211HDF\r\n\032\n"
|
1997-08-16 00:51:34 +08:00
|
|
|
#define H5F_SIGNATURE_LEN 8
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1997-08-16 00:51:34 +08:00
|
|
|
/* size of size_t and off_t as they exist on disk */
|
1998-05-14 01:58:24 +08:00
|
|
|
#define H5F_SIZEOF_ADDR(F) ((F)->shared->create_parms->sizeof_addr)
|
|
|
|
#define H5F_SIZEOF_SIZE(F) ((F)->shared->create_parms->sizeof_size)
|
1997-09-25 00:30:22 +08:00
|
|
|
|
|
|
|
/*
|
1998-02-20 02:19:48 +08:00
|
|
|
* Private file open flags.
|
1997-09-25 00:30:22 +08:00
|
|
|
*/
|
1998-04-07 23:34:16 +08:00
|
|
|
#define H5F_ACC_PUBLIC_FLAGS 0x00ffu
|
1998-02-20 02:19:48 +08:00
|
|
|
|
1998-04-07 23:34:16 +08:00
|
|
|
#define H5F_ACC_CREAT 0x0100u /* Create non-existing files */
|
1997-08-16 00:51:34 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Encode and decode macros for file meta-data.
|
|
|
|
* Currently, all file meta-data is little-endian.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* For non-little-endian platforms, encode each byte by itself */
|
|
|
|
#ifdef WORDS_BIGENDIAN
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT16ENCODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
*(p) = (uint8_t)( (uintn)(i) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((uintn)(i) >> 8) & 0xff); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT16ENCODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
*(p) = (uint8_t)( (i) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((uintn)(i) >> 8) & 0xff); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT32ENCODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
*(p) = (uint8_t)( (uint32_t)(i) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((uint32_t)(i) >> 8) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((uint32_t)(i) >> 16) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((uint32_t)(i) >> 24) & 0xff); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT32ENCODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
*(p) = (uint8_t)( (i) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((i) >> 8) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((i) >> 16) & 0xff); (p)++; \
|
|
|
|
*(p) = (uint8_t)(((i) >> 24) & 0xff); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT64ENCODE(p, n) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
int64_t _n = (n); \
|
1998-02-11 00:41:45 +08:00
|
|
|
size_t _i; \
|
1998-11-19 02:40:09 +08:00
|
|
|
uint8_t *_p = (uint8_t*)(p); \
|
|
|
|
for (_i=0; _i<sizeof(int64_t); _i++, _n>>=8) { \
|
|
|
|
*_p++ = (uint8_t)(_n & 0xff); \
|
1998-01-21 03:10:08 +08:00
|
|
|
} \
|
|
|
|
for (/*void*/; _i<8; _i++) { \
|
|
|
|
*_p++ = (n)<0 ? 0xff : 0; \
|
|
|
|
} \
|
1998-11-19 02:40:09 +08:00
|
|
|
(p) = (uint8_t*)(p)+8; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT64ENCODE(p, n) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
uint64_t _n = (n); \
|
1998-02-11 00:41:45 +08:00
|
|
|
size_t _i; \
|
1998-11-19 02:40:09 +08:00
|
|
|
uint8_t *_p = (uint8_t*)(p); \
|
|
|
|
for (_i=0; _i<sizeof(uint64_t); _i++, _n>>=8) { \
|
|
|
|
*_p++ = (uint8_t)(_n & 0xff); \
|
1998-01-21 03:10:08 +08:00
|
|
|
} \
|
|
|
|
for (/*void*/; _i<8; _i++) { \
|
|
|
|
*_p++ = 0; \
|
|
|
|
} \
|
1998-11-19 02:40:09 +08:00
|
|
|
(p) = (uint8_t*)(p)+8; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1999-03-10 07:06:07 +08:00
|
|
|
/* DECODE converts little endian bytes pointed by p to integer values and store
|
|
|
|
* it in i. For signed values, need to do sign-extension when converting
|
|
|
|
* the last byte which carries the sign bit.
|
|
|
|
* The macros does not require i be of a certain byte sizes. It just requires
|
|
|
|
* i be big enough to hold the intended value range. E.g. INT16DECODE works
|
|
|
|
* correctly even if i is actually a 64bit int like in a Cray.
|
|
|
|
*/
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT16DECODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
(i) = (int16_t)((*(p) & 0xff)); (p)++; \
|
1999-03-10 07:06:07 +08:00
|
|
|
(i) |= (int16_t)(((*(p) & 0xff) << 8) | \
|
|
|
|
((*(p) & 0x80) ? ~0xffff : 0x0)); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT16DECODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
(i) = (uint16_t) (*(p) & 0xff); (p)++; \
|
|
|
|
(i) |= (uint16_t)((*(p) & 0xff) << 8); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT32DECODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
(i) = ( *(p) & 0xff); (p)++; \
|
|
|
|
(i) |= ((int32_t)(*(p) & 0xff) << 8); (p)++; \
|
|
|
|
(i) |= ((int32_t)(*(p) & 0xff) << 16); (p)++; \
|
1999-03-10 07:06:07 +08:00
|
|
|
(i) |= ((int32_t)(((*(p) & 0xff) << 24) | \
|
|
|
|
((*(p) & 0x80) ? ~0xffffffff : 0x0))); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT32DECODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
(i) = (uint32_t)(*(p) & 0xff); (p)++; \
|
|
|
|
(i) |= ((uint32_t)(*(p) & 0xff) << 8); (p)++; \
|
|
|
|
(i) |= ((uint32_t)(*(p) & 0xff) << 16); (p)++; \
|
|
|
|
(i) |= ((uint32_t)(*(p) & 0xff) << 24); (p)++; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT64DECODE(p, n) { \
|
|
|
|
/* WE DON'T CHECK FOR OVERFLOW! */ \
|
1998-02-11 00:41:45 +08:00
|
|
|
size_t _i; \
|
1998-02-28 04:07:37 +08:00
|
|
|
n = 0; \
|
1998-01-21 03:10:08 +08:00
|
|
|
(p) += 8; \
|
1998-11-19 02:40:09 +08:00
|
|
|
for (_i=0; _i<sizeof(int64_t); _i++) { \
|
1998-02-28 04:07:37 +08:00
|
|
|
n = (n<<8) | *(--p); \
|
1998-01-21 03:10:08 +08:00
|
|
|
} \
|
|
|
|
(p) += 8; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT64DECODE(p, n) { \
|
|
|
|
/* WE DON'T CHECK FOR OVERFLOW! */ \
|
1998-02-11 00:41:45 +08:00
|
|
|
size_t _i; \
|
1998-02-28 04:07:37 +08:00
|
|
|
n = 0; \
|
1998-01-21 03:10:08 +08:00
|
|
|
(p) += 8; \
|
1998-11-19 02:40:09 +08:00
|
|
|
for (_i=0; _i<sizeof(uint64_t); _i++) { \
|
1998-02-28 04:07:37 +08:00
|
|
|
n = (n<<8) | *(--p); \
|
1998-01-21 03:10:08 +08:00
|
|
|
} \
|
|
|
|
(p) += 8; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
#else
|
|
|
|
/* For little-endian platforms, make the compiler do the work */
|
1998-11-19 02:40:09 +08:00
|
|
|
# define INT16ENCODE(p, i) {*((int16_t*)(p))=(int16_t)(i);(p)+=2;}
|
|
|
|
# define UINT16ENCODE(p, i) {*((uint16_t*)(p))=(uint16_t)(i);(p)+=2;}
|
|
|
|
# define INT32ENCODE(p, i) {*((int32_t*)(p))=(int32_t)(i);(p)+=4;}
|
|
|
|
# define UINT32ENCODE(p, i) {*((uint32_t*)(p))=(uint32_t)(i);(p)+=4;}
|
1997-09-20 00:36:59 +08:00
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define INT64ENCODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
*((int64_t *)(p)) = (int64_t)(i); \
|
|
|
|
(p) += sizeof(int64_t); \
|
|
|
|
if (4==sizeof(int64_t)) { \
|
1998-01-21 03:10:08 +08:00
|
|
|
*(p)++ = (i)<0?0xff:0x00; \
|
|
|
|
*(p)++ = (i)<0?0xff:0x00; \
|
|
|
|
*(p)++ = (i)<0?0xff:0x00; \
|
|
|
|
*(p)++ = (i)<0?0xff:0x00; \
|
|
|
|
} \
|
1997-09-20 00:36:59 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
# define UINT64ENCODE(p, i) { \
|
1998-11-19 02:40:09 +08:00
|
|
|
*((uint64_t *)(p)) = (uint64_t)(i); \
|
|
|
|
(p) += sizeof(uint64_t); \
|
|
|
|
if (4==sizeof(uint64_t)) { \
|
1998-01-21 03:10:08 +08:00
|
|
|
*(p)++ = 0x00; \
|
|
|
|
*(p)++ = 0x00; \
|
|
|
|
*(p)++ = 0x00; \
|
|
|
|
*(p)++ = 0x00; \
|
|
|
|
} \
|
1997-09-20 00:36:59 +08:00
|
|
|
}
|
|
|
|
|
1998-11-19 02:40:09 +08:00
|
|
|
# define INT16DECODE(p, i) {(i)=(int16_t)(*(const int16_t*)(p));(p)+=2;}
|
|
|
|
# define UINT16DECODE(p, i) {(i)=(uint16_t)(*(const uint16_t*)(p));(p)+=2;}
|
|
|
|
# define INT32DECODE(p, i) {(i)=(int32_t)(*(const int32_t*)(p));(p)+=4;}
|
|
|
|
# define UINT32DECODE(p, i) {(i)=(uint32_t)(*(const uint32_t*)(p));(p)+=4;}
|
|
|
|
# define INT64DECODE(p, i) {(i)=(int64_t)(*(const int64_t*)(p));(p)+=8;}
|
|
|
|
# define UINT64DECODE(p, i) {(i)=(uint64_t)(*(const uint64_t*)(p));(p)+=8;}
|
1997-08-16 00:51:34 +08:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
#define NBYTEENCODE(d, s, n) { HDmemcpy(d,s,n); p+=n }
|
1997-08-16 00:51:34 +08:00
|
|
|
|
1998-02-20 02:19:48 +08:00
|
|
|
/*
|
|
|
|
* Note: the NBYTEDECODE macro is backwards from the memcpy() routine, in
|
|
|
|
* the spirit of the other DECODE macros.
|
|
|
|
*/
|
1998-01-21 03:10:08 +08:00
|
|
|
#define NBYTEDECODE(s, d, n) { HDmemcpy(d,s,n); p+=n }
|
1997-08-16 00:51:34 +08:00
|
|
|
|
1998-03-06 05:27:38 +08:00
|
|
|
/*
|
|
|
|
* Macros that check for overflows. These are somewhat dangerous to fiddle
|
|
|
|
* with.
|
|
|
|
*/
|
|
|
|
#if (SIZEOF_SIZE_T >= SIZEOF_OFF_T)
|
|
|
|
# define H5F_OVERFLOW_SIZET2OFFT(X) \
|
|
|
|
((size_t)(X)>=(size_t)((size_t)1<<(8*sizeof(off_t)-1)))
|
|
|
|
#else
|
|
|
|
# define H5F_OVERFLOW_SIZET2OFFT(X) 0
|
|
|
|
#endif
|
|
|
|
|
1997-08-16 00:51:34 +08:00
|
|
|
/*
|
1998-03-05 00:20:23 +08:00
|
|
|
* File-creation property list.
|
1997-08-16 00:51:34 +08:00
|
|
|
*/
|
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from
FUNC_ENTER() and made it a locally-defined preprocessor
symbol, INTERFACE_INIT.
Changed `offset' to `address' and `length' to `size' in
documentation so it's more consistent. `Offset' still appears
occassionally when it refers to a byte offset within some
other data structure.
Moved interface termination function prototypes from public
header files to .c files and made them static.
./src/H5.c
./src/H5public.h
Added H5init() because it's possible that the predefined data
types are not initialized. This happens only if the first
call to the hdf5 library passes a predefined data type symbol
as an argument. There should be some way to fix this...
./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
The free_func returns SUCCEED or FAIL, although the return
value is ignored by H5A. This is so we can use the various
H5*_close() functions to free things.
H5Ainc_ref() and H5Adec_ref() are no longer public. Many of
the other atom functions should also be made private, but I'll
save that for later...
Added additional template groups called H5_TEMPLATE_0 through
H5_TEMPLATE_7 that are used by the various template
subclasses.
Increased the number of bits used for atom groups to prevent
negative atoms.
./src/H5AC.c
./src/H5ACprivate.h
Changed H5AC_new() to H5AC_create() to make names more consistent.
./src/H5B.c
./src/H5Bprivate.h
Changed H5B_new() to H5B_create() to make names more consistent.
./src/H5C.c
./src/H5Cprivate.h
./src/H5Cpublic.h
Now supports multiple subclasses of templates, although it's
done with big switch statements. The default values for
templates are defined in the source file to which that
template belongs. This got rid of lots of needless
preprocessor constants.
Added H5Ccreate() to create a new template. Changed
H5C_release() to H5Cclose() to make the naming more
consistent.
./src/H5D.c
./src/H5Dprivate.h
./src/H5Dpublic.h
Enhanced to use the new dataset interface, and uses the enhanced
data type and data space interfaces, which haven't been
completely implemented. The dataset interface doesn't handle
non-contiguous storage, compression, or data type and space
conversions yet.
./src/H5F.c
./src/H5Fprivate.h
./src/H5Fpublic.h
Removed H5Fflush() since just calls H5F_flush(), which doesn't
do what the user would probably think it does, namely, flush
everything. It only flushes those things sitting in the H5AC
cache and the boot block.
Changed the `file_create_parms' field of H5F_low_t to just
`create_parms' since the `file' part is obvious.
./src/H5Fistore.c
Added some support for external files. Mostly just in the
file format and not supported much by the library yet. I need
to finish some dataset functions first.
Changed H5F_istore_new() to H5F_istore_create() to make names
more uniform across packages.
./src/H5Flow.c
Flushing a file causes the file to be physically extended to
the logical eof. This prevents H5F_open() from thinking a
file has been truncated. Most of the time the file will
already be that large, and when it isn't Unix will often just
allocate the final block anyway.
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gstab.c
Removed H5G_basename()
Removed (temporarily) data type information from symbol table
entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to
reflect that it's a simple data space and has nothing to do
with raw data.
Changed H5G_node_new() to H5G_node_create() and H5G_stab_new()
to H5G_stab_create() to make names more uniform across
packages.
Fixed an undefined address bug that happens when H5G_node_debug()
program doesn't pass enough info to H5G_node_load().
./src/H5H.c
./src/H5Hprivate.h
Changed H5H_new() to H5H_create() to make the names more
uniform across packages.
./src/H5M.c
./src/H5Mprivate.h
./src/H5Mpublic.h
Nulled all the create functions. Most of the other callbacks
are to public functions. Removed H5Mcreate().
Changed hobjtype_t to group_t since it has to be the same
thing anyway.
./src/H5O.c
./src/H5Oprivate.h
./src/H5Osdim.c
./src/H5Osdtyp.c
Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since
`simple data space' is its official name, not `simple
dimensions'. Will eventually add H5O_CDSPACE for comples data
spaces. Changed _sim_dim_ to _dspace_.
Replaced H5O_SIM_DTYPE and the compound data type messages
with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_.
Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since
contiguous storage is not necessarily standard. Changed
_std_store_ to _cstore_ in H5Ocstore.c
Added the H5O_EFL (external file list) message.
Changed H5O_new() to H5O_create() to make names more uniform
across packages.
./src/H5Oefl.c NEW
External file list message for specifying which non-hdf5 files
contain raw data for a dataset.
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
Renamed and moved data structures to make the names conform to
our naming scheme.
./src/H5T.c
./src/H5Tprivate.h
./src/H5Tpublic.h
./src/H5Tpkg.h NEW
Data structures redesigned to be more flexible. The interface
was redesigned to make it more regular and to make some names
more uniform across packages.
./src/H5detect.c
Output was changed to produce a file that conforms to the hdf5
coding standard.
./src/Makefile.in
Generates H5Tinit.c by running H5detect.
./src/debug.c
Moved command argument processing.
1997-12-11 06:41:07 +08:00
|
|
|
typedef struct H5F_create_t {
|
1998-04-09 05:43:02 +08:00
|
|
|
hsize_t userblock_size; /* Size of the file user block in bytes */
|
1998-01-21 03:10:08 +08:00
|
|
|
intn sym_leaf_k; /* 1/2 rank for symbol table leaf nodes */
|
|
|
|
intn btree_k[8]; /* 1/2 rank for btree internal nodes */
|
|
|
|
size_t sizeof_addr; /* Number of bytes in an address */
|
|
|
|
size_t sizeof_size; /* Number of bytes for obj sizes */
|
|
|
|
intn bootblock_ver; /* Version # of the bootblock */
|
|
|
|
intn freespace_ver; /* Version # of the free-space information*/
|
|
|
|
intn objectdir_ver; /* Version # of the object directory format*/
|
|
|
|
intn sharedheader_ver;/* Version # of the shared header format */
|
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from
FUNC_ENTER() and made it a locally-defined preprocessor
symbol, INTERFACE_INIT.
Changed `offset' to `address' and `length' to `size' in
documentation so it's more consistent. `Offset' still appears
occassionally when it refers to a byte offset within some
other data structure.
Moved interface termination function prototypes from public
header files to .c files and made them static.
./src/H5.c
./src/H5public.h
Added H5init() because it's possible that the predefined data
types are not initialized. This happens only if the first
call to the hdf5 library passes a predefined data type symbol
as an argument. There should be some way to fix this...
./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
The free_func returns SUCCEED or FAIL, although the return
value is ignored by H5A. This is so we can use the various
H5*_close() functions to free things.
H5Ainc_ref() and H5Adec_ref() are no longer public. Many of
the other atom functions should also be made private, but I'll
save that for later...
Added additional template groups called H5_TEMPLATE_0 through
H5_TEMPLATE_7 that are used by the various template
subclasses.
Increased the number of bits used for atom groups to prevent
negative atoms.
./src/H5AC.c
./src/H5ACprivate.h
Changed H5AC_new() to H5AC_create() to make names more consistent.
./src/H5B.c
./src/H5Bprivate.h
Changed H5B_new() to H5B_create() to make names more consistent.
./src/H5C.c
./src/H5Cprivate.h
./src/H5Cpublic.h
Now supports multiple subclasses of templates, although it's
done with big switch statements. The default values for
templates are defined in the source file to which that
template belongs. This got rid of lots of needless
preprocessor constants.
Added H5Ccreate() to create a new template. Changed
H5C_release() to H5Cclose() to make the naming more
consistent.
./src/H5D.c
./src/H5Dprivate.h
./src/H5Dpublic.h
Enhanced to use the new dataset interface, and uses the enhanced
data type and data space interfaces, which haven't been
completely implemented. The dataset interface doesn't handle
non-contiguous storage, compression, or data type and space
conversions yet.
./src/H5F.c
./src/H5Fprivate.h
./src/H5Fpublic.h
Removed H5Fflush() since just calls H5F_flush(), which doesn't
do what the user would probably think it does, namely, flush
everything. It only flushes those things sitting in the H5AC
cache and the boot block.
Changed the `file_create_parms' field of H5F_low_t to just
`create_parms' since the `file' part is obvious.
./src/H5Fistore.c
Added some support for external files. Mostly just in the
file format and not supported much by the library yet. I need
to finish some dataset functions first.
Changed H5F_istore_new() to H5F_istore_create() to make names
more uniform across packages.
./src/H5Flow.c
Flushing a file causes the file to be physically extended to
the logical eof. This prevents H5F_open() from thinking a
file has been truncated. Most of the time the file will
already be that large, and when it isn't Unix will often just
allocate the final block anyway.
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gstab.c
Removed H5G_basename()
Removed (temporarily) data type information from symbol table
entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to
reflect that it's a simple data space and has nothing to do
with raw data.
Changed H5G_node_new() to H5G_node_create() and H5G_stab_new()
to H5G_stab_create() to make names more uniform across
packages.
Fixed an undefined address bug that happens when H5G_node_debug()
program doesn't pass enough info to H5G_node_load().
./src/H5H.c
./src/H5Hprivate.h
Changed H5H_new() to H5H_create() to make the names more
uniform across packages.
./src/H5M.c
./src/H5Mprivate.h
./src/H5Mpublic.h
Nulled all the create functions. Most of the other callbacks
are to public functions. Removed H5Mcreate().
Changed hobjtype_t to group_t since it has to be the same
thing anyway.
./src/H5O.c
./src/H5Oprivate.h
./src/H5Osdim.c
./src/H5Osdtyp.c
Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since
`simple data space' is its official name, not `simple
dimensions'. Will eventually add H5O_CDSPACE for comples data
spaces. Changed _sim_dim_ to _dspace_.
Replaced H5O_SIM_DTYPE and the compound data type messages
with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_.
Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since
contiguous storage is not necessarily standard. Changed
_std_store_ to _cstore_ in H5Ocstore.c
Added the H5O_EFL (external file list) message.
Changed H5O_new() to H5O_create() to make names more uniform
across packages.
./src/H5Oefl.c NEW
External file list message for specifying which non-hdf5 files
contain raw data for a dataset.
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
Renamed and moved data structures to make the names conform to
our naming scheme.
./src/H5T.c
./src/H5Tprivate.h
./src/H5Tpublic.h
./src/H5Tpkg.h NEW
Data structures redesigned to be more flexible. The interface
was redesigned to make it more regular and to make some names
more uniform across packages.
./src/H5detect.c
Output was changed to produce a file that conforms to the hdf5
coding standard.
./src/Makefile.in
Generates H5Tinit.c by running H5detect.
./src/debug.c
Moved command argument processing.
1997-12-11 06:41:07 +08:00
|
|
|
} H5F_create_t;
|
1997-08-16 00:51:34 +08:00
|
|
|
|
1998-02-06 11:00:35 +08:00
|
|
|
/*
|
1998-03-05 00:20:23 +08:00
|
|
|
* File-access property list.
|
1998-02-06 11:00:35 +08:00
|
|
|
*/
|
|
|
|
typedef struct H5F_access_t {
|
1998-09-24 23:51:05 +08:00
|
|
|
intn mdc_nelmts; /* Size of meta data cache (elements) */
|
|
|
|
intn rdcc_nelmts; /* Size of raw data chunk cache (elmts) */
|
1998-05-22 23:05:53 +08:00
|
|
|
size_t rdcc_nbytes; /* Size of raw data chunk cache (bytes) */
|
|
|
|
double rdcc_w0; /* Preempt read chunks first? [0.0..1.0]*/
|
1998-06-10 22:43:15 +08:00
|
|
|
hsize_t threshold; /* Threshold for alignment */
|
|
|
|
hsize_t alignment; /* Alignment */
|
1998-11-25 08:29:09 +08:00
|
|
|
uintn gc_ref; /* Garbage-collect references? */
|
1998-02-20 02:19:48 +08:00
|
|
|
H5F_driver_t driver; /* Low level file driver */
|
|
|
|
union {
|
|
|
|
|
|
|
|
/* Properties for in-core files */
|
|
|
|
struct {
|
|
|
|
size_t increment; /*amount by which to increment size*/
|
|
|
|
} core;
|
|
|
|
|
|
|
|
/* Properties for file families */
|
|
|
|
struct {
|
[svn-r339] Changes since 19980408
----------------------
./src/H5Osdspace.c
./html/H5.format.html
In the past we were allowed to have >2GB files on a 32-bit
machine as long as no dataset within the file was larger than
4GB (or whatever sizeof(size_t) is). That's been fixed now.
All dataset size calculations are done with `hsize_t' which is
normally defined as `unsigned long long'.
./src/H5F.c
./src/H5Ffamily.c
./src/H5Fprivate.h
./src/H5P.c
./src/H5Ppublic.h
The file family member size can now be set/queried. The
default is still 64MB, but it can be set to 1GB by saying:
H5Pset_family (plist, 30, H5P_DEFAULT);
When opening an existing file family the specified
bits-per-member is ignored and the first member of the family
determines the bits-per-member, which can be retrieved with
H5Pget_family().
./acconfig.h
./configure.in
./src/H5config.h
./src/H5public.h
Added `--disable-hsizet' so that those with old GCC compilers
(<2.8.1) can still compile the code.
./src/H5.c
./src/H5private.h
Added HDfprintf() which works just like fprintf() except you
can give `H' as a size modifier for the integer conversions
and supply an `hsize_t' or `hssize_t' argument without casting
it. For instance:
hsize_t npoints = H5Sget_npoints(space);
HDfprintf(stdout,"Dataset has %Hd (%#018Hx) points\n",
npoints, npoints);
You can now give `%a' as a format to print an address, but all
formating flags are ignored and it causes the return value of
HDfprintf() to not include the characters in the address (but
who uses the return value anyway :-). Example:
H5G_t *grp;
HDfprintf(stdout, "Group object header at %a\n",
&(grp->ent.header));
Added HDstrtoll() which works exactly like [HD]strtol() except
the result is an int64.
./src/debug.c
Large addresses can now be entered from the command-line. Use
either decimal, octal (leading `0') or hexadecimal (leading
`0x') when giving the address.
./src/h5ls.c
The printf format for dataset dimensions was changed to `%Hu'
to support large datasets.
./test/big.c [NEW]
A test for big datasets on 32-bit machines. This test is not
run by default. Don't try to run it on an nfs-mounted file
system or other file system that doesn't support holes because
it creates two 32GB datasets of all zero.
1998-04-10 04:22:11 +08:00
|
|
|
struct H5F_access_t *memb_access; /*plist for the members */
|
1998-05-14 01:58:24 +08:00
|
|
|
haddr_t memb_size; /*number of bits in offset */
|
1998-02-20 02:19:48 +08:00
|
|
|
} fam;
|
|
|
|
|
|
|
|
/* Properties for the split driver */
|
|
|
|
struct {
|
1998-02-26 04:31:17 +08:00
|
|
|
char *meta_ext; /*name extension for meta file */
|
|
|
|
char *raw_ext; /*name extension for raw file */
|
1998-02-20 02:19:48 +08:00
|
|
|
struct H5F_access_t *meta_access; /*plist for meta file */
|
|
|
|
struct H5F_access_t *raw_access; /*plist for raw data file */
|
|
|
|
} split;
|
|
|
|
|
1998-02-06 11:00:35 +08:00
|
|
|
#ifdef HAVE_PARALLEL
|
1998-02-20 02:19:48 +08:00
|
|
|
/* Properties for parallel I/O */
|
|
|
|
struct {
|
1998-08-17 23:15:19 +08:00
|
|
|
MPI_Comm comm; /* communicator for file access */
|
|
|
|
MPI_Info info; /* optional info for MPI-IO */
|
|
|
|
MPI_Datatype btype; /* buffer type for xfers */
|
|
|
|
MPI_Datatype ftype; /* file type for xfers */
|
|
|
|
haddr_t disp; /* displacement for set_view in xfers */
|
|
|
|
int use_types; /* if !0, use btype, ftype, disp. */
|
|
|
|
/* otherwise do simple byteblk xfer */
|
|
|
|
int old_use_types; /* remember value of use_types */
|
|
|
|
/* from last xfer */
|
1998-02-20 02:19:48 +08:00
|
|
|
} mpio;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
} u;
|
1998-02-06 11:00:35 +08:00
|
|
|
} H5F_access_t;
|
|
|
|
|
1997-09-25 00:30:22 +08:00
|
|
|
/*
|
|
|
|
* These things make a file unique.
|
|
|
|
*/
|
|
|
|
typedef struct H5F_search_t {
|
1998-01-21 03:10:08 +08:00
|
|
|
dev_t dev; /* Device number containing file */
|
|
|
|
ino_t ino; /* Unique file number on device */
|
1999-04-30 01:44:36 +08:00
|
|
|
#if WIN32
|
1999-04-30 23:54:52 +08:00
|
|
|
/*
|
|
|
|
* Specifies the low-order word of a unique identifier associated with the
|
|
|
|
* file. This identifier and the volume serial number uniquely identify a
|
|
|
|
* file. This number may change when the system is restarted or when the
|
|
|
|
* file is opened. After a process opens a file, the identifier is
|
|
|
|
* constant until the file is closed. An application can use this
|
|
|
|
* identifier and the volume serial number to determine whether two
|
|
|
|
* handles refer to the same file.
|
|
|
|
*/
|
|
|
|
int fileindexlo;
|
|
|
|
int fileindexhi;
|
1999-04-30 01:44:36 +08:00
|
|
|
#endif
|
1997-09-25 00:30:22 +08:00
|
|
|
} H5F_search_t;
|
|
|
|
|
1997-10-09 06:11:46 +08:00
|
|
|
/* For determining what the last file operation was */
|
1997-10-23 06:08:14 +08:00
|
|
|
typedef enum {
|
1998-01-21 03:10:08 +08:00
|
|
|
H5F_OP_UNKNOWN, /* Don't know what the last operation was*/
|
|
|
|
H5F_OP_SEEK, /* Last operation was a seek */
|
|
|
|
H5F_OP_WRITE, /* Last operation was a write */
|
|
|
|
H5F_OP_READ /* Last operation was a read */
|
1997-10-23 06:08:14 +08:00
|
|
|
} H5F_fileop_t;
|
|
|
|
|
1998-06-10 22:43:15 +08:00
|
|
|
/* A free-list entry */
|
|
|
|
#define H5MF_NFREE 32 /*size of free block array */
|
|
|
|
typedef struct H5MF_free_t {
|
|
|
|
haddr_t addr; /*file address */
|
|
|
|
hsize_t size; /*size of free area */
|
|
|
|
} H5MF_free_t;
|
|
|
|
|
1999-04-26 21:33:38 +08:00
|
|
|
/* Dataset transfer property list */
|
|
|
|
typedef struct H5F_xfer_t {
|
|
|
|
size_t buf_size; /*max temp buffer size */
|
|
|
|
void *tconv_buf; /*type conversion buffer or null */
|
|
|
|
void *bkg_buf; /*background buffer or null */
|
|
|
|
H5T_bkg_t need_bkg; /*type of background buffer needed */
|
|
|
|
double split_ratios[3];/*B-tree node splitting ratios */
|
|
|
|
uintn cache_hyper; /*cache hyperslab blocks during I/O? */
|
|
|
|
uintn block_limit; /*largest hyperslab block to cache */
|
|
|
|
H5D_transfer_t xfer_mode; /*independent or collective transfer */
|
1999-07-03 18:31:26 +08:00
|
|
|
H5MM_allocate_t vlen_alloc; /* VL datatype allocation function */
|
|
|
|
void * alloc_info; /* VL datatype allocation information */
|
|
|
|
H5MM_free_t vlen_free; /* VL datatype free function */
|
|
|
|
void * free_info; /* VL datatype free information */
|
1999-04-26 21:33:38 +08:00
|
|
|
} H5F_xfer_t;
|
|
|
|
|
1997-10-23 06:08:14 +08:00
|
|
|
/*
|
|
|
|
* Define the low-level file interface.
|
|
|
|
*/
|
|
|
|
typedef struct H5F_low_class_t {
|
1998-10-27 06:44:13 +08:00
|
|
|
htri_t (*access)(const char *name, const H5F_access_t *access_parms,
|
1998-02-20 02:19:48 +08:00
|
|
|
int mode, H5F_search_t *key/*out*/);
|
|
|
|
struct H5F_low_t *(*open)(const char *name,
|
|
|
|
const H5F_access_t *access_parms, uintn flags,
|
|
|
|
H5F_search_t *key/*out*/);
|
|
|
|
herr_t (*close)(struct H5F_low_t *lf,
|
|
|
|
const H5F_access_t *access_parms);
|
|
|
|
herr_t (*read)(struct H5F_low_t *lf, const H5F_access_t *access_parms,
|
1999-04-26 21:33:38 +08:00
|
|
|
const H5F_xfer_t *xfer_parms, const haddr_t *addr,
|
|
|
|
size_t size, uint8_t *buf);
|
|
|
|
herr_t (*write)(struct H5F_low_t *lf,
|
|
|
|
const H5F_access_t *access_parms,
|
|
|
|
const H5F_xfer_t *xfer_parms, const haddr_t *addr,
|
|
|
|
size_t size, const uint8_t *buf);
|
1998-02-20 02:19:48 +08:00
|
|
|
herr_t (*flush)(struct H5F_low_t *lf,
|
|
|
|
const H5F_access_t *access_parms);
|
|
|
|
herr_t (*extend)(struct H5F_low_t *lf,
|
|
|
|
const H5F_access_t *access_parms,
|
1998-06-10 22:43:15 +08:00
|
|
|
intn op, hsize_t size, haddr_t *addr/*out*/);
|
|
|
|
intn (*alloc)(struct H5F_low_t *lf, intn op, hsize_t alignment,
|
1998-07-16 05:21:15 +08:00
|
|
|
hsize_t threshold, hsize_t size, H5MF_free_t *blk,
|
1998-06-10 22:43:15 +08:00
|
|
|
haddr_t *addr/*out*/);
|
1997-10-23 06:08:14 +08:00
|
|
|
} H5F_low_class_t;
|
|
|
|
|
1999-02-21 00:18:51 +08:00
|
|
|
/*
|
|
|
|
* One of these H5F_low_t structs is allocated for each H5F_file_t struct.
|
|
|
|
* This struct describes how to access the storage for the hdf5 address space,
|
|
|
|
* whether that storage is file, local memory, shared memory, network
|
|
|
|
* distributed global memory, etc.
|
|
|
|
*/
|
1997-10-23 06:08:14 +08:00
|
|
|
typedef struct H5F_low_t {
|
1998-02-20 02:19:48 +08:00
|
|
|
const H5F_low_class_t *type;/* What type of file is this? */
|
1998-01-21 03:10:08 +08:00
|
|
|
haddr_t eof; /* Address of logical end-of-file */
|
1999-06-02 21:59:35 +08:00
|
|
|
uintn eof_written; /* whether the last byte is written */
|
1998-01-17 06:23:43 +08:00
|
|
|
union {
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
/* File families */
|
|
|
|
struct {
|
|
|
|
char *name; /* Family name */
|
|
|
|
uintn flags; /* Flags for opening member files */
|
|
|
|
intn nmemb; /* Number of family members */
|
|
|
|
intn nalloc; /* Size of member table in elements */
|
|
|
|
struct H5F_low_t **memb; /* An array of family members */
|
1998-05-14 01:58:24 +08:00
|
|
|
haddr_t memb_size; /*Size of each family member */
|
1998-01-21 03:10:08 +08:00
|
|
|
} fam;
|
|
|
|
|
|
|
|
/* Split meta/raw data */
|
|
|
|
struct {
|
|
|
|
char *name; /* Base name w/o extension */
|
1998-11-19 02:40:09 +08:00
|
|
|
uint64_t mask; /* Bit that determines which file to use*/
|
1998-01-21 03:10:08 +08:00
|
|
|
struct H5F_low_t *meta; /* Meta data file */
|
|
|
|
struct H5F_low_t *raw; /* Raw data file */
|
|
|
|
} split;
|
|
|
|
|
|
|
|
/* Posix section 2 I/O */
|
|
|
|
struct {
|
|
|
|
int fd; /* The unix file descriptor */
|
|
|
|
H5F_fileop_t op; /* Previous file operation */
|
1998-02-20 02:19:48 +08:00
|
|
|
#ifdef HAVE_LSEEK64
|
|
|
|
off64_t cur; /* Current file position */
|
|
|
|
#else
|
1998-01-21 03:10:08 +08:00
|
|
|
off_t cur; /* Current file position */
|
1998-02-20 02:19:48 +08:00
|
|
|
#endif
|
1998-01-21 03:10:08 +08:00
|
|
|
} sec2;
|
|
|
|
|
|
|
|
/* Posix stdio */
|
|
|
|
struct {
|
|
|
|
FILE *f; /* Posix stdio file */
|
|
|
|
H5F_fileop_t op; /* Previous file operation */
|
1998-02-20 02:19:48 +08:00
|
|
|
#ifdef HAVE_FSEEK64
|
1998-11-19 02:40:09 +08:00
|
|
|
int64_t cur; /* Current file position */
|
1998-02-20 02:19:48 +08:00
|
|
|
#else
|
1998-04-07 23:34:16 +08:00
|
|
|
long cur; /* Current file position */
|
1998-02-20 02:19:48 +08:00
|
|
|
#endif
|
1998-01-21 03:10:08 +08:00
|
|
|
} stdio;
|
|
|
|
|
|
|
|
/* In-core temp file */
|
|
|
|
struct {
|
1998-11-19 02:40:09 +08:00
|
|
|
uint8_t *mem; /* Mem image of the file */
|
1998-01-21 03:10:08 +08:00
|
|
|
size_t size; /* Current file size */
|
|
|
|
size_t alloc; /* Current size of MEM buffer */
|
|
|
|
} core;
|
1998-01-17 06:23:43 +08:00
|
|
|
|
1998-02-06 11:00:35 +08:00
|
|
|
#ifdef HAVE_PARALLEL
|
1998-02-03 00:26:49 +08:00
|
|
|
/* MPI-IO */
|
|
|
|
struct {
|
|
|
|
MPI_File f; /* MPI-IO file handle */
|
1998-08-29 07:37:58 +08:00
|
|
|
hbool_t allsame;/* all procs should write same data, *
|
|
|
|
* so only p0 will do the actual write */
|
1998-02-03 00:26:49 +08:00
|
|
|
} mpio;
|
|
|
|
#endif
|
|
|
|
|
1998-01-17 06:23:43 +08:00
|
|
|
} u;
|
1997-10-23 06:08:14 +08:00
|
|
|
} H5F_low_t;
|
|
|
|
|
|
|
|
/* What types of low-level files are there? */
|
|
|
|
#ifndef H5F_LOW_DFLT
|
1998-09-22 23:27:26 +08:00
|
|
|
# define H5F_LOW_DFLT H5F_LOW_SEC2 /* The default type */
|
1997-10-23 06:08:14 +08:00
|
|
|
#endif
|
1999-02-19 00:21:34 +08:00
|
|
|
__DLLVAR__ const H5F_low_class_t H5F_LOW_SEC2_g[]; /*Posix section 2 */
|
|
|
|
__DLLVAR__ const H5F_low_class_t H5F_LOW_STDIO_g[]; /*Posix stdio */
|
|
|
|
__DLLVAR__ const H5F_low_class_t H5F_LOW_CORE_g[]; /*In-core temp file */
|
|
|
|
__DLLVAR__ const H5F_low_class_t H5F_LOW_FAMILY_g[];/*File family */
|
|
|
|
__DLLVAR__ const H5F_low_class_t H5F_LOW_SPLIT_g[]; /*Split meta/raw data*/
|
1998-02-06 11:00:35 +08:00
|
|
|
#ifdef HAVE_PARALLEL
|
1999-02-19 00:21:34 +08:00
|
|
|
__DLLVAR__ const H5F_low_class_t H5F_LOW_MPIO_g[]; /*MPI-IO */
|
1998-02-03 00:26:49 +08:00
|
|
|
#endif
|
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from
FUNC_ENTER() and made it a locally-defined preprocessor
symbol, INTERFACE_INIT.
Changed `offset' to `address' and `length' to `size' in
documentation so it's more consistent. `Offset' still appears
occassionally when it refers to a byte offset within some
other data structure.
Moved interface termination function prototypes from public
header files to .c files and made them static.
./src/H5.c
./src/H5public.h
Added H5init() because it's possible that the predefined data
types are not initialized. This happens only if the first
call to the hdf5 library passes a predefined data type symbol
as an argument. There should be some way to fix this...
./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
The free_func returns SUCCEED or FAIL, although the return
value is ignored by H5A. This is so we can use the various
H5*_close() functions to free things.
H5Ainc_ref() and H5Adec_ref() are no longer public. Many of
the other atom functions should also be made private, but I'll
save that for later...
Added additional template groups called H5_TEMPLATE_0 through
H5_TEMPLATE_7 that are used by the various template
subclasses.
Increased the number of bits used for atom groups to prevent
negative atoms.
./src/H5AC.c
./src/H5ACprivate.h
Changed H5AC_new() to H5AC_create() to make names more consistent.
./src/H5B.c
./src/H5Bprivate.h
Changed H5B_new() to H5B_create() to make names more consistent.
./src/H5C.c
./src/H5Cprivate.h
./src/H5Cpublic.h
Now supports multiple subclasses of templates, although it's
done with big switch statements. The default values for
templates are defined in the source file to which that
template belongs. This got rid of lots of needless
preprocessor constants.
Added H5Ccreate() to create a new template. Changed
H5C_release() to H5Cclose() to make the naming more
consistent.
./src/H5D.c
./src/H5Dprivate.h
./src/H5Dpublic.h
Enhanced to use the new dataset interface, and uses the enhanced
data type and data space interfaces, which haven't been
completely implemented. The dataset interface doesn't handle
non-contiguous storage, compression, or data type and space
conversions yet.
./src/H5F.c
./src/H5Fprivate.h
./src/H5Fpublic.h
Removed H5Fflush() since just calls H5F_flush(), which doesn't
do what the user would probably think it does, namely, flush
everything. It only flushes those things sitting in the H5AC
cache and the boot block.
Changed the `file_create_parms' field of H5F_low_t to just
`create_parms' since the `file' part is obvious.
./src/H5Fistore.c
Added some support for external files. Mostly just in the
file format and not supported much by the library yet. I need
to finish some dataset functions first.
Changed H5F_istore_new() to H5F_istore_create() to make names
more uniform across packages.
./src/H5Flow.c
Flushing a file causes the file to be physically extended to
the logical eof. This prevents H5F_open() from thinking a
file has been truncated. Most of the time the file will
already be that large, and when it isn't Unix will often just
allocate the final block anyway.
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gstab.c
Removed H5G_basename()
Removed (temporarily) data type information from symbol table
entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to
reflect that it's a simple data space and has nothing to do
with raw data.
Changed H5G_node_new() to H5G_node_create() and H5G_stab_new()
to H5G_stab_create() to make names more uniform across
packages.
Fixed an undefined address bug that happens when H5G_node_debug()
program doesn't pass enough info to H5G_node_load().
./src/H5H.c
./src/H5Hprivate.h
Changed H5H_new() to H5H_create() to make the names more
uniform across packages.
./src/H5M.c
./src/H5Mprivate.h
./src/H5Mpublic.h
Nulled all the create functions. Most of the other callbacks
are to public functions. Removed H5Mcreate().
Changed hobjtype_t to group_t since it has to be the same
thing anyway.
./src/H5O.c
./src/H5Oprivate.h
./src/H5Osdim.c
./src/H5Osdtyp.c
Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since
`simple data space' is its official name, not `simple
dimensions'. Will eventually add H5O_CDSPACE for comples data
spaces. Changed _sim_dim_ to _dspace_.
Replaced H5O_SIM_DTYPE and the compound data type messages
with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_.
Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since
contiguous storage is not necessarily standard. Changed
_std_store_ to _cstore_ in H5Ocstore.c
Added the H5O_EFL (external file list) message.
Changed H5O_new() to H5O_create() to make names more uniform
across packages.
./src/H5Oefl.c NEW
External file list message for specifying which non-hdf5 files
contain raw data for a dataset.
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
Renamed and moved data structures to make the names conform to
our naming scheme.
./src/H5T.c
./src/H5Tprivate.h
./src/H5Tpublic.h
./src/H5Tpkg.h NEW
Data structures redesigned to be more flexible. The interface
was redesigned to make it more regular and to make some names
more uniform across packages.
./src/H5detect.c
Output was changed to produce a file that conforms to the hdf5
coding standard.
./src/Makefile.in
Generates H5Tinit.c by running H5detect.
./src/debug.c
Moved command argument processing.
1997-12-11 06:41:07 +08:00
|
|
|
|
1998-05-22 23:05:53 +08:00
|
|
|
/* The raw data chunk cache */
|
|
|
|
typedef struct H5F_rdcc_t {
|
|
|
|
uintn ninits; /* Number of chunk creations */
|
|
|
|
uintn nhits; /* Number of cache hits */
|
|
|
|
uintn nmisses;/* Number of cache misses */
|
|
|
|
uintn nflushes;/* Number of cache flushes */
|
|
|
|
size_t nbytes; /* Current cached raw data in bytes */
|
|
|
|
intn nslots; /* Number of chunk slots allocated */
|
1998-09-24 23:51:05 +08:00
|
|
|
struct H5F_rdcc_ent_t *head; /* Head of doubly linked list */
|
|
|
|
struct H5F_rdcc_ent_t *tail; /* Tail of doubly linked list */
|
1998-05-22 23:05:53 +08:00
|
|
|
intn nused; /* Number of chunk slots in use */
|
1998-09-24 23:51:05 +08:00
|
|
|
struct H5F_rdcc_ent_t **slot; /* Chunk slots, each points to a chunk*/
|
1998-05-22 23:05:53 +08:00
|
|
|
} H5F_rdcc_t;
|
|
|
|
|
1997-09-25 00:30:22 +08:00
|
|
|
/*
|
|
|
|
* Define the structure to store the file information for HDF5 files. One of
|
1999-02-21 00:18:51 +08:00
|
|
|
* these structures is allocated per file, not per H5Fopen(). That is, set of
|
|
|
|
* H5F_t structs can all point to the same H5F_file_t struct. The `nrefs'
|
|
|
|
* count in this struct indicates the number of H5F_t structs which are
|
|
|
|
* pointing to this struct.
|
1997-09-25 00:30:22 +08:00
|
|
|
*/
|
|
|
|
typedef struct H5F_file_t {
|
1998-01-21 03:10:08 +08:00
|
|
|
H5F_search_t key; /* The key for looking up files */
|
|
|
|
uintn flags; /* Access Permissions for file */
|
|
|
|
H5F_low_t *lf; /* Lower level file handle for I/O */
|
|
|
|
uintn nrefs; /* Ref count for times file is opened */
|
1998-11-19 02:40:09 +08:00
|
|
|
uint32_t consist_flags; /* File Consistency Flags */
|
1998-01-21 03:10:08 +08:00
|
|
|
haddr_t boot_addr; /* Absolute address of boot block */
|
|
|
|
haddr_t base_addr; /* Absolute base address for rel.addrs. */
|
|
|
|
haddr_t freespace_addr; /* Relative address of free-space info */
|
|
|
|
haddr_t hdf5_eof; /* Relative addr of end of all hdf5 data*/
|
|
|
|
struct H5AC_t *cache; /* The object cache */
|
1998-05-14 01:58:24 +08:00
|
|
|
H5F_create_t *create_parms; /* File-creation property list */
|
|
|
|
H5F_access_t *access_parms; /* File-access property list */
|
1998-03-25 07:18:34 +08:00
|
|
|
struct H5G_t *root_grp; /* Open root group */
|
1998-03-31 03:24:08 +08:00
|
|
|
intn ncwfs; /* Num entries on cwfs list */
|
|
|
|
struct H5HG_heap_t **cwfs; /* Global heap cache */
|
1998-05-22 23:05:53 +08:00
|
|
|
H5F_rdcc_t rdcc; /* Raw data chunk cache */
|
1998-06-10 22:43:15 +08:00
|
|
|
intn fl_nfree; /*number of free blocks in array */
|
|
|
|
H5MF_free_t fl_free[H5MF_NFREE]; /*free block array */
|
1997-09-25 00:30:22 +08:00
|
|
|
} H5F_file_t;
|
|
|
|
|
1999-02-21 00:18:51 +08:00
|
|
|
/* Mount property list */
|
|
|
|
typedef struct H5F_mprop_t {
|
|
|
|
hbool_t local; /* Are absolute symlinks local to file? */
|
|
|
|
} H5F_mprop_t;
|
|
|
|
|
|
|
|
/* A record of the mount table */
|
|
|
|
typedef struct H5F_mount_t {
|
|
|
|
struct H5G_t *group; /* Mount point group held open */
|
|
|
|
struct H5F_t *file; /* File mounted at that point */
|
|
|
|
} H5F_mount_t;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The mount table describes what files are attached to (mounted on) the file
|
|
|
|
* to which this table belongs.
|
|
|
|
*/
|
|
|
|
typedef struct H5F_mtab_t {
|
|
|
|
struct H5F_t *parent;/* Parent file */
|
|
|
|
uintn nmounts;/* Number of children which are mounted */
|
|
|
|
uintn nalloc; /* Number of mount slots allocated */
|
|
|
|
H5F_mount_t *child; /* An array of mount records */
|
|
|
|
} H5F_mtab_t;
|
|
|
|
|
1997-09-25 00:30:22 +08:00
|
|
|
/*
|
|
|
|
* This is the top-level file descriptor. One of these structures is
|
1999-02-21 00:18:51 +08:00
|
|
|
* allocated every time H5Fopen() is called although they may contain pointers
|
|
|
|
* to shared H5F_file_t structs. The reference count (nrefs) indicates the
|
|
|
|
* number of times the file has been opened (the application can only open a
|
|
|
|
* file once explicitly, but the library can open the file a second time to
|
|
|
|
* indicate that the file is mounted on some other file).
|
1997-09-25 00:30:22 +08:00
|
|
|
*/
|
|
|
|
typedef struct H5F_t {
|
1998-10-16 23:40:37 +08:00
|
|
|
uintn nrefs; /* Reference count */
|
1998-01-21 03:10:08 +08:00
|
|
|
uintn intent; /* The flags passed to H5F_open()*/
|
|
|
|
char *name; /* Name used to open file */
|
|
|
|
H5F_file_t *shared; /* The shared file info */
|
1998-10-15 03:35:08 +08:00
|
|
|
uintn nopen_objs; /* Number of open object headers*/
|
1999-02-21 00:18:51 +08:00
|
|
|
hid_t closing; /* H5I_FILE_CLOSING ID or zero */
|
1998-10-09 01:13:14 +08:00
|
|
|
H5F_mtab_t mtab; /* File mount table */
|
1997-09-25 00:30:22 +08:00
|
|
|
} H5F_t;
|
|
|
|
|
1997-07-31 05:17:56 +08:00
|
|
|
#ifdef NOT_YET
|
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from
FUNC_ENTER() and made it a locally-defined preprocessor
symbol, INTERFACE_INIT.
Changed `offset' to `address' and `length' to `size' in
documentation so it's more consistent. `Offset' still appears
occassionally when it refers to a byte offset within some
other data structure.
Moved interface termination function prototypes from public
header files to .c files and made them static.
./src/H5.c
./src/H5public.h
Added H5init() because it's possible that the predefined data
types are not initialized. This happens only if the first
call to the hdf5 library passes a predefined data type symbol
as an argument. There should be some way to fix this...
./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
The free_func returns SUCCEED or FAIL, although the return
value is ignored by H5A. This is so we can use the various
H5*_close() functions to free things.
H5Ainc_ref() and H5Adec_ref() are no longer public. Many of
the other atom functions should also be made private, but I'll
save that for later...
Added additional template groups called H5_TEMPLATE_0 through
H5_TEMPLATE_7 that are used by the various template
subclasses.
Increased the number of bits used for atom groups to prevent
negative atoms.
./src/H5AC.c
./src/H5ACprivate.h
Changed H5AC_new() to H5AC_create() to make names more consistent.
./src/H5B.c
./src/H5Bprivate.h
Changed H5B_new() to H5B_create() to make names more consistent.
./src/H5C.c
./src/H5Cprivate.h
./src/H5Cpublic.h
Now supports multiple subclasses of templates, although it's
done with big switch statements. The default values for
templates are defined in the source file to which that
template belongs. This got rid of lots of needless
preprocessor constants.
Added H5Ccreate() to create a new template. Changed
H5C_release() to H5Cclose() to make the naming more
consistent.
./src/H5D.c
./src/H5Dprivate.h
./src/H5Dpublic.h
Enhanced to use the new dataset interface, and uses the enhanced
data type and data space interfaces, which haven't been
completely implemented. The dataset interface doesn't handle
non-contiguous storage, compression, or data type and space
conversions yet.
./src/H5F.c
./src/H5Fprivate.h
./src/H5Fpublic.h
Removed H5Fflush() since just calls H5F_flush(), which doesn't
do what the user would probably think it does, namely, flush
everything. It only flushes those things sitting in the H5AC
cache and the boot block.
Changed the `file_create_parms' field of H5F_low_t to just
`create_parms' since the `file' part is obvious.
./src/H5Fistore.c
Added some support for external files. Mostly just in the
file format and not supported much by the library yet. I need
to finish some dataset functions first.
Changed H5F_istore_new() to H5F_istore_create() to make names
more uniform across packages.
./src/H5Flow.c
Flushing a file causes the file to be physically extended to
the logical eof. This prevents H5F_open() from thinking a
file has been truncated. Most of the time the file will
already be that large, and when it isn't Unix will often just
allocate the final block anyway.
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gstab.c
Removed H5G_basename()
Removed (temporarily) data type information from symbol table
entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to
reflect that it's a simple data space and has nothing to do
with raw data.
Changed H5G_node_new() to H5G_node_create() and H5G_stab_new()
to H5G_stab_create() to make names more uniform across
packages.
Fixed an undefined address bug that happens when H5G_node_debug()
program doesn't pass enough info to H5G_node_load().
./src/H5H.c
./src/H5Hprivate.h
Changed H5H_new() to H5H_create() to make the names more
uniform across packages.
./src/H5M.c
./src/H5Mprivate.h
./src/H5Mpublic.h
Nulled all the create functions. Most of the other callbacks
are to public functions. Removed H5Mcreate().
Changed hobjtype_t to group_t since it has to be the same
thing anyway.
./src/H5O.c
./src/H5Oprivate.h
./src/H5Osdim.c
./src/H5Osdtyp.c
Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since
`simple data space' is its official name, not `simple
dimensions'. Will eventually add H5O_CDSPACE for comples data
spaces. Changed _sim_dim_ to _dspace_.
Replaced H5O_SIM_DTYPE and the compound data type messages
with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_.
Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since
contiguous storage is not necessarily standard. Changed
_std_store_ to _cstore_ in H5Ocstore.c
Added the H5O_EFL (external file list) message.
Changed H5O_new() to H5O_create() to make names more uniform
across packages.
./src/H5Oefl.c NEW
External file list message for specifying which non-hdf5 files
contain raw data for a dataset.
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
Renamed and moved data structures to make the names conform to
our naming scheme.
./src/H5T.c
./src/H5Tprivate.h
./src/H5Tpublic.h
./src/H5Tpkg.h NEW
Data structures redesigned to be more flexible. The interface
was redesigned to make it more regular and to make some names
more uniform across packages.
./src/H5detect.c
Output was changed to produce a file that conforms to the hdf5
coding standard.
./src/Makefile.in
Generates H5Tinit.c by running H5detect.
./src/debug.c
Moved command argument processing.
1997-12-11 06:41:07 +08:00
|
|
|
#define H5F_ENCODE_OFFSET(f,p,o) (H5F_SIZEOF_ADDR(f)==4 ? UINT32ENCODE(p,o) \
|
|
|
|
: H5F_SIZEOF_ADDR(f)==8 ? UINT64ENCODE(p,o) \
|
|
|
|
: H5F_SIZEOF_ADDR(f)==2 ? UINT16ENCODE(p,o) \
|
1998-11-19 02:40:09 +08:00
|
|
|
: H5FPencode_unusual_offset(f,&(p),(uint8_t*)&(o)))
|
1997-07-31 05:17:56 +08:00
|
|
|
#else /* NOT_YET */
|
1998-10-16 23:40:37 +08:00
|
|
|
#define H5F_ENCODE_OFFSET(f,p,o) switch(H5F_SIZEOF_ADDR(f)) { \
|
|
|
|
case 4: UINT32ENCODE(p,o); break; \
|
|
|
|
case 8: UINT64ENCODE(p,o); break; \
|
|
|
|
case 2: UINT16ENCODE(p,o); break; \
|
|
|
|
}
|
1997-07-31 05:17:56 +08:00
|
|
|
#endif /* NOT_YET */
|
1997-08-08 03:23:00 +08:00
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
#define H5F_DECODE_OFFSET(f,p,o) \
|
|
|
|
switch (H5F_SIZEOF_ADDR (f)) { \
|
|
|
|
case 4: \
|
|
|
|
UINT32DECODE (p, o); \
|
|
|
|
break; \
|
|
|
|
case 8: \
|
|
|
|
UINT64DECODE (p, o); \
|
|
|
|
break; \
|
|
|
|
case 2: \
|
|
|
|
UINT16DECODE (p, o); \
|
|
|
|
break; \
|
1997-08-08 03:23:00 +08:00
|
|
|
}
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
#define H5F_encode_length(f,p,l) \
|
|
|
|
switch(H5F_SIZEOF_SIZE(f)) { \
|
|
|
|
case 4: UINT32ENCODE(p,l); break; \
|
|
|
|
case 8: UINT64ENCODE(p,l); break; \
|
|
|
|
case 2: UINT16ENCODE(p,l); break; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
|
|
|
|
1998-01-21 03:10:08 +08:00
|
|
|
#define H5F_decode_length(f,p,l) \
|
|
|
|
switch(H5F_SIZEOF_SIZE(f)) { \
|
|
|
|
case 4: UINT32DECODE(p,l); break; \
|
|
|
|
case 8: UINT64DECODE(p,l); break; \
|
|
|
|
case 2: UINT16DECODE(p,l); break; \
|
1997-08-16 00:51:34 +08:00
|
|
|
}
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1998-10-02 02:56:51 +08:00
|
|
|
/* Forward declarations for prototypes arguments */
|
|
|
|
struct H5O_layout_t;
|
|
|
|
struct H5O_efl_t;
|
|
|
|
struct H5O_pline_t;
|
1999-04-23 20:31:21 +08:00
|
|
|
struct H5F_xfer_t;
|
1998-10-02 02:56:51 +08:00
|
|
|
struct H5O_fill_t;
|
1998-10-09 01:13:14 +08:00
|
|
|
struct H5G_entry_t;
|
1997-07-31 05:17:56 +08:00
|
|
|
|
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from
FUNC_ENTER() and made it a locally-defined preprocessor
symbol, INTERFACE_INIT.
Changed `offset' to `address' and `length' to `size' in
documentation so it's more consistent. `Offset' still appears
occassionally when it refers to a byte offset within some
other data structure.
Moved interface termination function prototypes from public
header files to .c files and made them static.
./src/H5.c
./src/H5public.h
Added H5init() because it's possible that the predefined data
types are not initialized. This happens only if the first
call to the hdf5 library passes a predefined data type symbol
as an argument. There should be some way to fix this...
./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
The free_func returns SUCCEED or FAIL, although the return
value is ignored by H5A. This is so we can use the various
H5*_close() functions to free things.
H5Ainc_ref() and H5Adec_ref() are no longer public. Many of
the other atom functions should also be made private, but I'll
save that for later...
Added additional template groups called H5_TEMPLATE_0 through
H5_TEMPLATE_7 that are used by the various template
subclasses.
Increased the number of bits used for atom groups to prevent
negative atoms.
./src/H5AC.c
./src/H5ACprivate.h
Changed H5AC_new() to H5AC_create() to make names more consistent.
./src/H5B.c
./src/H5Bprivate.h
Changed H5B_new() to H5B_create() to make names more consistent.
./src/H5C.c
./src/H5Cprivate.h
./src/H5Cpublic.h
Now supports multiple subclasses of templates, although it's
done with big switch statements. The default values for
templates are defined in the source file to which that
template belongs. This got rid of lots of needless
preprocessor constants.
Added H5Ccreate() to create a new template. Changed
H5C_release() to H5Cclose() to make the naming more
consistent.
./src/H5D.c
./src/H5Dprivate.h
./src/H5Dpublic.h
Enhanced to use the new dataset interface, and uses the enhanced
data type and data space interfaces, which haven't been
completely implemented. The dataset interface doesn't handle
non-contiguous storage, compression, or data type and space
conversions yet.
./src/H5F.c
./src/H5Fprivate.h
./src/H5Fpublic.h
Removed H5Fflush() since just calls H5F_flush(), which doesn't
do what the user would probably think it does, namely, flush
everything. It only flushes those things sitting in the H5AC
cache and the boot block.
Changed the `file_create_parms' field of H5F_low_t to just
`create_parms' since the `file' part is obvious.
./src/H5Fistore.c
Added some support for external files. Mostly just in the
file format and not supported much by the library yet. I need
to finish some dataset functions first.
Changed H5F_istore_new() to H5F_istore_create() to make names
more uniform across packages.
./src/H5Flow.c
Flushing a file causes the file to be physically extended to
the logical eof. This prevents H5F_open() from thinking a
file has been truncated. Most of the time the file will
already be that large, and when it isn't Unix will often just
allocate the final block anyway.
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gstab.c
Removed H5G_basename()
Removed (temporarily) data type information from symbol table
entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to
reflect that it's a simple data space and has nothing to do
with raw data.
Changed H5G_node_new() to H5G_node_create() and H5G_stab_new()
to H5G_stab_create() to make names more uniform across
packages.
Fixed an undefined address bug that happens when H5G_node_debug()
program doesn't pass enough info to H5G_node_load().
./src/H5H.c
./src/H5Hprivate.h
Changed H5H_new() to H5H_create() to make the names more
uniform across packages.
./src/H5M.c
./src/H5Mprivate.h
./src/H5Mpublic.h
Nulled all the create functions. Most of the other callbacks
are to public functions. Removed H5Mcreate().
Changed hobjtype_t to group_t since it has to be the same
thing anyway.
./src/H5O.c
./src/H5Oprivate.h
./src/H5Osdim.c
./src/H5Osdtyp.c
Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since
`simple data space' is its official name, not `simple
dimensions'. Will eventually add H5O_CDSPACE for comples data
spaces. Changed _sim_dim_ to _dspace_.
Replaced H5O_SIM_DTYPE and the compound data type messages
with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_.
Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since
contiguous storage is not necessarily standard. Changed
_std_store_ to _cstore_ in H5Ocstore.c
Added the H5O_EFL (external file list) message.
Changed H5O_new() to H5O_create() to make names more uniform
across packages.
./src/H5Oefl.c NEW
External file list message for specifying which non-hdf5 files
contain raw data for a dataset.
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
Renamed and moved data structures to make the names conform to
our naming scheme.
./src/H5T.c
./src/H5Tprivate.h
./src/H5Tpublic.h
./src/H5Tpkg.h NEW
Data structures redesigned to be more flexible. The interface
was redesigned to make it more regular and to make some names
more uniform across packages.
./src/H5detect.c
Output was changed to produce a file that conforms to the hdf5
coding standard.
./src/Makefile.in
Generates H5Tinit.c by running H5detect.
./src/debug.c
Moved command argument processing.
1997-12-11 06:41:07 +08:00
|
|
|
/* library variables */
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLLVAR__ const H5F_create_t H5F_create_dflt;
|
|
|
|
__DLLVAR__ H5F_access_t H5F_access_dflt;
|
1999-04-23 20:31:21 +08:00
|
|
|
__DLLVAR__ const H5F_xfer_t H5F_xfer_dflt;
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLLVAR__ const H5F_mprop_t H5F_mount_dflt;
|
[svn-r139] ./src/*.[ch]
Removed the interface initialization argument from
FUNC_ENTER() and made it a locally-defined preprocessor
symbol, INTERFACE_INIT.
Changed `offset' to `address' and `length' to `size' in
documentation so it's more consistent. `Offset' still appears
occassionally when it refers to a byte offset within some
other data structure.
Moved interface termination function prototypes from public
header files to .c files and made them static.
./src/H5.c
./src/H5public.h
Added H5init() because it's possible that the predefined data
types are not initialized. This happens only if the first
call to the hdf5 library passes a predefined data type symbol
as an argument. There should be some way to fix this...
./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
The free_func returns SUCCEED or FAIL, although the return
value is ignored by H5A. This is so we can use the various
H5*_close() functions to free things.
H5Ainc_ref() and H5Adec_ref() are no longer public. Many of
the other atom functions should also be made private, but I'll
save that for later...
Added additional template groups called H5_TEMPLATE_0 through
H5_TEMPLATE_7 that are used by the various template
subclasses.
Increased the number of bits used for atom groups to prevent
negative atoms.
./src/H5AC.c
./src/H5ACprivate.h
Changed H5AC_new() to H5AC_create() to make names more consistent.
./src/H5B.c
./src/H5Bprivate.h
Changed H5B_new() to H5B_create() to make names more consistent.
./src/H5C.c
./src/H5Cprivate.h
./src/H5Cpublic.h
Now supports multiple subclasses of templates, although it's
done with big switch statements. The default values for
templates are defined in the source file to which that
template belongs. This got rid of lots of needless
preprocessor constants.
Added H5Ccreate() to create a new template. Changed
H5C_release() to H5Cclose() to make the naming more
consistent.
./src/H5D.c
./src/H5Dprivate.h
./src/H5Dpublic.h
Enhanced to use the new dataset interface, and uses the enhanced
data type and data space interfaces, which haven't been
completely implemented. The dataset interface doesn't handle
non-contiguous storage, compression, or data type and space
conversions yet.
./src/H5F.c
./src/H5Fprivate.h
./src/H5Fpublic.h
Removed H5Fflush() since just calls H5F_flush(), which doesn't
do what the user would probably think it does, namely, flush
everything. It only flushes those things sitting in the H5AC
cache and the boot block.
Changed the `file_create_parms' field of H5F_low_t to just
`create_parms' since the `file' part is obvious.
./src/H5Fistore.c
Added some support for external files. Mostly just in the
file format and not supported much by the library yet. I need
to finish some dataset functions first.
Changed H5F_istore_new() to H5F_istore_create() to make names
more uniform across packages.
./src/H5Flow.c
Flushing a file causes the file to be physically extended to
the logical eof. This prevents H5F_open() from thinking a
file has been truncated. Most of the time the file will
already be that large, and when it isn't Unix will often just
allocate the final block anyway.
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gstab.c
Removed H5G_basename()
Removed (temporarily) data type information from symbol table
entries and renamed H5G_CACHED_SDATA to H5G_CACHED_SDSPACE to
reflect that it's a simple data space and has nothing to do
with raw data.
Changed H5G_node_new() to H5G_node_create() and H5G_stab_new()
to H5G_stab_create() to make names more uniform across
packages.
Fixed an undefined address bug that happens when H5G_node_debug()
program doesn't pass enough info to H5G_node_load().
./src/H5H.c
./src/H5Hprivate.h
Changed H5H_new() to H5H_create() to make the names more
uniform across packages.
./src/H5M.c
./src/H5Mprivate.h
./src/H5Mpublic.h
Nulled all the create functions. Most of the other callbacks
are to public functions. Removed H5Mcreate().
Changed hobjtype_t to group_t since it has to be the same
thing anyway.
./src/H5O.c
./src/H5Oprivate.h
./src/H5Osdim.c
./src/H5Osdtyp.c
Changed H5O_SIM_DIM to H5O_SDSPACE (simple data space) since
`simple data space' is its official name, not `simple
dimensions'. Will eventually add H5O_CDSPACE for comples data
spaces. Changed _sim_dim_ to _dspace_.
Replaced H5O_SIM_DTYPE and the compound data type messages
with a single H5O_DTYPE message. Changed _sim_dtype_ to _dtype_.
Changed H5O_STD_STORE to H5O_CSTORE (contiguous storage) since
contiguous storage is not necessarily standard. Changed
_std_store_ to _cstore_ in H5Ocstore.c
Added the H5O_EFL (external file list) message.
Changed H5O_new() to H5O_create() to make names more uniform
across packages.
./src/H5Oefl.c NEW
External file list message for specifying which non-hdf5 files
contain raw data for a dataset.
./src/H5P.c
./src/H5Pprivate.h
./src/H5Ppublic.h
Renamed and moved data structures to make the names conform to
our naming scheme.
./src/H5T.c
./src/H5Tprivate.h
./src/H5Tpublic.h
./src/H5Tpkg.h NEW
Data structures redesigned to be more flexible. The interface
was redesigned to make it more regular and to make some names
more uniform across packages.
./src/H5detect.c
Output was changed to produce a file that conforms to the hdf5
coding standard.
./src/Makefile.in
Generates H5Tinit.c by running H5detect.
./src/debug.c
Moved command argument processing.
1997-12-11 06:41:07 +08:00
|
|
|
|
1998-09-02 06:42:00 +08:00
|
|
|
#ifdef HAVE_PARALLEL
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLLVAR__ hbool_t H5_mpi_1_metawrite_g;
|
1998-09-02 06:42:00 +08:00
|
|
|
#endif /* HAVE_PARALLEL */
|
|
|
|
|
1997-07-31 05:17:56 +08:00
|
|
|
/* Private functions, not part of the publicly documented API */
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_init(void);
|
1999-02-19 00:21:34 +08:00
|
|
|
__DLL__ void H5F_encode_length_unusual(const H5F_t *f, uint8_t **p,
|
|
|
|
uint8_t *l);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ H5F_t *H5F_open(const char *name, uintn flags,
|
1999-02-19 00:21:34 +08:00
|
|
|
const H5F_create_t *create_parms,
|
|
|
|
const H5F_access_t *access_parms);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_close(H5F_t *f);
|
1999-02-21 00:18:51 +08:00
|
|
|
__DLL__ herr_t H5F_close_all(void);
|
|
|
|
__DLL__ herr_t H5F_flush_all(hbool_t invalidate);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_debug(H5F_t *f, const haddr_t *addr, FILE * stream,
|
1999-01-22 02:33:39 +08:00
|
|
|
intn indent, intn fwidth);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_istore_debug(H5F_t *f, const haddr_t *addr, FILE * stream,
|
1999-01-22 02:33:39 +08:00
|
|
|
intn indent, intn fwidth, int ndims);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_mountpoint(struct H5G_entry_t *find/*in,out*/);
|
1997-07-31 05:17:56 +08:00
|
|
|
|
1998-01-17 03:52:04 +08:00
|
|
|
/* Functions that operate on array storage */
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_arr_create(H5F_t *f,
|
1999-01-22 02:33:39 +08:00
|
|
|
struct H5O_layout_t *layout /*in,out*/);
|
1999-04-23 20:31:21 +08:00
|
|
|
__DLL__ herr_t H5F_arr_read (H5F_t *f, const struct H5F_xfer_t *xfer,
|
1999-01-22 02:33:39 +08:00
|
|
|
const struct H5O_layout_t *layout,
|
|
|
|
const struct H5O_pline_t *pline,
|
|
|
|
const struct H5O_fill_t *fill,
|
|
|
|
const struct H5O_efl_t *efl,
|
|
|
|
const hsize_t _hslab_size[],
|
|
|
|
const hsize_t mem_size[],
|
|
|
|
const hssize_t mem_offset[],
|
|
|
|
const hssize_t file_offset[], void *_buf/*out*/);
|
1999-04-23 20:31:21 +08:00
|
|
|
__DLL__ herr_t H5F_arr_write (H5F_t *f, const struct H5F_xfer_t *xfer,
|
1999-01-22 02:33:39 +08:00
|
|
|
const struct H5O_layout_t *layout,
|
|
|
|
const struct H5O_pline_t *pline,
|
|
|
|
const struct H5O_fill_t *fill,
|
|
|
|
const struct H5O_efl_t *efl,
|
|
|
|
const hsize_t _hslab_size[],
|
|
|
|
const hsize_t mem_size[],
|
|
|
|
const hssize_t mem_offset[],
|
|
|
|
const hssize_t file_offset[], const void *_buf);
|
1998-01-17 03:52:04 +08:00
|
|
|
|
1997-10-23 06:08:14 +08:00
|
|
|
/* Functions that operate on indexed storage */
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_istore_init (H5F_t *f);
|
|
|
|
__DLL__ herr_t H5F_istore_flush (H5F_t *f, hbool_t preempt);
|
|
|
|
__DLL__ herr_t H5F_istore_dest (H5F_t *f);
|
1999-04-23 20:31:21 +08:00
|
|
|
__DLL__ hsize_t H5F_istore_allocated(H5F_t *f, int ndims, haddr_t *addr);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_istore_stats (H5F_t *f, hbool_t headers);
|
1999-02-19 00:21:34 +08:00
|
|
|
__DLL__ herr_t H5F_istore_create(H5F_t *f,
|
|
|
|
struct H5O_layout_t *layout/*in,out*/);
|
1999-04-23 20:31:21 +08:00
|
|
|
__DLL__ herr_t H5F_istore_read(H5F_t *f, const struct H5F_xfer_t *xfer,
|
1999-02-19 00:21:34 +08:00
|
|
|
const struct H5O_layout_t *layout,
|
|
|
|
const struct H5O_pline_t *pline,
|
|
|
|
const struct H5O_fill_t *fill,
|
|
|
|
const hssize_t offset[], const hsize_t size[],
|
|
|
|
void *buf/*out*/);
|
1999-04-23 20:31:21 +08:00
|
|
|
__DLL__ herr_t H5F_istore_write(H5F_t *f, const struct H5F_xfer_t *xfer,
|
1999-02-19 00:21:34 +08:00
|
|
|
const struct H5O_layout_t *layout,
|
|
|
|
const struct H5O_pline_t *pline,
|
|
|
|
const struct H5O_fill_t *fill,
|
|
|
|
const hssize_t offset[], const hsize_t size[],
|
|
|
|
const void *buf);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_istore_allocate (H5F_t *f,
|
1999-02-19 00:21:34 +08:00
|
|
|
const struct H5O_layout_t *layout,
|
|
|
|
const hsize_t *space_dim,
|
|
|
|
const double split_ratios[],
|
|
|
|
const struct H5O_pline_t *pline,
|
|
|
|
const struct H5O_fill_t *fill);
|
1999-04-30 23:54:52 +08:00
|
|
|
__DLL__ herr_t H5F_istore_dump_btree(H5F_t *f, FILE *stream, int ndims,
|
|
|
|
haddr_t *addr);
|
1997-10-23 06:08:14 +08:00
|
|
|
|
|
|
|
/* Functions that operate on contiguous storage wrt boot block */
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_block_read(H5F_t *f, const haddr_t *addr, hsize_t size,
|
1999-04-26 21:33:38 +08:00
|
|
|
const H5F_xfer_t *xfer_parms, void *buf);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_block_write(H5F_t *f, const haddr_t *addr, hsize_t size,
|
1999-04-26 21:33:38 +08:00
|
|
|
const H5F_xfer_t *xfer_parms, const void *buf);
|
1997-10-23 06:08:14 +08:00
|
|
|
|
|
|
|
/* Functions that operate directly on low-level files */
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ const H5F_low_class_t *H5F_low_class (H5F_driver_t driver);
|
|
|
|
__DLL__ herr_t H5F_low_extend(H5F_low_t *lf, const H5F_access_t *access_parms,
|
1999-02-19 00:21:34 +08:00
|
|
|
intn op, hsize_t size, haddr_t *addr/*out*/);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_low_seteof(H5F_low_t *lf, const haddr_t *addr);
|
|
|
|
__DLL__ intn H5F_low_alloc (H5F_low_t *lf, intn op, hsize_t alignment,
|
1999-02-19 00:21:34 +08:00
|
|
|
hsize_t threshold, hsize_t size, H5MF_free_t *blk,
|
|
|
|
haddr_t *addr/*out*/);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ htri_t H5F_low_access(const H5F_low_class_t *type, const char *name,
|
1999-02-19 00:21:34 +08:00
|
|
|
const H5F_access_t *access_parms, int mode,
|
|
|
|
H5F_search_t *key);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ H5F_low_t *H5F_low_open(const H5F_low_class_t *type, const char *name,
|
1999-02-19 00:21:34 +08:00
|
|
|
const H5F_access_t *access_parms, uintn flags,
|
|
|
|
H5F_search_t *key);
|
|
|
|
__DLL__ H5F_low_t *H5F_low_close(H5F_low_t *lf,
|
|
|
|
const H5F_access_t *access_parms);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ hsize_t H5F_low_size(H5F_low_t *lf, haddr_t *addr);
|
|
|
|
__DLL__ herr_t H5F_low_read(H5F_low_t *lf, const H5F_access_t *access_parms,
|
1999-04-26 21:33:38 +08:00
|
|
|
const H5F_xfer_t *xfer_parms, const haddr_t *addr,
|
|
|
|
size_t size, uint8_t *buf);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_low_write(H5F_low_t *lf, const H5F_access_t *access_parms,
|
1999-04-26 21:33:38 +08:00
|
|
|
const H5F_xfer_t *xfer_parms, const haddr_t *addr,
|
|
|
|
size_t size, const uint8_t *buf);
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ herr_t H5F_low_flush(H5F_low_t *lf, const H5F_access_t *access_parms);
|
1997-11-14 22:42:14 +08:00
|
|
|
|
|
|
|
/* Functions that operate on addresses */
|
|
|
|
#define H5F_addr_eq(A1,A2) (H5F_addr_cmp(A1,A2)==0)
|
|
|
|
#define H5F_addr_ne(A1,A2) (H5F_addr_cmp(A1,A2)!=0)
|
|
|
|
#define H5F_addr_lt(A1,A2) (H5F_addr_cmp(A1,A2)<0)
|
|
|
|
#define H5F_addr_le(A1,A2) (H5F_addr_cmp(A1,A2)<=0)
|
|
|
|
#define H5F_addr_gt(A1,A2) (H5F_addr_cmp(A1,A2)>0)
|
|
|
|
#define H5F_addr_ge(A1,A2) (H5F_addr_cmp(A1,A2)>=0)
|
1998-01-21 03:10:08 +08:00
|
|
|
|
1999-02-02 23:52:59 +08:00
|
|
|
__DLL__ intn H5F_addr_cmp(const haddr_t *, const haddr_t *);
|
|
|
|
__DLL__ htri_t H5F_addr_defined(const haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_undef(haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_reset(haddr_t *);
|
|
|
|
__DLL__ htri_t H5F_addr_zerop(const haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_encode(H5F_t *, uint8_t **, const haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_decode(H5F_t *, const uint8_t **, haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_print(FILE *, const haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_pow2(uintn, haddr_t *);
|
|
|
|
__DLL__ void H5F_addr_inc(haddr_t *addr/*in,out*/, hsize_t inc);
|
|
|
|
__DLL__ void H5F_addr_adj(haddr_t *addr/*in,out*/, hssize_t adj);
|
|
|
|
__DLL__ void H5F_addr_add(haddr_t *, const haddr_t *);
|
|
|
|
__DLL__ uintn H5F_addr_hash(const haddr_t *, uintn mod);
|
1999-02-19 03:38:45 +08:00
|
|
|
__DLL__ herr_t H5F_addr_pack(H5F_t *f, haddr_t *addr,
|
|
|
|
const unsigned long objno[2]);
|
1997-10-23 06:08:14 +08:00
|
|
|
|
1998-09-02 06:42:00 +08:00
|
|
|
/* Functions for MPI-IO */
|
|
|
|
#ifdef HAVE_PARALLEL
|
1999-02-19 00:21:34 +08:00
|
|
|
__DLL__ htri_t H5F_mpio_tas_allsame(H5F_low_t *lf, hbool_t newval);
|
|
|
|
__DLL__ herr_t H5PC_Wait_for_left_neighbor(MPI_Comm comm);
|
|
|
|
__DLL__ herr_t H5PC_Signal_right_neighbor(MPI_Comm comm);
|
1998-09-02 06:42:00 +08:00
|
|
|
#endif /* HAVE_PARALLEL */
|
|
|
|
|
1997-08-16 00:51:34 +08:00
|
|
|
#endif
|