summaryrefslogtreecommitdiffstats
path: root/src/H5Oplist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Oplist.c')
-rw-r--r--src/H5Oplist.c553
1 files changed, 0 insertions, 553 deletions
diff --git a/src/H5Oplist.c b/src/H5Oplist.c
deleted file mode 100644
index 2f4246f..0000000
--- a/src/H5Oplist.c
+++ /dev/null
@@ -1,553 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* $Id$ */
-
-#define H5P_PACKAGE /* prevent warning from including H5Ppkg.h */
-
-#include "H5private.h" /* Generic functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5FLprivate.h" /* Free lists */
-#include "H5Iprivate.h" /* IDs */
-#include "H5MMprivate.h" /* Memory management */
-#include "H5Oprivate.h" /* Object headers */
-#include "H5Ppkg.h" /* Property lists */
-
-#if defined (WIN32) && !defined (__MWERKS__)
-#include <sys/types.h>
-#include <sys/timeb.h>
-#endif
-
-/* Pablo mask */
-#define PABLO_MASK H5O_plist_mask
-
-/* local prototypes */
-static void *H5O_plist_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
-static herr_t H5O_plist_encode(H5F_t *f, uint8_t *p, const void *_mesg);
-static size_t H5O_plist_size(H5F_t *f, const void *_mesg);
-static herr_t H5O_plist_free(void *_mesg);
-static herr_t H5O_plist_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
- FILE *stream, int indent, int fwidth);
-
-/* This message derives from H5O */
-const H5O_class_t H5O_PLIST[1] = {{
- H5O_PLIST_ID, /* message id number */
- "plist", /* message name for debugging */
- sizeof(H5P_genplist_t), /* native message size */
- H5O_plist_decode, /* decode message */
- H5O_plist_encode, /* encode message */
- NULL, /* copy the native value */
- H5O_plist_size, /* size of symbol table entry */
- NULL, /* default reset method */
- H5O_plist_free, /* free method */
- NULL, /* get share method */
- NULL, /* set share method */
- H5O_plist_debug, /* debug the message */
-}};
-
-#define H5O_PLIST_VERSION 1
-
-/* Is the interface initialized? */
-static int interface_initialize_g = 0;
-#define INTERFACE_INIT NULL
-
-/* Declare external the free list for hsize_t arrays */
-H5FL_ARR_EXTERN(hsize_t);
-
-/* Declare the external free list for the H5P_genprop_t struct */
-H5FL_EXTERN(H5P_genprop_t);
-
-/* Declare the external free list for the H5P_genplist_t struct */
-H5FL_EXTERN(H5P_genplist_t);
-
-#define UINT_ENCODE(dst, src) \
- if (sizeof(src) == 2) { \
- UINT16ENCODE(dst, src); \
- } else if (sizeof(src) == 4) { \
- UINT32ENCODE(dst, src); \
- } else { \
- /* sizeof(src) == 8 */ \
- UINT64ENCODE(dst, src); \
- }
-
-#define UINT_DECODE(src, dst) \
- if (sizeof(dst) == 2) { \
- UINT16DECODE(src, dst); \
- } else if (sizeof(dst) == 4) { \
- UINT32DECODE(src, dst); \
- } else { \
- /* sizeof(dst) == 8 */ \
- UINT64DECODE(src, dst); \
- }
-
-#define INT_ENCODE(dst, src) \
- if (sizeof(src) == 2) { \
- INT16ENCODE(dst, src); \
- } else if (sizeof(src) == 4) { \
- INT32ENCODE(dst, src); \
- } else { \
- /* sizeof(src) == 8 */ \
- INT64ENCODE(dst, src); \
- }
-
-#define INT_DECODE(src, dst) \
- if (sizeof(dst) == 2) { \
- INT16DECODE(src, dst); \
- } else if (sizeof(dst) == 4) { \
- INT32DECODE(src, dst); \
- } else { \
- /* sizeof(dst) == 8 */ \
- INT64DECODE(src, dst); \
- }
-
-/*
- * Function: H5O_plist_decode
- * Purpose: Decode a property list and return a pointer to a memory
- * struct with the decoded information.
- *
- * This function decodes the "raw" form of a serialized
- * property list in memory native format. The struct is
- * allocated within this function using malloc() and is
- * returned to the caller.
- *
- * H5F_t *f IN: pointer to the HDF5 file struct
- * uint8 *p OUT: the raw information buffer
- * H5O_shared_t *sh IN: not used; must be NULL
- *
- * Return: Success: Pointer to the new message in native order
- * Failure: NULL
- * Programmer: Bill Wendling, 24, September 2002
- * Modifications:
- */
-static void *
-H5O_plist_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
-{
- H5P_genplist_t *new_plist = NULL;
- H5P_genclass_t *pclass; /* property list class to modify */
- hid_t new_plist_id; /* property list ID of new list created */
- int version; /* message version number */
- unsigned int i, nprops;
- void *ret_value;
-
- FUNC_ENTER_NOAPI(H5O_plist_decode, NULL);
-
- /* check args */
- assert(f);
- assert(p);
- assert(!sh);
-
- /* Version number */
- version = *p++;
-
- if (version != H5O_PLIST_VERSION)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for property list message");
-
- /* Reserved (for what?) */
- ++p;
-
- /*
- * Decode the sizes of the parts of the property list. The sizes
- * stored in the file are exact but the parts are aligned on 8-byte
- * boundaries.
- */
-
- /*
- * Retrieve the name of the property class with its parent(s). It's a
- * regular NULL terminated string.
- */
- if ((pclass = H5P_open_class_path((const char *)p)) == NULL)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTOPENOBJ, NULL, "can't open the class path");
-
- if (*p)
- p += HDstrlen((const char *)p) + 1; /* + 1 for the NULL */
- else
- ++p;
-
- UINT_DECODE(p, nprops);
-
- /* Allocate new property list */
- if ((new_plist = H5FL_CALLOC(H5P_genplist_t)) == NULL)
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
-
- /* Initialize new property list */
- new_plist->pclass = pclass;
- new_plist->nprops = 0; /* Initially the plist has the same
- number of properties as the class */
- new_plist->class_init = 0; /* Initially, wait until the class
- callback finishes to set */
-
- /* Initialize the TBBT to hold the properties */
- if((new_plist->props=H5TB_fast_dmake(H5TB_FAST_STR_COMPARE))==NULL)
- HGOTO_ERROR(H5E_PLIST,H5E_CANTMAKETREE,NULL,"can't create TBBT for properties");
-
- /* Insert properties into property list */
- for (i = 0; i < nprops; ++i) {
- H5P_genprop_t *tprop;
- unsigned str_len;
-
- /*
- * Allocate and initialize the property structure which is going
- * to hold the information we're reading in.
- */
- if (NULL == (tprop = H5FL_CALLOC(H5P_genprop_t)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
-
- /* Grab the length of the name */
- UINT_DECODE(p, str_len);
-
- /* Allocate space for the name and copy it */
- if (NULL == (tprop->name = H5MM_malloc(str_len + 1))) {
- H5FL_FREE(H5P_genprop_t,tprop);
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
- }
- HDmemcpy(tprop->name, p, str_len + 1);
- p += str_len + 1;
-
- /* Grab the size of the "value" data */
- UINT_DECODE(p, tprop->size);
-
- /* Allocate and memcpy the value part of the property. */
- if ((tprop->value = H5MM_malloc(tprop->size)) == NULL) {
- H5MM_xfree(tprop->name);
- H5FL_FREE(H5P_genprop_t,tprop);
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
- }
-
- HDmemcpy(tprop->value, p, tprop->size);
- p += tprop->size;
-
- /* Set the property's type */
- tprop->type=H5P_PROP_WITHIN_LIST;
-
- /* Insert the initialized property into the property list */
- if (H5P_add_prop(new_plist->props, tprop) < 0) {
- H5MM_xfree(tprop->value);
- H5MM_xfree(tprop->name);
- H5FL_FREE(H5P_genprop_t,tprop);
- HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, NULL, "Can't insert property into list");
- }
-
- /* Increment the number of properties in list */
- ++new_plist->nprops;
- }
-
- /* Increment the number of property lists derived from class */
- if (H5P_access_class(new_plist->pclass, H5P_MOD_INC_LST) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, NULL, "Can't increment class ref count");
-
- /* Get an atom for the property list */
- if ((new_plist_id = H5I_register(H5I_GENPROP_LST, new_plist)) < 0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, NULL, "unable to atomize property list");
-
- /*
- * Save the property list ID in the property list struct, for use in
- * the property class's 'close' callback
- */
- new_plist->plist_id = new_plist_id;
-
- /* Set the class initialization flag */
- new_plist->class_init = 1;
-
- /* Set return value */
- ret_value = new_plist; /* success */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
-
-/*
- * Function: H5O_plist_encode
- * Purpose: Encode a property list and return a pointer to a memory
- * struct with the encoded information.
- *
- * This function encodes the "raw" form of a property list
- * into a struct in memory native format.
- *
- * H5F_t *f IN: pointer to the HDF5 file struct
- * uint8 *p OUT: the raw information buffer
- * const void *mesg IN: pointer to the metadata to encode
- *
- * Return: Success: Non-negative
- * Failure: Negative
- * Programmer: Bill Wendling, 24, September 2002
- * Modifications:
- */
-static herr_t
-H5O_plist_encode(H5F_t UNUSED *f, uint8_t *p, const void *mesg)
-{
- const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
- char *class_path; /* Pointer to class path generated for property list */
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI(H5O_plist_encode, FAIL);
-
- /* check args */
- assert(f);
- assert(p);
- assert(plist);
-
- /* Version */
- *p++ = H5O_PLIST_VERSION;
-
- /* Reserved */
- *p++ = '\0';
-
- /*
- * Encode the sizes of the parts of the property list. The sizes
- * stored in the file are exact but the parts are aligned on 8-byte
- * boundaries.
- */
-
- /*
- * The class name encoded will look like:
- *
- * BaseClass/ParentClass/.../DerivedClass
- */
- class_path = H5P_get_class_path(plist->pclass);
-
- if (class_path) {
- size_t s = HDstrlen(class_path) + 1;
-
- HDmemcpy(p, class_path, s);
- p += s;
- } else {
- *p++ = '\0';
- }
-
- HDfree(class_path);
- UINT_ENCODE(p, plist->nprops);
-
- /* Encode the properties for this property list */
- if(plist->nprops>0) {
- H5TB_NODE *curr_node; /* Current node in TBBT */
- H5P_genprop_t *tprop; /* Pointer to property */
-
- /* Walk through the properties in the old class */
- curr_node=H5TB_first(plist->props->root);
- while(curr_node!=NULL) {
- size_t s; /* Length of property name */
-
- /* Get a pointer to the property from the node */
- tprop=curr_node->data;
- assert(tprop->name); /* Properties are guaranteed to have names */
-
- /*
- * Copy the meat of the generic property:
- *
- * 1. The length of the property name
- * 2. The name of the property
- * 3. The size of the property value
- * 4. The property value
- */
-
- /* Get the name's length & encode it */
- s = HDstrlen(tprop->name);
- UINT_ENCODE(p, s);
-
- /* Encode the name itself */
- HDmemcpy(p, tprop->name, s + 1);
- p += s + 1;
-
- /* Encode the property value's size & data */
- UINT_ENCODE(p, tprop->size);
- HDmemcpy(p, tprop->value, tprop->size);
- p += tprop->size;
-
- /* Get the next property node in the TBBT */
- curr_node=H5TB_next(curr_node);
- } /* end while */
- } /* end if */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
-
-/*
- * Function: H5O_plist_size
- * Purpose: Return the raw message size in bytes.
- *
- * This function returns the size of the raw elements on
- * success. (Not counting the message type or size fields,
- * only the data portion of the message). It doesn't take
- * into account alignment.
- *
- * H5F_t *f IN: pointer to the HDF5 file struct
- * const void *mesg IN: pointer to the metadata structure
- *
- * Return: Success: Size of message
- * Failure: 0
- * Programmer: Bill Wendling, 24, September 2002
- * Modifications:
- */
-static size_t
-H5O_plist_size(H5F_t UNUSED *f, const void *mesg)
-{
- const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
- char *class_path=NULL; /* Pointer to class path generated for property list */
- size_t ret_value;
-
- FUNC_ENTER_NOAPI(H5O_plist_size, 0);
-
- /* check args */
- assert(plist);
-
- ret_value = 1 + /*version info */
- 1; /*reserved */
-
- class_path = H5P_get_class_path(plist->pclass);
-
- if (class_path)
- ret_value += HDstrlen(class_path) + 1; /*class path */
- else
- ++ret_value;
-
- HDfree(class_path);
-
- ret_value += sizeof(plist->nprops); /*num properties */
-
- /* Calculate the size of the properties for this property list */
- if(plist->nprops>0) {
- H5TB_NODE *curr_node; /* Current node in TBBT */
- H5P_genprop_t *tprop; /* Pointer to property */
-
- /* Walk through the properties in the old class */
- curr_node=H5TB_first(plist->props->root);
- while(curr_node!=NULL) {
- /* Get a pointer to the property from the node */
- tprop=curr_node->data;
-
- ret_value += sizeof(size_t); /*length of the name */
- ret_value += HDstrlen(tprop->name) + 1; /*the name */
- ret_value += sizeof(tprop->size) + /*size of data size */
- tprop->size; /*the data */
-
- /* Get the next property node in the TBBT */
- curr_node=H5TB_next(curr_node);
- } /* end while */
- } /* end if */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
-
-/*
- * Function: H5O_plist_free
- * Purpose: Free's the property list.
- *
- * const void *mesg IN: pointer to the property list to free
- *
- * Return: Success: Non-negative
- * Failure: Negative
- * Programmer: Bill Wendling, 24, September 2002
- * Modifications:
- */
-static herr_t
-H5O_plist_free(void *mesg)
-{
- H5P_genplist_t *plist = mesg;
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI(H5O_plist_free, FAIL);
- assert(mesg);
-
- ret_value = H5P_close(plist);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
-
-/*
- * Function: H5O_plist_debug
- * Purpose: Prints debugging information for the property list message.
- *
- * H5F_t *f IN: pointer to the HDF5 file struct
- * const void *mesg IN: Pointer to the source property list struct
- * FILE *stream IN: Pointer to the stream for output data
- * int indent IN: Amount to indent information by
- * int fwidth IN: Field width (?)
- *
- * Return: Success: Non-negative
- * Failure: Negative
- * Programmer: Bill Wendling, 24, September 2002
- * Modifications:
- */
-static herr_t
-H5O_plist_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *mesg, FILE *stream,
- int indent, int fwidth)
-{
- const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
- herr_t ret_value=SUCCEED;
-
- FUNC_ENTER_NOAPI(H5O_plist_debug, FAIL);
-
- /* check args */
- assert(f);
- assert(plist);
- assert(stream);
- assert(indent >= 0);
- assert(fwidth >= 0);
-
- HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth, "Property List:");
- indent += 2;
- HDfprintf(stream, "%*sNumber of properties: %d\n", indent, "", plist->nprops);
- HDfprintf(stream, "%*sProperties {\n", indent, "");
- indent += 2;
-
- /* Calculate the size of the properties for this property list */
- if(plist->nprops>0) {
- H5TB_NODE *curr_node; /* Current node in TBBT */
- H5P_genprop_t *tprop; /* Pointer to property */
-
- /* Walk through the properties in the old class */
- curr_node=H5TB_first(plist->props->root);
- while(curr_node!=NULL) {
- register unsigned int j;
-
- /* Get a pointer to the property from the node */
- tprop=curr_node->data;
-
- HDfprintf(stream, "%*sProperty {\n", indent, "");
- indent += 2;
-
- /*
- * Print the meat of the generic property:
- *
- * 1. The name of the property
- * 2. The size of the property value
- * 3. The property value
- */
- HDfprintf(stream, "%*sName: %s\n", indent, "", tprop->name);
- HDfprintf(stream, "%*sValue Size: %d\n", indent, "", tprop->size);
- HDfprintf(stream, "%*sValue: ", indent, "");
-
- for (j = 0; j < tprop->size; ++j)
- HDfprintf(stream, "%02x ", ((char *)tprop->value)[j]);
-
- indent -= 2;
- HDfprintf(stream, "\n%*s}\n", indent, "");
-
- /* Get the next property node in the TBBT */
- curr_node=H5TB_next(curr_node);
- } /* end while */
- } /* end if */
-
- indent -= 2;
- HDfprintf(stream, "%*s}\n", indent, "");
-
- indent -= 2;
- HDfprintf(stream, "%*s}\n", indent, "");
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}