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