git/decorate.h
Ghanshyam Thakkar 456b4dce4c t/: migrate helper/test-example-decorate to the unit testing framework
helper/test-example-decorate.c along with t9004-example.sh provide
an example of how to use the functions in decorate.h (which provides
a data structure that associates Git objects to void pointers) and
also test their output.

Migrate them to the new unit testing framework for better debugging
and runtime performance.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-05-28 13:53:36 -07:00

72 lines
1.7 KiB
C

#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