summaryrefslogtreecommitdiffstats
path: root/src/H5Gpkg.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Gpkg.h')
-rw-r--r--src/H5Gpkg.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
new file mode 100644
index 0000000..5a33d8d
--- /dev/null
+++ b/src/H5Gpkg.h
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 1997 National Center for Supercomputing Applications.
+ * All rights reserved.
+ *
+ * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Thursday, September 18, 1997
+ *
+ * Purpose: This file contains declarations which are visible
+ * only within the H5G package. Source files outside the
+ * H5G package should include H5Gprivate.h instead.
+ */
+#ifndef H5G_PACKAGE
+#error "Do not include this file outside the H5G package!"
+#endif
+
+#ifndef _H5Gpkg_H
+#define _H5Gpkg_H
+
+#include <H5Gprivate.h>
+
+#define H5G_NODE_VERS 1 /*symbol table node version number */
+#define H5G_SIZE_HINT 1024 /*default root dir size hint */
+#define H5G_NODE_K(F) ((F)->file_create_parms.sym_leaf_k)
+#define H5G_NODE_SIZEOF_HDR(F) (H5G_NODE_SIZEOF_MAGIC + 4)
+#define H5G_DEFAULT_ROOT_SIZE 32
+
+
+/*
+ * A shadow is a copy of a symbol table entry which corresponds to an
+ * `open' object. Shadows are necessary because normal symbol table
+ * entries can be preempted from the main cache. The `shadow' field
+ * of the `entry' points to the beginning of the shadow just like the
+ * shadow field from symbol table entries in H5G_node_t.
+ */
+struct H5G_shadow_t {
+ char *name; /*name for this entry */
+ haddr_t dir_addr; /*hdr addr for dir containing shadow */
+ uintn nrefs; /*reference counter */
+ H5G_entry_t entry; /*local copy of symbol table entry */
+ H5G_entry_t *main; /*main entry in stab node if cached */
+ struct H5G_shadow_t *next; /*next shadow for same symbol table */
+ struct H5G_shadow_t *prev; /*previous shadow for same symbol table */
+};
+
+/*
+ * A symbol table node is a collection of symbol table entries. It can
+ * be thought of as the lowest level of the B-link tree that points to
+ * a collection of symbol table entries that belong to a specific symbol
+ * table or directory.
+ */
+typedef struct H5G_node_t {
+ int dirty; /*has cache been modified? */
+ int nsyms; /*number of symbols */
+ H5G_entry_t *entry; /*array of symbol table entries */
+} H5G_node_t;
+
+/*
+ * Each key field of the B-link tree that points to symbol table
+ * nodes consists of this structure...
+ */
+typedef struct H5G_node_key_t {
+ off_t offset; /*offset into heap for name */
+} H5G_node_key_t;
+
+/*
+ * These operations can be passed down from the H5G_stab layer to the
+ * H5G_node layer through the B-tree layer.
+ */
+typedef enum H5G_oper_t {
+ H5G_OPER_FIND =0, /*find a symbol */
+ H5G_OPER_INSERT =1, /*insert a new symbol */
+} H5G_oper_t;
+
+/*
+ * Data exchange structure for symbol table nodes. This structure is
+ * passed through the B-link tree layer to the methods for the objects
+ * to which the B-link tree points.
+ */
+typedef struct H5G_bt_ud1_t {
+
+ /* downward */
+ H5G_oper_t operation; /*what operation to perform */
+ const char *name; /*points to temporary memory */
+ haddr_t dir_addr; /*symbol table header address */
+ haddr_t heap_addr; /*symbol table heap address */
+
+ /* downward for INSERT */
+ H5G_entry_t entry; /*entry to insert into table */
+
+ /* upward for FIND */
+ H5G_entry_t *entry_ptr; /*ptr into cached symbol table node */
+
+} H5G_bt_ud1_t;
+
+/*
+ * Data exchange structure to pass through the B-tree layer for the
+ * H5B_list function.
+ */
+typedef struct H5G_bt_ud2_t {
+
+ /* downward */
+ H5G_entry_t *entry; /*array of entries, alloc'd by caller */
+ char **name; /*array of string ptrs, allocd by caller*/
+ intn maxentries; /*size of the ADDR and NAME arrays */
+ haddr_t dir_addr; /*symbol table header address */
+ haddr_t heap_addr; /*heap address */
+
+ /* upward */
+ intn nsyms; /*num. symbols processed */
+
+} H5G_bt_ud2_t;
+
+/*
+ * This is the class identifier to give to the B-tree functions.
+ */
+extern H5B_class_t H5B_SNODE[1];
+
+/*
+ * This struct passes information through the H5AC layer.
+ */
+typedef struct H5G_ac_ud1_t {
+ haddr_t heap_addr;
+ haddr_t dir_addr;
+} H5G_ac_ud1_t;
+
+/*
+ * Functions that understand symbol tables but not directories. The
+ * functions that understand directories are exported to the rest of
+ * the library and appear in H5Gprivate.h.
+ */
+haddr_t H5G_stab_new (hdf5_file_t *f, H5G_entry_t *self, size_t init);
+H5G_entry_t *H5G_stab_find (hdf5_file_t *f, haddr_t addr, H5G_entry_t *self,
+ const char *name);
+herr_t H5G_stab_insert (hdf5_file_t *f, H5G_entry_t *self, const char *name,
+ H5G_entry_t *ent);
+intn H5G_stab_list (hdf5_file_t *f, H5G_entry_t *self, intn maxentries,
+ char *names[], H5G_entry_t entries[]);
+
+/*
+ * Functions that understand shadow entries.
+ */
+herr_t H5G_shadow_sync (H5G_entry_t *ent);
+H5G_entry_t *H5G_shadow_open (hdf5_file_t *f, H5G_entry_t *dir,
+ H5G_entry_t *ent);
+herr_t H5G_shadow_close (hdf5_file_t *f, H5G_entry_t *ent);
+hbool_t H5G_shadow_p (H5G_entry_t *ent);
+herr_t H5G_shadow_dissociate (H5G_entry_t *ent);
+herr_t H5G_shadow_assoc_node (hdf5_file_t *f, H5G_node_t *sym,
+ H5G_entry_t *self);
+H5G_shadow_t *H5G_shadow_list (haddr_t stab_header_addr);
+
+/*
+ * Functions that understand symbol table entries.
+ */
+herr_t H5G_decode_vec (hdf5_file_t *f, uint8 **pp, H5G_entry_t *ent, intn n);
+herr_t H5G_encode_vec (hdf5_file_t *f, uint8 **pp, H5G_entry_t *ent, intn n);
+
+#endif