diff options
author | Robb Matzke <matzke@llnl.gov> | 1997-08-12 22:44:46 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1997-08-12 22:44:46 (GMT) |
commit | fb947c34b142578774d5bb657c0b3e2a9b4781c7 (patch) | |
tree | c695cac8789bbe5fc92a5324e3027856bf3858bc /src/H5Oname.c | |
parent | 326981f421b993815657daecc8b37bd732513d82 (diff) | |
download | hdf5-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.c | 283 |
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); +} |