43 lines
1.3 KiB
43 lines
1.3 KiB
#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 \ |
|
} |
|
|
|
#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); \ |
|
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_HDR_H */
|
|
|