path: root/Documentation/technical
diff options
authorJunio C Hamano <>2017-03-28 21:06:00 (GMT)
committerJunio C Hamano <>2017-03-28 21:06:00 (GMT)
commit0330344e0f63415421aff87d29ee037d3ea3b436 (patch)
treedbce2507fe2a5fe77e1b202fb60d28de789e0c03 /Documentation/technical
parent53a0f9f7ad8cda231ce5bb15a0f086f29bdc6de3 (diff)
parent41b3eb4a6bff4d38bb188d28544bf901080d9e96 (diff)
Merge branch 'jh/memihash-opt'
The name-hash used for detecting paths that are different only in cases (which matter on case insensitive filesystems) has been optimized to take advantage of multi-threading when it makes sense. * jh/memihash-opt: name-hash: add test-lazy-init-name-hash to .gitignore name-hash: add perf test for lazy_init_name_hash name-hash: add test-lazy-init-name-hash name-hash: perf improvement for lazy_init_name_hash hashmap: document memihash_cont, hashmap_disallow_rehash api hashmap: add disallow_rehash setting hashmap: allow memihash computation to be continued name-hash: specify initial size for istate.dir_hash table
Diffstat (limited to 'Documentation/technical')
1 files changed, 22 insertions, 0 deletions
diff --git a/Documentation/technical/api-hashmap.txt b/Documentation/technical/api-hashmap.txt
index a3f020c..ccc634b 100644
--- a/Documentation/technical/api-hashmap.txt
+++ b/Documentation/technical/api-hashmap.txt
@@ -21,6 +21,9 @@ that the hashmap is initialized. It may also be useful for statistical purposes
`cmpfn` stores the comparison function specified in `hashmap_init()`. In
advanced scenarios, it may be useful to change this, e.g. to switch between
case-sensitive and case-insensitive lookup.
+When `disallow_rehash` is set, automatic rehashes are prevented during inserts
+and deletes.
`struct hashmap_entry`::
@@ -57,6 +60,7 @@ Functions
`unsigned int strihash(const char *buf)`::
`unsigned int memhash(const void *buf, size_t len)`::
`unsigned int memihash(const void *buf, size_t len)`::
+`unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len)`::
Ready-to-use hash functions for strings, using the FNV-1 algorithm (see
@@ -65,6 +69,9 @@ Functions
`memihash` operate on arbitrary-length memory.
`strihash` and `memihash` are case insensitive versions.
+`memihash_cont` is a variant of `memihash` that allows a computation to be
+continued with another chunk of data.
`unsigned int sha1hash(const unsigned char *sha1)`::
@@ -184,6 +191,21 @@ passed to `hashmap_cmp_fn` to decide whether the entry matches the key.
Returns the removed entry, or NULL if not found.
+`void hashmap_disallow_rehash(struct hashmap *map, unsigned value)`::
+ Disallow/allow automatic rehashing of the hashmap during inserts
+ and deletes.
+This is useful if the caller knows that the hashmap will be accessed
+by multiple threads.
+The caller is still responsible for any necessary locking; this simply
+prevents unexpected rehashing. The caller is also responsible for properly
+sizing the initial hashmap to ensure good performance.
+A call to allow rehashing does not force a rehash; that might happen
+with the next insert or delete.
`void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter)`::
`void *hashmap_iter_next(struct hashmap_iter *iter)`::
`void *hashmap_iter_first(struct hashmap *map, struct hashmap_iter *iter)`::