summaryrefslogtreecommitdiffstats
path: root/src/H5Opkg.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Opkg.h')
-rw-r--r--src/H5Opkg.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/H5Opkg.h b/src/H5Opkg.h
new file mode 100644
index 0000000..91c61c4
--- /dev/null
+++ b/src/H5Opkg.h
@@ -0,0 +1,210 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5O_PACKAGE
+#error "Do not include this file outside the H5O package!"
+#endif
+
+#ifndef _H5Opkg_H
+#define _H5Opkg_H
+
+/* Include private header file */
+#include "H5Oprivate.h" /* Object header functions */
+
+/*
+ * Align messages on 8-byte boundaries because we would like to copy the
+ * object header chunks directly into memory and operate on them there, even
+ * on 64-bit architectures. This allows us to reduce the number of disk I/O
+ * requests with a minimum amount of mem-to-mem copies.
+ */
+#define H5O_ALIGN(X) (8*(((X)+8-1)/8))
+
+/* Object header macros */
+#define H5O_NMESGS 32 /*initial number of messages */
+#define H5O_NCHUNKS 8 /*initial number of chunks */
+#define H5O_ALL (-1) /*delete all messages of type */
+
+/* Version of object header structure */
+#define H5O_VERSION 1
+
+/*
+ * Size of object header header.
+ */
+#define H5O_SIZEOF_HDR(F) \
+ H5O_ALIGN(1 + /*version number */ \
+ 1 + /*alignment */ \
+ 2 + /*number of messages */ \
+ 4 + /*reference count */ \
+ 4) /*header data size */
+
+/*
+ * Size of message header
+ */
+#define H5O_SIZEOF_MSGHDR(F) \
+ H5O_ALIGN(2 + /*message type */ \
+ 2 + /*sizeof message data */ \
+ 4) /*reserved */
+
+typedef struct H5O_class_t {
+ int id; /*message type ID on disk */
+ const char *name; /*for debugging */
+ size_t native_size; /*size of native message */
+ void *(*decode)(H5F_t*, hid_t, const uint8_t*, struct H5O_shared_t*);
+ herr_t (*encode)(H5F_t*, uint8_t*, const void*);
+ void *(*copy)(const void*, void*); /*copy native value */
+ size_t (*raw_size)(H5F_t*, const void*);/*sizeof raw val */
+ herr_t (*reset)(void *); /*free nested data structs */
+ herr_t (*free)(void *); /*free main data struct */
+ herr_t (*get_share)(H5F_t*, const void*, struct H5O_shared_t*);
+ herr_t (*set_share)(H5F_t*, void*, const struct H5O_shared_t*);
+ herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int);
+} H5O_class_t;
+
+typedef struct H5O_mesg_t {
+ const H5O_class_t *type; /*type of message */
+ hbool_t dirty; /*raw out of date wrt native */
+ uint8_t flags; /*message flags */
+ void *native; /*native format message */
+ uint8_t *raw; /*ptr to raw data */
+ size_t raw_size; /*size with alignment */
+ unsigned chunkno; /*chunk number for this mesg */
+} H5O_mesg_t;
+
+typedef struct H5O_chunk_t {
+ hbool_t dirty; /*dirty flag */
+ haddr_t addr; /*chunk file address */
+ size_t size; /*chunk size */
+ uint8_t *image; /*image of file */
+} H5O_chunk_t;
+
+typedef struct H5O_t {
+ H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+ /* first field in structure */
+ int version; /*version number */
+ int nlink; /*link count */
+ unsigned nmesgs; /*number of messages */
+ unsigned alloc_nmesgs; /*number of message slots */
+ H5O_mesg_t *mesg; /*array of messages */
+ unsigned nchunks; /*number of chunks */
+ unsigned alloc_nchunks; /*chunks allocated */
+ H5O_chunk_t *chunk; /*array of chunks */
+} H5O_t;
+
+/*
+ * Null Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_NULL[1];
+
+/*
+ * Simple Data Space Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_SDSPACE[1];
+
+/*
+ * Data Type Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_DTYPE[1];
+
+/*
+ * Old Fill Value Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_FILL[1];
+
+/*
+ * New Fill Value Message. The new fill value message is fill value plus
+ * space allocation time and fill value writing time and whether fill
+ * value is defined.
+ */
+H5_DLLVAR const H5O_class_t H5O_FILL_NEW[1];
+
+/*
+ * External File List Message
+ */
+H5_DLLVAR const H5O_class_t H5O_EFL[1];
+
+/*
+ * Data Layout Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_LAYOUT[1];
+
+#ifdef H5O_ENABLE_BOGUS
+/*
+ * "Bogus" Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_BOGUS[1];
+#endif /* H5O_ENABLE_BOGUS */
+
+/*
+ * Filter pipeline message.
+ */
+H5_DLLVAR const H5O_class_t H5O_PLINE[1];
+
+/*
+ * Attribute Message.
+ */
+H5_DLLVAR const H5O_class_t H5O_ATTR[1];
+
+/*
+ * Object name message.
+ */
+H5_DLLVAR const H5O_class_t H5O_NAME[1];
+
+/*
+ * Modification time message. The message is just a `time_t'.
+ * (See also the "new" modification time message)
+ */
+H5_DLLVAR const H5O_class_t H5O_MTIME[1];
+
+/*
+ * Shared object message. This message ID never really appears in an object
+ * header. Instead, bit 2 of the `Flags' field will be set and the ID field
+ * will be the ID of the pointed-to message.
+ */
+H5_DLLVAR const H5O_class_t H5O_SHARED[1];
+
+/*
+ * Object header continuation message.
+ */
+H5_DLLVAR const H5O_class_t H5O_CONT[1];
+
+/*
+ * Symbol table message.
+ */
+H5_DLLVAR const H5O_class_t H5O_STAB[1];
+
+/*
+ * New Modification time message. The message is just a `time_t'.
+ */
+H5_DLLVAR const H5O_class_t H5O_MTIME_NEW[1];
+
+/*
+ * Generic property list message.
+ */
+H5_DLLVAR const H5O_class_t H5O_PLIST[1];
+
+#ifdef H5_HAVE_FPHDF5
+/*
+ * Flexible parallel message
+ */
+H5_DLLVAR const H5O_class_t H5O_FPHDF5[1];
+#endif /* H5_HAVE_FPHDF5 */
+
+/* Package-local function prototypes */
+
+/* Symbol table operators */
+H5_DLL void *H5O_stab_fast(const H5G_cache_t *cache, const struct H5O_class_t *type,
+ void *_mesg);
+
+#endif /* _H5Opkg_H */
+