summaryrefslogtreecommitdiffstats
path: root/src/H5Oname.c
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1997-08-12 22:44:46 (GMT)
committerRobb Matzke <matzke@llnl.gov>1997-08-12 22:44:46 (GMT)
commitfb947c34b142578774d5bb657c0b3e2a9b4781c7 (patch)
treec695cac8789bbe5fc92a5324e3027856bf3858bc /src/H5Oname.c
parent326981f421b993815657daecc8b37bd732513d82 (diff)
downloadhdf5-fb947c34b142578774d5bb657c0b3e2a9b4781c7.zip
hdf5-fb947c34b142578774d5bb657c0b3e2a9b4781c7.tar.gz
hdf5-fb947c34b142578774d5bb657c0b3e2a9b4781c7.tar.bz2
[svn-r25] ./src/H5AC.c
We sort the cache before a complete flush because it might be more efficient to write things back to disk in order of increasing address. If you want the old way then undef the SORT_BY_ADDR constant at the top of H5AC.c I haven't determined which systems and I/O libraries this helps or hurts. (This is currently off because of a bug I need to track down that causes qsort() to run for a really long time). ./src/H5B.c Fixed a couple more bugs. ./src/H5Eprivate.h ./src/H5Eproto.h Added major H5E_DIRECTORY and minor H5E_EXISTS, H5E_COMPLEN. ./src/H5G.c Added directory-aware functions. The heap and B-tree are created when a directory is created instead of when the first symbol is added. This simplifies symbol table entry caching for the directory since the cached value never changes now. ./src/H5Gnode.c ./src/H5Gprivate.h Fine tuned the B-tree K values for symbol tables assuming an average number of symbols is about 100 per directory. The tuning minimizes storage space. Fixed a return value in H5G_node_cmp(). ./src/H5H.c ./src/H5Hprivate.h Moved some macros the the header file. ./src/H5O.c ./src/H5Ocont.c ./src/H5Onull.c ./src/H5Ostab.c Changed the arguments for the decode method for messages. The second argument is the raw message size. Added a class variable for native message size. Added H5O_reset() to free memory used internally by a message. ./src/H5Oname.c NEW ./src/H5Oprivate.h ./src/Makefile The object name message. ./src/hdf5port.h Added defn for HDstrdup()
Diffstat (limited to 'src/H5Oname.c')
-rw-r--r--src/H5Oname.c283
1 files changed, 283 insertions, 0 deletions
diff --git a/src/H5Oname.c b/src/H5Oname.c
new file mode 100644
index 0000000..643efcc
--- /dev/null
+++ b/src/H5Oname.c
@@ -0,0 +1,283 @@
+/*-------------------------------------------------------------------------
+ * Copyright (C) 1997 National Center for Supercomputing Applications.
+ * All rights reserved.
+ *
+ *-------------------------------------------------------------------------
+ *
+ * Created: H5Oname.c
+ * Aug 12 1997
+ * Robb Matzke <robb@maya.nuance.com>
+ *
+ * Purpose: Object name message.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#include <assert.h>
+
+#include "hdf5.h"
+
+#include "H5private.h"
+#include "H5MMprivate.h"
+#include "H5Oprivate.h"
+
+#define PABLO_MASK H5O_name_mask
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_name_decode (hdf5_file_t *f, size_t raw_size, const uint8 *p);
+static herr_t H5O_name_encode (hdf5_file_t *f, size_t raw_size, uint8 *p,
+ const void *_mesg);
+static void *H5O_name_copy (const void *_mesg, void *_dest);
+static size_t H5O_name_size (hdf5_file_t *f, const void *_mesg);
+static herr_t H5O_name_reset (void *_mesg);
+static herr_t H5O_name_debug (hdf5_file_t *f, const void *_mesg, FILE *stream,
+ intn indent, intn fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_NAME[1] = {{
+ H5O_NAME_ID, /*message id number */
+ "name", /*message name for debugging */
+ sizeof (H5O_name_t), /*native message size */
+ H5O_name_decode, /*decode message */
+ H5O_name_encode, /*encode message */
+ NULL, /*no stab entry fields */
+ NULL, /*no stab entry fields */
+ H5O_name_copy, /*copy the native value */
+ H5O_name_size, /*raw message size */
+ H5O_name_reset, /*free internal memory */
+ H5O_name_debug, /*debug the message */
+}};
+
+/* Is the interface initialized? */
+static hbool_t interface_initialize_g = FALSE;
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_name_decode
+ *
+ * Purpose: Decode a name message and return a pointer to a new
+ * native message struct.
+ *
+ * Return: Success: Ptr to new message in native struct.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * robb@maya.nuance.com
+ * Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_name_decode (hdf5_file_t *f, size_t raw_size, const uint8 *p)
+{
+ H5O_name_t *mesg;
+
+ FUNC_ENTER (H5O_name_decode, NULL, NULL);
+
+ /* check args */
+ assert (f);
+ assert (p);
+
+ /* decode */
+ mesg = H5MM_xcalloc (1, sizeof(H5O_name_t));
+ mesg->s = H5MM_xmalloc (raw_size);
+ HDmemcpy (mesg->s, p, raw_size);
+
+ FUNC_LEAVE (mesg);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_name_encode
+ *
+ * Purpose: Encodes a name message.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * robb@maya.nuance.com
+ * Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_name_encode (hdf5_file_t *f, size_t raw_size, uint8 *p, const void *_mesg)
+{
+ const H5O_name_t *mesg = (const H5O_name_t *)_mesg;
+ size_t size;
+
+ FUNC_ENTER (H5O_name_encode, NULL, FAIL);
+
+ /* check args */
+ assert (f);
+ assert (p);
+ assert (mesg && mesg->s);
+
+ /* message size */
+ size = strlen (mesg->s)+1;
+ assert (size<=raw_size);
+
+ /* encode */
+ HDmemcpy (p, mesg->s, size);
+ HDmemset (p+size, 0, raw_size-size);
+
+ FUNC_LEAVE (SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_name_copy
+ *
+ * Purpose: Copies a message from _MESG to _DEST, allocating _DEST if
+ * necessary.
+ *
+ * Return: Success: Ptr to _DEST
+ *
+ * Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ * robb@maya.nuance.com
+ * Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_name_copy (const void *_mesg, void *_dest)
+{
+ const H5O_name_t *mesg = (const H5O_name_t *)_mesg;
+ H5O_name_t *dest = (H5O_name_t *)_dest;
+
+ FUNC_ENTER (H5O_name_copy, NULL, NULL);
+
+ /* check args */
+ assert (mesg);
+ if (!dest) dest = H5MM_xcalloc (1, sizeof(H5O_name_t));
+
+ /* copy */
+ *dest = *mesg;
+ dest->s = H5MM_xstrdup (mesg->s);
+
+ FUNC_LEAVE ((void*)dest);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_name_size
+ *
+ * Purpose: Returns the size of the raw message in bytes not
+ * counting the message typ or size fields, but only the data
+ * fields. This function doesn't take into account
+ * alignment.
+ *
+ * Return: Success: Message data size in bytes w/o alignment.
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * robb@maya.nuance.com
+ * Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_name_size (hdf5_file_t *f, const void *_mesg)
+{
+ const H5O_name_t *mesg = (const H5O_name_t *)_mesg;
+ size_t size;
+
+ FUNC_ENTER (H5O_stab_size, NULL, FAIL);
+
+ /* check args */
+ assert (f);
+ assert (mesg);
+
+ size = mesg->s ? HDstrlen (mesg->s)+1 : 0;
+ FUNC_LEAVE (size);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_name_reset
+ *
+ * Purpose: Frees internal pointers and resets the message to an
+ * initial state.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * robb@maya.nuance.com
+ * Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_name_reset (void *_mesg)
+{
+ H5O_name_t *mesg = (H5O_name_t *)_mesg;
+
+ FUNC_ENTER (H5O_name_reset, NULL, FAIL);
+
+ /* check args */
+ assert (mesg);
+
+ /* reset */
+ mesg->s = H5MM_xfree (mesg->s);
+
+ FUNC_LEAVE (SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5O_name_debug
+ *
+ * Purpose: Prints debugging info for the message.
+ *
+ * Return: Success: SUCCEED
+ *
+ * Failure: FAIL
+ *
+ * Programmer: Robb Matzke
+ * robb@maya.nuance.com
+ * Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_name_debug (hdf5_file_t *f, const void *_mesg, FILE *stream,
+ intn indent, intn fwidth)
+{
+ const H5O_name_t *mesg = (const H5O_name_t *)_mesg;
+
+ FUNC_ENTER (H5O_name_debug, NULL, FAIL);
+
+ /* check args */
+ assert (f);
+ assert (mesg);
+ assert (stream);
+ assert (indent>=0);
+ assert (fwidth>=0);
+
+ fprintf (stream, "%*s%-*s `%s'\n", indent, "", fwidth,
+ "Name:",
+ mesg->s);
+
+ FUNC_LEAVE (SUCCEED);
+}