config.txt: move guitool.* to a separate file
[gitweb.git] / oidset.c
index a6a08ba52abdcda75b0bd5cc28349cd3c4be871c..fe4eb921df81bbabe1b95bd7f594235f360eec7d 100644 (file)
--- a/oidset.c
+++ b/oidset.c
@@ -1,50 +1,37 @@
 #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)
+void oidset_init(struct oidset *set, size_t initial_size)
 {
-       const struct oidset_entry *a = va, *b = vb;
-       const struct object_id *key = vkey;
-       return oidcmp(&a->oid, key ? key : &b->oid);
+       memset(&set->set, 0, sizeof(set->set));
+       if (initial_size)
+               kh_resize_oid(&set->set, initial_size);
 }
 
 int oidset_contains(const struct oidset *set, const struct object_id *oid)
 {
-       struct hashmap_entry key;
-
-       if (!set->map.cmpfn)
-               return 0;
-
-       hashmap_entry_init(&key, sha1hash(oid->hash));
-       return !!hashmap_get(&set->map, &key, oid);
+       khiter_t pos = kh_get_oid(&set->set, *oid);
+       return pos != kh_end(&set->set);
 }
 
 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);
-
-       if (oidset_contains(set, oid))
-               return 1;
-
-       entry = xmalloc(sizeof(*entry));
-       hashmap_entry_init(&entry->hash, sha1hash(oid->hash));
-       oidcpy(&entry->oid, oid);
+       int added;
+       kh_put_oid(&set->set, *oid, &added);
+       return !added;
+}
 
-       hashmap_add(&set->map, entry);
-       return 0;
+int oidset_remove(struct oidset *set, const struct object_id *oid)
+{
+       khiter_t pos = kh_get_oid(&set->set, *oid);
+       if (pos == kh_end(&set->set))
+               return 0;
+       kh_del_oid(&set->set, pos);
+       return 1;
 }
 
 void oidset_clear(struct oidset *set)
 {
-       hashmap_free(&set->map, 1);
+       kh_release_oid(&set->set);
+       oidset_init(set, 0);
 }