diff options
Diffstat (limited to 'src/H5Gprivate.h')
-rw-r--r-- | src/H5Gprivate.h | 176 |
1 files changed, 76 insertions, 100 deletions
diff --git a/src/H5Gprivate.h b/src/H5Gprivate.h index 815a76f..b902f98 100644 --- a/src/H5Gprivate.h +++ b/src/H5Gprivate.h @@ -20,11 +20,6 @@ * * Purpose: Library-visible declarations. * - * Modifications: Aug 22, 2002 - * Pedro Vicente <pvn@ncsa.uiuc.edu> - * Added 'names' field to H5G_entry_t - * Added H5G_replace_name - * *------------------------------------------------------------------------- */ @@ -49,8 +44,6 @@ #define H5G_NODE_MAGIC "SNOD" /*symbol table node magic number */ #define H5G_NODE_SIZEOF_MAGIC 4 /*sizeof symbol node magic number */ -#define H5G_NO_CHANGE (-1) /*see H5G_ent_modified() */ -#define H5G_NLINKS 16 /*max symlinks to follow per lookup */ /* * The disk size for a symbol table entry... @@ -65,113 +58,84 @@ /* ========= Group Creation properties ============ */ -/* Definitions for local heap size hint */ +/* Defaults for group info values */ +#define H5G_CRT_GINFO_LHEAP_SIZE_HINT 0 +#define H5G_CRT_GINFO_MAX_COMPACT 8 +#define H5G_CRT_GINFO_MIN_DENSE 6 +#define H5G_CRT_GINFO_EST_NUM_ENTRIES 4 +#define H5G_CRT_GINFO_EST_NAME_LEN 8 + +/* Definitions for group info settings */ #define H5G_CRT_GROUP_INFO_NAME "group info" #define H5G_CRT_GROUP_INFO_SIZE sizeof(H5O_ginfo_t) -#define H5G_CRT_GROUP_INFO_DEF {0, 8, 6, 4, 8} +#define H5G_CRT_GROUP_INFO_DEF {H5G_CRT_GINFO_LHEAP_SIZE_HINT, \ + H5G_CRT_GINFO_MAX_COMPACT, \ + H5G_CRT_GINFO_MIN_DENSE, \ + H5G_CRT_GINFO_EST_NUM_ENTRIES, \ + H5G_CRT_GINFO_EST_NAME_LEN} /* Definitions for creating intermediate groups */ #define H5G_CRT_INTERMEDIATE_GROUP_NAME "intermediate_group" #define H5G_CRT_INTERMEDIATE_GROUP_SIZE sizeof(unsigned) #define H5G_CRT_INTERMEDIATE_GROUP_DEF 0 -/* - * Various types of object header information can be cached in a symbol - * table entry (it's normal home is the object header to which the entry - * points). This datatype determines what (if anything) is cached in the - * symbol table entry. - */ -typedef enum H5G_type_t { - H5G_CACHED_ERROR = -1, /*force enum to be signed */ - H5G_NOTHING_CACHED = 0, /*nothing is cached, must be 0 */ - H5G_CACHED_STAB = 1, /*symbol table, `stab' */ - H5G_CACHED_SLINK = 2, /*symbolic link */ - - H5G_NCACHED = 3 /*THIS MUST BE LAST */ -} H5G_type_t; +/* Type of operation being performed for call to H5G_name_replace() */ +typedef enum { + OP_MOVE = 0, /* H5*move call */ + OP_UNLINK, /* H5Gunlink call */ + OP_MOUNT, /* H5Fmount call */ + OP_UNMOUNT /* H5Funmount call */ +} H5G_names_op_t; -/* - * A symbol table entry caches these parameters from object header - * messages... The values are entered into the symbol table when an object - * header is created (by hand) and are extracted from the symbol table with a - * callback function registered in H5O_init_interface(). Be sure to update - * H5G_ent_decode(), H5G_ent_encode(), and H5G_ent_debug() as well. - */ -typedef union H5G_cache_t { - struct { - haddr_t btree_addr; /*file address of symbol table B-tree*/ - haddr_t heap_addr; /*file address of stab name heap */ - } stab; +/* Structure to store information about the name an object was opened with */ +typedef struct { + H5RS_str_t *user_path_r; /* Path to object, as opened by user */ + H5RS_str_t *canon_path_r; /* Path to object, as found in file */ + unsigned user_path_hidden; /* Whether the user's path is valid */ +} H5G_name_t; - struct { - size_t lval_offset; /*link value offset */ - } slink; -} H5G_cache_t; +/* Forward declarations */ +struct H5P_genplist_t; +struct H5O_loc_t; /* - * A symbol table entry. The two important fields are `name_off' and - * `header'. The remaining fields are used for caching information that - * also appears in the object header to which this symbol table entry - * points. + * The "location" of an object in a group hierarchy. This points to an object + * location and a group hierarchy path for the object. */ -typedef struct H5G_entry_t { - hbool_t dirty; /*entry out-of-date? */ - H5G_type_t type; /*type of information cached */ - H5G_cache_t cache; /*cached data from object header */ - size_t name_off; /*offset of name within name heap */ - haddr_t header; /*file address of object header */ - H5F_t *file; /*file to which this obj hdr belongs */ - H5RS_str_t *user_path_r; /* Path to object, as opened by user */ - H5RS_str_t *canon_path_r; /* Path to object, as found in file */ - unsigned user_path_hidden; /* Whether the user's path is valid */ -} H5G_entry_t; +typedef struct { + struct H5O_loc_t *oloc; /* Object header location */ + H5G_name_t *path; /* Group hierarchy path */ +} H5G_loc_t; typedef struct H5G_t H5G_t; typedef struct H5G_shared_t H5G_shared_t; -/* Type of operation being performed for call to H5G_replace_name() */ -typedef enum { - OP_MOVE = 0, /* H5*move call */ - OP_UNLINK, /* H5Gunlink call */ - OP_MOUNT, /* H5Fmount call */ - OP_UNMOUNT /* H5Funmount call */ -} H5G_names_op_t; - /* Depth of group entry copy */ +/* (Also used for group hier. name copies) */ typedef enum { - H5G_COPY_NULL, /* Null destination names */ - H5G_COPY_LIMITED, /* Limited copy from source to destination, omitting name & old name fields */ H5G_COPY_SHALLOW, /* Copy from source to destination, including name & old name fields */ + H5G_COPY_CANON, /* Keep user path the same, but deep copy canonical path */ H5G_COPY_DEEP /* Deep copy from source to destination, including duplicating name & old name fields */ -} H5G_ent_copy_depth_t; - -/* Forward declarations for prototype arguments */ -struct H5P_genplist_t; +} H5G_copy_depth_t; /* * Library prototypes... These are the ones that other packages routinely * call. */ -H5_DLL H5G_entry_t *H5G_loc(hid_t loc_id); -H5_DLL herr_t H5G_mkroot(H5F_t *f, hid_t dxpl_id, H5G_entry_t *root_entry); -H5_DLL H5G_entry_t *H5G_entof(H5G_t *grp); +H5_DLL htri_t H5G_isa(struct H5O_loc_t *loc, hid_t dxpl_id); +H5_DLL herr_t H5G_mkroot(H5F_t *f, hid_t dxpl_id, H5G_loc_t *root_loc); +H5_DLL struct H5O_loc_t *H5G_oloc(H5G_t *grp); +H5_DLL H5G_name_t * H5G_nameof(H5G_t *grp); H5_DLL H5F_t *H5G_fileof(H5G_t *grp); H5_DLL herr_t H5G_free(H5G_t *grp); -H5_DLL H5G_t *H5G_open(H5G_entry_t *ent, hid_t dxpl_id); +H5_DLL H5G_t *H5G_open(H5G_loc_t *loc, hid_t dxpl_id); H5_DLL herr_t H5G_close(H5G_t *grp); -H5_DLL H5G_obj_t H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id); -H5_DLL herr_t H5G_get_objinfo(H5G_entry_t *loc, const char *name, - hbool_t follow_link, - H5G_stat_t *statbuf/*out*/, hid_t dxpl_id); -H5_DLL herr_t H5G_insert(H5G_entry_t *loc, const char *name, - H5G_entry_t *ent, hid_t dxpl_id, struct H5P_genplist_t *oc_plist); -H5_DLL herr_t H5G_find(H5G_entry_t *loc, const char *name, - H5G_entry_t *ent/*out*/, hid_t dxpl_id); -H5_DLL H5F_t *H5G_insertion_file(H5G_entry_t *loc, const char *name, hid_t dxpl_id); -H5_DLL herr_t H5G_replace_name(H5G_obj_t type, H5G_entry_t *loc, - H5RS_str_t *src_name, H5G_entry_t *src_loc, - H5RS_str_t *dst_name, H5G_entry_t *dst_loc, H5G_names_op_t op); -H5_DLL herr_t H5G_free_grp_name(H5G_t *grp); +H5_DLL herr_t H5G_insert(H5G_loc_t *loc, const char *name, + H5G_loc_t *obj_loc, hid_t dxpl_id, struct H5P_genplist_t *oc_plist); +H5_DLL herr_t H5G_get_objinfo(H5G_loc_t *loc, const char *name, + hbool_t follow_link, H5G_stat_t *statbuf/*out*/, hid_t dxpl_id); +H5_DLL H5F_t *H5G_insertion_file(H5G_loc_t *loc, const char *name, hid_t dxpl_id); +H5_DLL herr_t H5G_free_grp_name(H5G_t *grp); H5_DLL herr_t H5G_get_shared_count(H5G_t *grp); H5_DLL herr_t H5G_mount(H5G_t *grp); H5_DLL herr_t H5G_unmount(H5G_t *grp); @@ -179,24 +143,36 @@ H5_DLL herr_t H5G_unmount(H5G_t *grp); /* * These functions operate on symbol table nodes. */ +H5_DLL herr_t H5G_node_close(const H5F_t *f); H5_DLL herr_t H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth, haddr_t heap); -H5_DLL herr_t H5G_node_init(H5F_t *f); -H5_DLL herr_t H5G_node_close(const H5F_t *f); /* - * These functions operate on symbol table entries. They're used primarily - * in the H5O package where header messages are cached in symbol table - * entries. The subclasses of H5O probably don't need them though. + * These functions operate on group object locations. + */ +/* forward reference for later use */ +H5_DLL herr_t H5G_obj_ent_decode(H5F_t *f, const uint8_t **pp, + struct H5O_loc_t *oloc); +H5_DLL herr_t H5G_obj_ent_encode(H5F_t *f, uint8_t **pp, + const struct H5O_loc_t *oloc); + +/* + * These functions operate on group hierarchy names. */ -H5_DLL herr_t H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent); -H5_DLL herr_t H5G_ent_decode(H5F_t *f, const uint8_t **pp, - H5G_entry_t *ent/*out*/); -H5_DLL const H5G_cache_t *H5G_ent_cache(const H5G_entry_t *ent, H5G_type_t *cache_type); -H5_DLL herr_t H5G_ent_copy(H5G_entry_t *dst, const H5G_entry_t *src, - H5G_ent_copy_depth_t depth); -H5_DLL herr_t H5G_ent_reset(H5G_entry_t *ent); -H5_DLL herr_t H5G_free_ent_name(H5G_entry_t *ent); -H5_DLL herr_t H5G_ent_debug(H5F_t *f, hid_t dxpl_id, const H5G_entry_t *ent, FILE * stream, - int indent, int fwidth, haddr_t heap); +H5_DLL herr_t H5G_name_replace(H5G_obj_t type, H5G_loc_t *loc, + H5RS_str_t *src_name, H5G_loc_t *src_loc, + H5RS_str_t *dst_name, H5G_loc_t *dst_loc, H5G_names_op_t op); +H5_DLL herr_t H5G_name_reset(H5G_name_t *name); +H5_DLL herr_t H5G_name_copy(H5G_name_t *dst, const H5G_name_t *src, H5G_copy_depth_t depth); +H5_DLL herr_t H5G_name_free(H5G_name_t *name); + +/* + * These functions operate on group "locations" + */ +H5_DLL herr_t H5G_loc(hid_t loc_id, H5G_loc_t *loc); +H5_DLL herr_t H5G_loc_find(H5G_loc_t *loc, const char *name, + H5G_loc_t *obj_loc/*out*/, hid_t dxpl_id); +H5_DLL herr_t H5G_loc_reset(H5G_loc_t *loc); +H5_DLL herr_t H5G_loc_free(H5G_loc_t *loc); + #endif |