| #ifndef DECORATE_H | 
 | #define DECORATE_H | 
 |  | 
 | /* | 
 |  * A data structure that associates Git objects to void pointers. See | 
 |  * t/unit-tests/t-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 |