Here I introduce new strmap, strintmap, and strset types. Changes since v5: * Fixed a typo in forward declaration of struct mem_pool, spotted by Phillip. (Usage via pointers meant gcc & clang wouldn't complain.) [1] https://lore.kernel.org/git/20180906191203.GA26184@xxxxxxxxxxxxxxxxxxxxx/ Elijah Newren (15): hashmap: add usage documentation explaining hashmap_free[_entries]() hashmap: adjust spacing to fix argument alignment hashmap: allow re-use after hashmap_free() hashmap: introduce a new hashmap_partial_clear() hashmap: provide deallocation function names strmap: new utility functions strmap: add more utility functions strmap: enable faster clearing and reusing of strmaps strmap: add functions facilitating use as a string->int map strmap: split create_entry() out of strmap_put() strmap: add a strset sub-type strmap: enable allocations to come from a mem_pool strmap: take advantage of FLEXPTR_ALLOC_STR when relevant Use new HASHMAP_INIT macro to simplify hashmap initialization shortlog: use strset from strmap.h Makefile | 1 + add-interactive.c | 2 +- attr.c | 26 ++-- blame.c | 2 +- bloom.c | 5 +- builtin/difftool.c | 9 +- builtin/fetch.c | 6 +- builtin/shortlog.c | 61 +-------- config.c | 2 +- diff.c | 4 +- diffcore-rename.c | 2 +- dir.c | 8 +- hashmap.c | 74 +++++++---- hashmap.h | 91 +++++++++++--- merge-recursive.c | 6 +- name-hash.c | 4 +- object.c | 2 +- oidmap.c | 2 +- patch-ids.c | 2 +- range-diff.c | 6 +- ref-filter.c | 2 +- revision.c | 11 +- sequencer.c | 4 +- strmap.c | 178 ++++++++++++++++++++++++++ strmap.h | 268 ++++++++++++++++++++++++++++++++++++++++ submodule-config.c | 4 +- t/helper/test-hashmap.c | 9 +- 27 files changed, 621 insertions(+), 170 deletions(-) create mode 100644 strmap.c create mode 100644 strmap.h base-commit: d4a392452e292ff924e79ec8458611c0f679d6d4 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-835%2Fnewren%2Fstrmap-v6 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-835/newren/strmap-v6 Pull-Request: https://github.com/git/git/pull/835 Range-diff vs v5: 1: af6b6fcb46 = 1: af6b6fcb46 hashmap: add usage documentation explaining hashmap_free[_entries]() 2: 591161fd78 = 2: 591161fd78 hashmap: adjust spacing to fix argument alignment 3: f2718d036d = 3: f2718d036d hashmap: allow re-use after hashmap_free() 4: 61f1da3c51 = 4: 61f1da3c51 hashmap: introduce a new hashmap_partial_clear() 5: 861e8d65ae = 5: 861e8d65ae hashmap: provide deallocation function names 6: 448d3b219f = 6: 448d3b219f strmap: new utility functions 7: 5e8004c728 = 7: 5e8004c728 strmap: add more utility functions 8: fd96e9fc8d = 8: fd96e9fc8d strmap: enable faster clearing and reusing of strmaps 9: f499934f54 = 9: f499934f54 strmap: add functions facilitating use as a string->int map 10: 3bcceb8cdb = 10: 3bcceb8cdb strmap: split create_entry() out of strmap_put() 11: e128a71fec = 11: e128a71fec strmap: add a strset sub-type 12: 34f542d9dd ! 12: 3926c4c97b strmap: enable allocations to come from a mem_pool @@ strmap.h #include "hashmap.h" -+struct mempool; ++struct mem_pool; struct strmap { struct hashmap map; + struct mem_pool *pool; 13: 39ec2fa411 = 13: 562595224b strmap: take advantage of FLEXPTR_ALLOC_STR when relevant 14: d3713d88f2 = 14: 058e7a6b76 Use new HASHMAP_INIT macro to simplify hashmap initialization 15: 24e5ce60f5 = 15: 9b494c26c1 shortlog: use strset from strmap.h -- gitgitgadget