summaryrefslogtreecommitdiffstats
path: root/src/H5Cpkg.h
diff options
context:
space:
mode:
authorDana Robinson <43805+derobins@users.noreply.github.com>2022-07-25 16:51:09 (GMT)
committerGitHub <noreply@github.com>2022-07-25 16:51:09 (GMT)
commitdf1ce61f1b4884681c00b342a8651e4d48a91881 (patch)
treece24cfa54a8727eb9c3cefb452ccbd3396925328 /src/H5Cpkg.h
parentb49c2847181e67e0cc2e123cf63fc86643f54a6d (diff)
downloadhdf5-df1ce61f1b4884681c00b342a8651e4d48a91881.zip
hdf5-df1ce61f1b4884681c00b342a8651e4d48a91881.tar.gz
hdf5-df1ce61f1b4884681c00b342a8651e4d48a91881.tar.bz2
Switches the tagged metadata list from a skip list to a hash table (#1925)
Diffstat (limited to 'src/H5Cpkg.h')
-rw-r--r--src/H5Cpkg.h35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h
index 61c3afc..5caa051 100644
--- a/src/H5Cpkg.h
+++ b/src/H5Cpkg.h
@@ -3566,15 +3566,17 @@ if ( ( (entry_ptr) == NULL ) || \
*
* The fields of this structure are discussed individually below:
*
- * tag: Address (i.e. "tag") of the object header for all the entries
+ * tag: Address (i.e. "tag") of the object header for all the entries
* corresponding to parts of that object.
*
- * head: Head of doubly-linked list of all entries belonging to the tag.
+ * head: Head of doubly-linked list of all entries belonging to the tag.
*
- * entry_cnt: Number of entries on linked list of entries for this tag.
+ * entry_cnt: Number of entries on linked list of entries for this tag.
*
- * corked: Boolean flag indicating whether entries for this object can be
- * evicted.
+ * corked: Boolean flag indicating whether entries for this object can be
+ * evicted.
+ *
+ * hh: uthash hash table handle (must be last)
*
****************************************************************************/
typedef struct H5C_tag_info_t {
@@ -3582,6 +3584,9 @@ typedef struct H5C_tag_info_t {
H5C_cache_entry_t *head; /* Head of the list of entries for this tag */
size_t entry_cnt; /* Number of entries on list */
hbool_t corked; /* Whether this object is corked */
+
+ /* Hash table fields */
+ UT_hash_handle hh; /* Hash table handle (must be LAST) */
} H5C_tag_info_t;
@@ -3974,17 +3979,17 @@ typedef struct H5C_tag_info_t {
*
* The following fields are maintained to facilitate this.
*
- * tag_list: A skip list to track entries that belong to an object.
- * Each H5C_tag_info_t struct on the tag list corresponds to
- * a particular object in the file. Tagged entries can be
- * flushed or evicted as a group, or corked to prevent entries
- * from being evicted from the cache.
+ * tag_list: A collection to track entries that belong to an object.
+ * Each H5C_tag_info_t struct on the tag list corresponds to
+ * a particular object in the file. Tagged entries can be
+ * flushed or evicted as a group, or corked to prevent entries
+ * from being evicted from the cache.
*
- * "Global" entries, like the superblock and the file's
- * freelist, as well as shared entries like global
- * heaps and shared object header messages, are not tagged.
+ * "Global" entries, like the superblock and the file's
+ * freelist, as well as shared entries like global
+ * heaps and shared object header messages, are not tagged.
*
- * ignore_tags: Boolean flag to disable tag validation during entry insertion.
+ * ignore_tags: Boolean flag to disable tag validation during entry insertion.
*
* num_objs_corked: Unsigned integer field containing the number of objects
* that are "corked". The "corked" status of an object is
@@ -4863,7 +4868,7 @@ struct H5C_t {
#endif /* H5C_DO_SANITY_CHECKS */
/* Fields for maintaining list of tagged entries */
- H5SL_t * tag_list;
+ H5C_tag_info_t * tag_list;
hbool_t ignore_tags;
uint32_t num_objs_corked;