#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)
		return 0;

	hashmap_entry_init(&key, sha1hash(oid->hash));
	return !!hashmap_get(&set->map, &key, 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);

	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);
	return 0;
}

void oidset_clear(struct oidset *set)
{
	hashmap_free(&set->map, 1);
}
