summaryrefslogtreecommitdiffstats
path: root/src/H5Ostab.c
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1997-08-07 19:23:00 (GMT)
committerRobb Matzke <matzke@llnl.gov>1997-08-07 19:23:00 (GMT)
commita905a3a1e343d4507049c30512842957e2f6307c (patch)
treeaa01b7418431c48634458a028c2fe6fd354f1684 /src/H5Ostab.c
parentdd0fbd5b0060ebc7703da8eaab747f7a3025be2a (diff)
downloadhdf5-a905a3a1e343d4507049c30512842957e2f6307c.zip
hdf5-a905a3a1e343d4507049c30512842957e2f6307c.tar.gz
hdf5-a905a3a1e343d4507049c30512842957e2f6307c.tar.bz2
[svn-r15] ./src/H5AC.c
./src/H5ACprivate.h ./src/H5ACproto.h ./src/H5Bproto.h ./src/H5Gproto.h ./src/H5Hproto.h ./src/H5MFprivate.h ./src/H5MFproto.h ./src/H5MM.c ./src/H5MMprivate.h ./src/H5MMproto.h Changed my e-mail address. ./src/H5O.c NEW ./src/H5Onull.c NEW ./src/H5Ocont. NEW ./src/H5Ostab.c NEW New functions for dealing with object headers. The H5O.c is the generic stuff, and each particular message has a source file for the specific stuff. Use ./src/H5Ostab.c as a model for implementing other messages. ./src/Makefile ./src/test/Makefile Added new files ./src/debug.c Added debugging calls for object headers. ./src/H5B.c ./src/H5Bprivate.h ./src/H5Gnode.c ./src/H5MF.c Changed my e-mail address. Improved error handling. ./src/H5Eprivate.h ./src/H5Eproto.h Added more error symbols ./src/H5F.c Changed my e-mail address. Used macros for sizeof offsets and lengths. Added the interface initialization function to H5F_block_read() and H5F_block_write(). Updated H5F_debug() ./src/H5Fprivate.h Got rid of H5F_symbol_table_size(). Use H5G_SIZEOF_ENTRY() instead. Reformatted H5F_decode_offset() for readability. ./src/H5G.c Changed my e-mail address. Improved error handling. Replaced not_implemented_yet__*() with real functions from H5O. ./src/H5Gprivate.h Changed `symtab' to `stab' to be consistent with other stuff. ./src/H5H.c ./src/H5Hprivate.h Changed my e-mail address. Improved error handling. Added an extra argument to H5H_new() to indicate whether you want a global heap or a local heap. ./src/hdf5gen.h Added NELMTS() Fixed FUNC_ENTER() Rewrote FUNC_LEAVE() in terms of HRETURN(). ./src/hdf5meta.h Added `const' to the decode macros. ./src/hdf5pabl.h Added PABLO_SAVE() ./test/testhdf5.c ./test/testhdf5.h Added calls for object header testing. ./test/theap.c Turned off some output.
Diffstat (limited to 'src/H5Ostab.c')
-rw-r--r--src/H5Ostab.c328
1 files changed, 328 insertions, 0 deletions
diff --git a/src/H5Ostab.c b/src/H5Ostab.c
new file mode 100644
index 0000000..ec6dd61
--- /dev/null
+++ b/src/H5Ostab.c
@@ -0,0 +1,328 @@
+/*-------------------------------------------------------------------------
+ * Copyright (C) 1997 National Center for Supercomputing Applications.
+ * All rights reserved.
+ *
+ *-------------------------------------------------------------------------
+ *
+ * Created: H5Ostab.c
+ * Aug 6 1997
+ * Robb Matzke <matzke@llnl.gov>
+ *
+ * Purpose: Symbol table messages.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#include <assert.h>
+
+#include "hdf5.h"
+
+#include "H5private.h"
+#include "H5Gprivate.h"
+#include "H5MMprivate.h"
+#include "H5Oprivate.h"
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_stab_decode (hdf5_file_t *f, const uint8 *p);
+static herr_t H5O_stab_encode (hdf5_file_t *f, size_t size, uint8 *p,
+ const void *_mesg);
+static void *H5O_stab_fast (const H5G_entry_t *ent, void *_mesg);
+static hbool_t H5O_stab_cache (H5G_entry_t *ent, const void *_mesg);
+static void *H5O_stab_copy (const void *_mesg, void *_dest);
+static size_t H5O_stab_size (hdf5_file_t *f, const void *_mesg);
+static herr_t H5O_stab_debug (hdf5_file_t *f, const void *_mesg,
+ FILE *stream, intn indent, intn fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_STAB[1] = {{
+ H5O_STAB_ID, /*message id number */
+ "stab", /*message name for debugging */
+ H5O_stab_decode, /*decode message */
+ H5O_stab_encode, /*encode message */
+ H5O_stab_fast, /*get message from stab entry */
+ H5O_stab_cache, /*put message into stab entry */
+ H5O_stab_copy, /*copy the native value */
+ H5O_stab_size, /*size of symbol table entry */
+ NULL, /*default free method */
+ H5O_stab_debug, /*debug the message */
+}};
+
+/* Is the interface initialized? */
+static intn interface_initialize_g = FALSE;
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_decode
+ *
+ * Purpose: Decode a symbol table message and return a pointer to
+ * a new one created with malloc().
+ *
+ * Return: Success: Ptr to new message in native order.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_stab_decode (hdf5_file_t *f, const uint8 *p)
+{
+ H5O_stab_t *stab;
+
+ FUNC_ENTER (H5O_stab_decode, NULL, NULL);
+
+ /* check args */
+ assert (f);
+ assert (p);
+
+ /* decode */
+ stab = H5MM_xcalloc (1, sizeof(H5O_stab_t));
+ H5F_decode_offset (f, p, stab->btree);
+ H5F_decode_offset (f, p, stab->heap);
+
+ FUNC_LEAVE (stab);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_encode
+ *
+ * Purpose: Encodes a symbol table entry.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_stab_encode (hdf5_file_t *f, size_t size, uint8 *p, const void *_mesg)
+{
+ const H5O_stab_t *stab = (const H5O_stab_t *)_mesg;
+
+ FUNC_ENTER (H5O_stab_encode, NULL, FAIL);
+
+ /* check args */
+ assert (f);
+ assert (size == 2 * H5F_SIZEOF_OFFSET(f));
+ assert (p);
+ assert (stab);
+
+ /* encode */
+ H5F_encode_offset (f, p, stab->btree);
+ H5F_encode_offset (f, p, stab->heap);
+
+ FUNC_LEAVE (SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_fast
+ *
+ * Purpose: Initializes a new message struct with info from a symbol
+ * table entry.
+ *
+ * Return: Success: Ptr to message struct, allocated if none
+ * supplied.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_stab_fast (const H5G_entry_t *ent, void *_mesg)
+{
+ H5O_stab_t *stab = (H5O_stab_t *)_mesg;
+
+ FUNC_ENTER (H5O_stab_fast, NULL, NULL);
+
+ /* check args */
+ assert (ent);
+
+ if (H5G_CACHED_STAB==ent->type) {
+ if (!stab) stab = H5MM_xcalloc (1, sizeof(H5O_stab_t));
+ stab->btree = ent->cache.stab.btree;
+ stab->heap = ent->cache.stab.heap;
+ } else {
+ stab = NULL;
+ }
+
+ FUNC_LEAVE (stab);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_cache
+ *
+ * Purpose: Copies a message into the cache portion of a symbol table
+ * entry.
+ *
+ * Return: Success: TRUE if modified.
+ * FALSE if not modified.
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+H5O_stab_cache (H5G_entry_t *ent, const void *_mesg)
+{
+ const H5O_stab_t *stab = (const H5O_stab_t *)_mesg;
+ hbool_t modified = FALSE;
+
+ FUNC_ENTER (H5O_stab_cache, NULL, FAIL);
+
+ /* check args */
+ assert (ent);
+ assert (stab);
+
+ /* cache */
+ if (H5G_CACHED_STAB != ent->type) {
+ modified = TRUE;
+ ent->type = H5G_CACHED_STAB;
+ }
+
+ if (ent->cache.stab.btree != stab->btree) {
+ modified = TRUE;
+ ent->cache.stab.btree = stab->btree;
+ }
+
+ if (ent->cache.stab.heap != stab->heap) {
+ modified = TRUE;
+ ent->cache.stab.heap = stab->heap;
+ }
+
+ FUNC_LEAVE (modified);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_copy
+ *
+ * Purpose: Copies a message from _MESG to _DEST, allocating _DEST if
+ * necessary.
+ *
+ * Return: Success: Ptr to _DEST
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_stab_copy (const void *_mesg, void *_dest)
+{
+ const H5O_stab_t *stab = (const H5O_stab_t *)_mesg;
+ H5O_stab_t *dest = (H5O_stab_t *)_dest;
+
+ FUNC_ENTER (H5O_stab_copy, NULL, NULL);
+
+ /* check args */
+ assert (stab);
+ if (!dest) dest = H5MM_xcalloc (1, sizeof(H5O_stab_t));
+
+ /* copy */
+ *dest = *stab;
+
+ FUNC_LEAVE ((void*)dest);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_size
+ *
+ * Purpose: Returns the size of the raw message in bytes not counting
+ * the message type or size fields, but only the data fields.
+ * This function doesn't take into account alignment.
+ *
+ * Return: Success: Message data size in bytes without alignment.
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_stab_size (hdf5_file_t *f, const void *_mesg)
+{
+ FUNC_ENTER (H5O_stab_size, NULL, FAIL);
+ FUNC_LEAVE (2 * H5F_SIZEOF_OFFSET(f));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_stab_debug
+ *
+ * Purpose: Prints debugging info for a symbol table message.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * matzke@llnl.gov
+ * Aug 6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_stab_debug (hdf5_file_t *f, const void *_mesg, FILE *stream,
+ intn indent, intn fwidth)
+{
+ const H5O_stab_t *stab = (const H5O_stab_t *)_mesg;
+
+ FUNC_ENTER (H5O_stab_debug, NULL, FAIL);
+
+ /* check args */
+ assert (f);
+ assert (stab);
+ assert (stream);
+ assert (indent>=0);
+ assert (fwidth>=0);
+
+ fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth,
+ "B-tree address:",
+ (unsigned long)(stab->btree));
+ fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth,
+ "Name heap address:",
+ (unsigned long)(stab->heap));
+
+ FUNC_LEAVE (SUCCEED);
+}
+