summaryrefslogtreecommitdiffstats
path: root/decorate.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:34:27 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:34:27 +0000
commit4dbdc42d9e7c3968ff7f690d00680419c9b8cb0f (patch)
tree47c1d492e9c956c1cd2b74dbd3b9d8b0db44dc4e /decorate.h
parentInitial commit. (diff)
downloadgit-4dbdc42d9e7c3968ff7f690d00680419c9b8cb0f.tar.xz
git-4dbdc42d9e7c3968ff7f690d00680419c9b8cb0f.zip
Adding upstream version 1:2.43.0.upstream/1%2.43.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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 0000000..cdeb17c
--- /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/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