diff options
Diffstat (limited to 'oidset.c')
-rw-r--r-- | oidset.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/oidset.c b/oidset.c new file mode 100644 index 0000000000..454c54f933 --- /dev/null +++ b/oidset.c @@ -0,0 +1,40 @@ +#include "cache.h" +#include "oidset.h" + +int oidset_contains(const struct oidset *set, const struct object_id *oid) +{ + if (!set->map.map.tablesize) + return 0; + return !!oidmap_get(&set->map, oid); +} + +int oidset_insert(struct oidset *set, const struct object_id *oid) +{ + struct oidmap_entry *entry; + + if (!set->map.map.tablesize) + oidmap_init(&set->map, 0); + else if (oidset_contains(set, oid)) + return 1; + + entry = xmalloc(sizeof(*entry)); + oidcpy(&entry->oid, oid); + + oidmap_put(&set->map, entry); + return 0; +} + +int oidset_remove(struct oidset *set, const struct object_id *oid) +{ + struct oidmap_entry *entry; + + entry = oidmap_remove(&set->map, oid); + free(entry); + + return (entry != NULL); +} + +void oidset_clear(struct oidset *set) +{ + oidmap_free(&set->map, 1); +} |