f4609b896f
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
44 lines
1.4 KiB
C
44 lines
1.4 KiB
C
#ifndef COMMIT_SLAB_DECL_H
|
|
#define COMMIT_SLAB_DECL_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 \
|
|
}
|
|
|
|
#define declare_commit_slab_prototypes(slabname, elemtype) \
|
|
\
|
|
void init_ ##slabname## _with_stride(struct slabname *s, unsigned stride); \
|
|
void init_ ##slabname(struct slabname *s); \
|
|
void clear_ ##slabname(struct slabname *s); \
|
|
void deep_clear_ ##slabname(struct slabname *s, void (*free_fn)(elemtype *ptr)); \
|
|
elemtype *slabname## _at_peek(struct slabname *s, const struct commit *c, int add_if_missing); \
|
|
elemtype *slabname## _at(struct slabname *s, const struct commit *c); \
|
|
elemtype *slabname## _peek(struct slabname *s, const struct commit *c)
|
|
|
|
#define define_shared_commit_slab(slabname, elemtype) \
|
|
declare_commit_slab(slabname, elemtype); \
|
|
declare_commit_slab_prototypes(slabname, elemtype)
|
|
|
|
#endif /* COMMIT_SLAB_DECL_H */
|