1#ifndef OIDSET_H 2#define OIDSET_H 3 4/** 5 * This API is similar to sha1-array, in that it maintains a set of object ids 6 * in a memory-efficient way. The major differences are: 7 * 8 * 1. It uses a hash, so we can do online duplicate removal, rather than 9 * sort-and-uniq at the end. This can reduce memory footprint if you have 10 * a large list of oids with many duplicates. 11 * 12 * 2. The per-unique-oid memory footprint is slightly higher due to hash 13 * table overhead. 14 */ 15 16/** 17 * A single oidset; should be zero-initialized (or use OIDSET_INIT). 18 */ 19struct oidset { 20struct hashmap map; 21}; 22 23#define OIDSET_INIT { { NULL } } 24 25/** 26 * Returns true iff `set` contains `oid`. 27 */ 28intoidset_contains(const struct oidset *set,const struct object_id *oid); 29 30/** 31 * Insert the oid into the set; a copy is made, so "oid" does not need 32 * to persist after this function is called. 33 * 34 * Returns 1 if the oid was already in the set, 0 otherwise. This can be used 35 * to perform an efficient check-and-add. 36 */ 37intoidset_insert(struct oidset *set,const struct object_id *oid); 38 39/** 40 * Remove all entries from the oidset, freeing any resources associated with 41 * it. 42 */ 43voidoidset_clear(struct oidset *set); 44 45#endif/* OIDSET_H */