summaryrefslogtreecommitdiff
path: root/oidset.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-10-11 14:52:22 +0900
committerJunio C Hamano <gitster@pobox.com>2017-10-11 14:52:22 +0900
commit54bd705a9589d33b155588aa11d3b856f252e83d (patch)
tree9687e9e746d3d00eaa7b9030b230cb4d463c9929 /oidset.c
parent95649bc6f5de96a862bc23bde4764dee81532a41 (diff)
parent9e6fabde82e91366a7fea5a81e795d26bbe7e10d (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.c36
1 files changed, 8 insertions, 28 deletions
diff --git a/oidset.c b/oidset.c
index a6a08ba52a..f1f874aaad 100644
--- a/oidset.c
+++ b/oidset.c
@@ -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);
}