| #ifndef DECORATE_H |
| #define DECORATE_H |
| |
| /* |
| * A data structure that associates Git objects to void pointers. See |
| * t/helper/test-example-decorate.c for a demonstration of how to use these |
| * functions. |
| */ |
| |
| /* |
| * An entry in the data structure. |
| */ |
| struct decoration_entry { |
| const struct object *base; |
| void *decoration; |
| }; |
| |
| /* |
| * The data structure. |
| * |
| * This data structure must be zero-initialized. |
| */ |
| struct decoration { |
| /* |
| * Not used by the decoration mechanism. Clients may use this for |
| * whatever they want. |
| */ |
| const char *name; |
| |
| /* |
| * The capacity of "entries". |
| */ |
| unsigned int size; |
| |
| /* |
| * The number of real Git objects (that is, entries with non-NULL |
| * "base"). |
| */ |
| unsigned int nr; |
| |
| /* |
| * The entries. This is an array of size "size", containing nr entries |
| * with non-NULL "base" and (size - nr) entries with NULL "base". |
| */ |
| struct decoration_entry *entries; |
| }; |
| |
| /* |
| * Add an association from the given object to the given pointer (which may be |
| * NULL), returning the previously associated pointer. If there is no previous |
| * association, this function returns NULL. |
| */ |
| void *add_decoration(struct decoration *n, const struct object *obj, void *decoration); |
| |
| /* |
| * Return the pointer associated to the given object. If there is no |
| * association, this function returns NULL. |
| */ |
| void *lookup_decoration(struct decoration *n, const struct object *obj); |
| |
| /* |
| * Clear all decoration entries, releasing any memory used by the structure. |
| * If free_cb is not NULL, it is called for every decoration value currently |
| * stored. |
| * |
| * After clearing, the decoration struct can be used again. The "name" field is |
| * retained. |
| */ |
| void clear_decoration(struct decoration *n, void (*free_cb)(void *)); |
| |
| #endif |