summaryrefslogtreecommitdiff
path: root/commit-slab-decl.h
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2018-05-19 05:28:17 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-05-21 05:07:19 (GMT)
commita9f1f1f9f8b2873c43d6100717eb776ea288ed9e (patch)
tree5ac080e1e3e2cb322a01486f4045823f16e690b8 /commit-slab-decl.h
parentccdcbd54c4475c2238b310f7113ab3075b5abc9c (diff)
downloadgit-a9f1f1f9f8b2873c43d6100717eb776ea288ed9e.zip
git-a9f1f1f9f8b2873c43d6100717eb776ea288ed9e.tar.gz
git-a9f1f1f9f8b2873c43d6100717eb776ea288ed9e.tar.bz2
commit-slab.h: code split
The struct declaration and implementation macros are moved to commit-slab-hdr.h and commit-slab-impl.h respectively. This right now is not needed for current users but if we make a public commit-slab type, we may want to avoid including the slab implementation in a header file which gets replicated in every c file that includes it. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit-slab-decl.h')
-rw-r--r--commit-slab-decl.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/commit-slab-decl.h b/commit-slab-decl.h
new file mode 100644
index 0000000..fb5220f
--- /dev/null
+++ b/commit-slab-decl.h
@@ -0,0 +1,30 @@
+#ifndef COMMIT_SLAB_HDR_H
+#define COMMIT_SLAB_HDR_H
+
+/* allocate ~512kB at once, allowing for malloc overhead */
+#ifndef COMMIT_SLAB_SIZE
+#define COMMIT_SLAB_SIZE (512*1024-32)
+#endif
+
+#define declare_commit_slab(slabname, elemtype) \
+ \
+struct slabname { \
+ unsigned slab_size; \
+ unsigned stride; \
+ unsigned slab_count; \
+ elemtype **slab; \
+}
+
+/*
+ * Statically initialize a commit slab named "var". Note that this
+ * evaluates "stride" multiple times! Example:
+ *
+ * struct indegree indegrees = COMMIT_SLAB_INIT(1, indegrees);
+ *
+ */
+#define COMMIT_SLAB_INIT(stride, var) { \
+ COMMIT_SLAB_SIZE / sizeof(**((var).slab)) / (stride), \
+ (stride), 0, NULL \
+}
+
+#endif /* COMMIT_SLAB_HDR_H */