diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2018-05-19 07:28:18 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-05-21 14:07:19 +0900 |
commit | 878f0bb81990170cde5dba934fcd1ae4c2e698ee (patch) | |
tree | a2296212454a358f27580bc3b9dd8cecc51c3594 /commit-slab-impl.h | |
parent | a9f1f1f9f8b2873c43d6100717eb776ea288ed9e (diff) | |
download | git-878f0bb81990170cde5dba934fcd1ae4c2e698ee.tar.gz |
commit-slab: support shared commit-slab
define_shared_commit_slab() could be used in a header file to define a
commit-slab. One of these C files must include commit-slab-impl.h and
"call" implement_shared_commit_slab().
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'commit-slab-impl.h')
-rw-r--r-- | commit-slab-impl.h | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/commit-slab-impl.h b/commit-slab-impl.h index 234d9ee5f0..87a9cadfcc 100644 --- a/commit-slab-impl.h +++ b/commit-slab-impl.h @@ -3,11 +3,17 @@ #define MAYBE_UNUSED __attribute__((__unused__)) -#define implement_commit_slab(slabname, elemtype) \ +#define implement_static_commit_slab(slabname, elemtype) \ + implement_commit_slab(slabname, elemtype, static MAYBE_UNUSED) + +#define implement_shared_commit_slab(slabname, elemtype) \ + implement_commit_slab(slabname, elemtype, ) + +#define implement_commit_slab(slabname, elemtype, scope) \ \ static int stat_ ##slabname## realloc; \ \ -static MAYBE_UNUSED void init_ ##slabname## _with_stride(struct slabname *s, \ +scope void init_ ##slabname## _with_stride(struct slabname *s, \ unsigned stride) \ { \ unsigned int elem_size; \ @@ -20,12 +26,12 @@ static MAYBE_UNUSED void init_ ##slabname## _with_stride(struct slabname *s, \ s->slab = NULL; \ } \ \ -static MAYBE_UNUSED void init_ ##slabname(struct slabname *s) \ +scope void init_ ##slabname(struct slabname *s) \ { \ init_ ##slabname## _with_stride(s, 1); \ } \ \ -static MAYBE_UNUSED void clear_ ##slabname(struct slabname *s) \ +scope void clear_ ##slabname(struct slabname *s) \ { \ unsigned int i; \ for (i = 0; i < s->slab_count; i++) \ @@ -34,7 +40,7 @@ static MAYBE_UNUSED void clear_ ##slabname(struct slabname *s) \ FREE_AND_NULL(s->slab); \ } \ \ -static MAYBE_UNUSED elemtype *slabname## _at_peek(struct slabname *s, \ +scope elemtype *slabname## _at_peek(struct slabname *s, \ const struct commit *c, \ int add_if_missing) \ { \ @@ -62,13 +68,13 @@ static MAYBE_UNUSED elemtype *slabname## _at_peek(struct slabname *s, \ return &s->slab[nth_slab][nth_slot * s->stride]; \ } \ \ -static MAYBE_UNUSED elemtype *slabname## _at(struct slabname *s, \ +scope elemtype *slabname## _at(struct slabname *s, \ const struct commit *c) \ { \ return slabname##_at_peek(s, c, 1); \ } \ \ -static MAYBE_UNUSED elemtype *slabname## _peek(struct slabname *s, \ +scope elemtype *slabname## _peek(struct slabname *s, \ const struct commit *c) \ { \ return slabname##_at_peek(s, c, 0); \ @@ -81,7 +87,7 @@ struct slabname * to allow a terminating semicolon, which makes instantiations look * like function declarations. I.e., the expansion of * - * implement_commit_slab(indegree, int); + * implement_commit_slab(indegree, int, static); * * ends in 'struct indegree;'. This would otherwise * be a syntax error according (at least) to ISO C. It's hard to |