X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Finode_table.h;h=4d4fab5ec5678100d7dac4212d5e865985eb8d32;hb=686c407415c8e6ec022bd64678db65004631b194;hp=a9322d0606adc854440059844608a678f0ae732a;hpb=6460a27c606eed49e900c73a3316ac12d77a3a2e;p=wimlib diff --git a/include/wimlib/inode_table.h b/include/wimlib/inode_table.h index a9322d06..4d4fab5e 100644 --- a/include/wimlib/inode_table.h +++ b/include/wimlib/inode_table.h @@ -3,6 +3,7 @@ #include "wimlib/list.h" #include "wimlib/types.h" +#include "wimlib/util.h" struct wim_dentry; @@ -13,12 +14,20 @@ struct wim_dentry; * cases the inodes are linked by i_hlist_node. */ struct wim_inode_table { struct hlist_head *array; - size_t num_entries; + size_t filled; size_t capacity; struct hlist_head extra_inodes; }; +/* Compute the index of the hash bucket to use for the given inode number and + * device number. */ +static inline size_t +hash_inode(const struct wim_inode_table *table, u64 ino, u64 devno) +{ + return (hash_u64(ino) + devno) & (table->capacity - 1); +} + extern int init_inode_table(struct wim_inode_table *table, size_t capacity); @@ -27,6 +36,9 @@ inode_table_new_dentry(struct wim_inode_table *table, const tchar *name, u64 ino, u64 devno, bool noshare, struct wim_dentry **dentry_ret); +extern void +enlarge_inode_table(struct wim_inode_table *table); + extern void inode_table_prepare_inode_list(struct wim_inode_table *table, struct hlist_head *head);