]>
Commit | Line | Data |
---|---|---|
9e6fabde JT |
1 | #ifndef OIDMAP_H |
2 | #define OIDMAP_H | |
3 | ||
4 | #include "hashmap.h" | |
5 | ||
6 | /* | |
7 | * struct oidmap_entry is a structure representing an entry in the hash table, | |
8 | * which must be used as first member of user data structures. | |
9 | * | |
10 | * Users should set the oid field. oidmap_put() will populate the | |
11 | * internal_entry field. | |
12 | */ | |
13 | struct oidmap_entry { | |
14 | /* For internal use only */ | |
15 | struct hashmap_entry internal_entry; | |
16 | ||
17 | struct object_id oid; | |
18 | }; | |
19 | ||
20 | struct oidmap { | |
21 | struct hashmap map; | |
22 | }; | |
23 | ||
24 | #define OIDMAP_INIT { { NULL } } | |
25 | ||
26 | /* | |
27 | * Initializes an oidmap structure. | |
28 | * | |
29 | * `map` is the oidmap to initialize. | |
30 | * | |
31 | * If the total number of entries is known in advance, the `initial_size` | |
32 | * parameter may be used to preallocate a sufficiently large table and thus | |
33 | * prevent expensive resizing. If 0, the table is dynamically resized. | |
34 | */ | |
35 | extern void oidmap_init(struct oidmap *map, size_t initial_size); | |
36 | ||
37 | /* | |
38 | * Frees an oidmap structure and allocated memory. | |
39 | * | |
40 | * If `free_entries` is true, each oidmap_entry in the map is freed as well | |
41 | * using stdlibs free(). | |
42 | */ | |
43 | extern void oidmap_free(struct oidmap *map, int free_entries); | |
44 | ||
45 | /* | |
46 | * Returns the oidmap entry for the specified oid, or NULL if not found. | |
47 | */ | |
48 | extern void *oidmap_get(const struct oidmap *map, | |
49 | const struct object_id *key); | |
50 | ||
51 | /* | |
52 | * Adds or replaces an oidmap entry. | |
53 | * | |
54 | * ((struct oidmap_entry *) entry)->internal_entry will be populated by this | |
55 | * function. | |
56 | * | |
57 | * Returns the replaced entry, or NULL if not found (i.e. the entry was added). | |
58 | */ | |
59 | extern void *oidmap_put(struct oidmap *map, void *entry); | |
60 | ||
61 | /* | |
62 | * Removes an oidmap entry matching the specified oid. | |
63 | * | |
64 | * Returns the removed entry, or NULL if not found. | |
65 | */ | |
66 | extern void *oidmap_remove(struct oidmap *map, const struct object_id *key); | |
67 | ||
68 | #endif |