Staging
v0.5.1
Revision 8a0ba68f6dab2c8b1f297a0d46b710bb9af3237a authored by Junio C Hamano on 01 December 2018, 12:44:56 UTC, committed by Junio C Hamano on 01 December 2018, 12:44:56 UTC
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 15cc2da
Raw File
commit-slab-decl.h
#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 */
back to top