 878f0bb819
			
		
	
	878f0bb819
	
	
	
		
			
			define_shared_commit_slab() could be used in a header file to define a commit-slab. One of these C files must include commit-slab-impl.h and "call" implement_shared_commit_slab(). Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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 */
 |