123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #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 */
|