summaryrefslogtreecommitdiff
path: root/decorate.h
diff options
context:
space:
mode:
Diffstat (limited to 'decorate.h')
-rw-r--r--decorate.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/decorate.h b/decorate.h
new file mode 100644
index 0000000000..08af658d34
--- /dev/null
+++ b/decorate.h
@@ -0,0 +1,71 @@
+#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