commit-slab-decl.hon commit rebase (autostash): use an explicit OID to apply the stash (b98e914)
   1#ifndef COMMIT_SLAB_HDR_H
   2#define COMMIT_SLAB_HDR_H
   3
   4/* allocate ~512kB at once, allowing for malloc overhead */
   5#ifndef COMMIT_SLAB_SIZE
   6#define COMMIT_SLAB_SIZE (512*1024-32)
   7#endif
   8
   9#define declare_commit_slab(slabname, elemtype)                         \
  10                                                                        \
  11struct slabname {                                                       \
  12        unsigned slab_size;                                             \
  13        unsigned stride;                                                \
  14        unsigned slab_count;                                            \
  15        elemtype **slab;                                                \
  16}
  17
  18/*
  19 * Statically initialize a commit slab named "var". Note that this
  20 * evaluates "stride" multiple times! Example:
  21 *
  22 *   struct indegree indegrees = COMMIT_SLAB_INIT(1, indegrees);
  23 *
  24 */
  25#define COMMIT_SLAB_INIT(stride, var) { \
  26        COMMIT_SLAB_SIZE / sizeof(**((var).slab)) / (stride), \
  27        (stride), 0, NULL \
  28}
  29
  30#define declare_commit_slab_prototypes(slabname, elemtype)              \
  31                                                                        \
  32void init_ ##slabname## _with_stride(struct slabname *s, unsigned stride); \
  33void init_ ##slabname(struct slabname *s);                              \
  34void clear_ ##slabname(struct slabname *s);                             \
  35elemtype *slabname## _at_peek(struct slabname *s, const struct commit *c, int add_if_missing); \
  36elemtype *slabname## _at(struct slabname *s, const struct commit *c);   \
  37elemtype *slabname## _peek(struct slabname *s, const struct commit *c)
  38
  39#define define_shared_commit_slab(slabname, elemtype) \
  40        declare_commit_slab(slabname, elemtype); \
  41        declare_commit_slab_prototypes(slabname, elemtype)
  42
  43#endif /* COMMIT_SLAB_HDR_H */