From: Jeff King Date: Tue, 10 Jun 2014 21:42:51 GMT Subject: [PATCH 15/17] commit-slab: provide a static initializer Message-ID: <20140610214251.GO19147@sigill.intra.peff.net> In-Reply-To: <20140610213509.GA26979@sigill.intra.peff.net> Callers currently must use init_foo_slab() at runtime before accessing a slab. For global slabs, it's much nicer if we can initialize them in BSS, so that each user does not have to add code to check-and-initialize. Signed-off-by: Jeff King --- There was no comment on this one in v1. I'd be curious if anyone has comments on what I wrote in: http://article.gmane.org/gmane.comp.version-control.git/251099 commit-slab.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/commit-slab.h b/commit-slab.h index cc114b5..375c9c7 100644 --- a/commit-slab.h +++ b/commit-slab.h @@ -117,4 +117,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 */ -- 2.0.0.729.g520999f