]>
Commit | Line | Data |
---|---|---|
29c2bd5f JK |
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 | */ | |
19 | struct oidset { | |
20 | struct hashmap map; | |
21 | }; | |
22 | ||
23 | #define OIDSET_INIT { { NULL } } | |
24 | ||
25 | /** | |
26 | * Returns true iff `set` contains `oid`. | |
27 | */ | |
28 | int oidset_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 | */ | |
37 | int oidset_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 | */ | |
43 | void oidset_clear(struct oidset *set); | |
44 | ||
45 | #endif /* OIDSET_H */ |