The changed-path Bloom filter is improved using ideas from an independent implementation. * sg/commit-graph-cleanups: commit-graph: simplify write_commit_graph_file() #2 commit-graph: simplify write_commit_graph_file() #1 commit-graph: simplify parse_commit_graph() #2 commit-graph: simplify parse_commit_graph() #1 commit-graph: clean up #includes diff.h: drop diff_tree_oid() & friends' return value commit-slab: add a function to deep free entries on the slab commit-graph-format.txt: all multi-byte numbers are in network byte order commit-graph: fix parsing the Chunk Lookup table tree-walk.c: don't match submodule entries for 'submod/anything'
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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 */
 |