blob: cdeb17c9df2eb680d85e73e8ed2f48b52f44569f [file] [log] [blame]
#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