summaryrefslogtreecommitdiff
path: root/commit-slab.h
diff options
context:
space:
mode:
Diffstat (limited to 'commit-slab.h')
-rw-r--r--commit-slab.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/commit-slab.h b/commit-slab.h
index cc114b53b0..f37ec3831f 100644
--- a/commit-slab.h
+++ b/commit-slab.h
@@ -90,8 +90,7 @@ static MAYBE_UNUSED elemtype *slabname## _at(struct slabname *s, \
\
if (s->slab_count <= nth_slab) { \
int i; \
- s->slab = xrealloc(s->slab, \
- (nth_slab + 1) * sizeof(*s->slab)); \
+ REALLOC_ARRAY(s->slab, nth_slab + 1); \
stat_ ##slabname## realloc++; \
for (i = s->slab_count; i <= nth_slab; i++) \
s->slab[i] = NULL; \
@@ -117,4 +116,16 @@ static int stat_ ##slabname## realloc
* catch because GCC silently parses it by default.
*/
+/*
+ * 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_H */