diff options
| author | Junio C Hamano <gitster@pobox.com> | 2017-10-11 14:52:22 +0900 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2017-10-11 14:52:22 +0900 |
| commit | 54bd705a9589d33b155588aa11d3b856f252e83d (patch) | |
| tree | 9687e9e746d3d00eaa7b9030b230cb4d463c9929 /oidset.c | |
| parent | 95649bc6f5de96a862bc23bde4764dee81532a41 (diff) | |
| parent | 9e6fabde82e91366a7fea5a81e795d26bbe7e10d (diff) | |
Merge branch 'jt/oidmap'
Introduce a new "oidmap" API and rewrite oidset to use it.
* jt/oidmap:
oidmap: map with OID as key
Diffstat (limited to 'oidset.c')
| -rw-r--r-- | oidset.c | 36 |
1 files changed, 8 insertions, 28 deletions
@@ -1,50 +1,30 @@ #include "cache.h" #include "oidset.h" -struct oidset_entry { - struct hashmap_entry hash; - struct object_id oid; -}; - -static int oidset_hashcmp(const void *unused_cmp_data, - const void *va, const void *vb, - const void *vkey) -{ - const struct oidset_entry *a = va, *b = vb; - const struct object_id *key = vkey; - return oidcmp(&a->oid, key ? key : &b->oid); -} - int oidset_contains(const struct oidset *set, const struct object_id *oid) { - struct hashmap_entry key; - - if (!set->map.cmpfn) + if (!set->map.map.tablesize) return 0; - - hashmap_entry_init(&key, sha1hash(oid->hash)); - return !!hashmap_get(&set->map, &key, oid); + return !!oidmap_get(&set->map, oid); } int oidset_insert(struct oidset *set, const struct object_id *oid) { - struct oidset_entry *entry; - - if (!set->map.cmpfn) - hashmap_init(&set->map, oidset_hashcmp, NULL, 0); + struct oidmap_entry *entry; - if (oidset_contains(set, oid)) + if (!set->map.map.tablesize) + oidmap_init(&set->map, 0); + else if (oidset_contains(set, oid)) return 1; entry = xmalloc(sizeof(*entry)); - hashmap_entry_init(&entry->hash, sha1hash(oid->hash)); oidcpy(&entry->oid, oid); - hashmap_add(&set->map, entry); + oidmap_put(&set->map, entry); return 0; } void oidset_clear(struct oidset *set) { - hashmap_free(&set->map, 1); + oidmap_free(&set->map, 1); } |
