/src/git/commit-slab-impl.h
Line | Count | Source |
1 | | #ifndef COMMIT_SLAB_IMPL_H |
2 | | #define COMMIT_SLAB_IMPL_H |
3 | | |
4 | | #define implement_static_commit_slab(slabname, elemtype) \ |
5 | | implement_commit_slab(slabname, elemtype, MAYBE_UNUSED static) |
6 | | |
7 | | #define implement_shared_commit_slab(slabname, elemtype) \ |
8 | | implement_commit_slab(slabname, elemtype, ) |
9 | | |
10 | | #define implement_commit_slab(slabname, elemtype, scope) \ |
11 | | \ |
12 | | scope void init_ ##slabname## _with_stride(struct slabname *s, \ |
13 | 0 | unsigned stride) \ |
14 | 0 | { \ |
15 | 0 | unsigned int elem_size; \ |
16 | 0 | if (!stride) \ |
17 | 0 | stride = 1; \ |
18 | 0 | s->stride = stride; \ |
19 | 0 | elem_size = sizeof(elemtype) * stride; \ |
20 | 0 | s->slab_size = COMMIT_SLAB_SIZE / elem_size; \ |
21 | 0 | s->slab_count = 0; \ |
22 | 0 | s->slab = NULL; \ |
23 | 0 | } \ Unexecuted instantiation: object-name.c:init_contains_cache_with_stride Unexecuted instantiation: remote.c:init_contains_cache_with_stride Unexecuted instantiation: revision.c:init_contains_cache_with_stride Unexecuted instantiation: shallow.c:init_contains_cache_with_stride Unexecuted instantiation: submodule.c:init_contains_cache_with_stride Unexecuted instantiation: bisect.c:init_contains_cache_with_stride Unexecuted instantiation: commit-graph.c:init_commit_pos_with_stride Unexecuted instantiation: commit-graph.c:init_commit_graph_data_slab_with_stride Unexecuted instantiation: commit-reach.c:init_contains_cache_with_stride Unexecuted instantiation: commit.c:init_contains_cache_with_stride Unexecuted instantiation: commit.c:init_merge_desc_slab_with_stride Unexecuted instantiation: diff-lib.c:init_contains_cache_with_stride Unexecuted instantiation: fetch-pack.c:init_contains_cache_with_stride Unexecuted instantiation: log-tree.c:init_contains_cache_with_stride Unexecuted instantiation: merge-ort.c:init_contains_cache_with_stride Unexecuted instantiation: sequencer.c:init_contains_cache_with_stride |
24 | | \ |
25 | 0 | scope void init_ ##slabname(struct slabname *s) \ |
26 | 0 | { \ |
27 | 0 | init_ ##slabname## _with_stride(s, 1); \ |
28 | 0 | } \ Unexecuted instantiation: object-name.c:init_contains_cache Unexecuted instantiation: remote.c:init_contains_cache Unexecuted instantiation: init_revision_sources Unexecuted instantiation: revision.c:init_indegree_slab Unexecuted instantiation: revision.c:init_author_date_slab Unexecuted instantiation: revision.c:init_saved_parents Unexecuted instantiation: revision.c:init_contains_cache Unexecuted instantiation: shallow.c:init_commit_depth Unexecuted instantiation: shallow.c:init_ref_bitmap Unexecuted instantiation: shallow.c:init_contains_cache Unexecuted instantiation: submodule.c:init_contains_cache Unexecuted instantiation: bisect.c:init_commit_weight Unexecuted instantiation: bisect.c:init_contains_cache Unexecuted instantiation: bloom.c:init_bloom_filter_slab Unexecuted instantiation: commit-graph.c:init_topo_level_slab Unexecuted instantiation: commit-graph.c:init_commit_pos Unexecuted instantiation: commit-graph.c:init_commit_graph_data_slab Unexecuted instantiation: commit-reach.c:init_bit_arrays Unexecuted instantiation: commit-reach.c:init_best_branch_base Unexecuted instantiation: commit-reach.c:init_contains_cache Unexecuted instantiation: commit.c:init_buffer_slab Unexecuted instantiation: commit.c:init_indegree_slab Unexecuted instantiation: commit.c:init_author_date_slab Unexecuted instantiation: commit.c:init_contains_cache Unexecuted instantiation: commit.c:init_merge_desc_slab Unexecuted instantiation: diff-lib.c:init_contains_cache Unexecuted instantiation: fetch-pack.c:init_contains_cache Unexecuted instantiation: log-tree.c:init_contains_cache Unexecuted instantiation: merge-ort.c:init_contains_cache Unexecuted instantiation: sequencer.c:init_commit_todo_item Unexecuted instantiation: sequencer.c:init_contains_cache Unexecuted instantiation: rebase-interactive.c:init_commit_seen |
29 | | \ |
30 | 0 | scope void clear_ ##slabname(struct slabname *s) \ |
31 | 0 | { \ |
32 | 0 | unsigned int i; \ |
33 | 0 | for (i = 0; i < s->slab_count; i++) \ |
34 | 0 | free(s->slab[i]); \ |
35 | 0 | s->slab_count = 0; \ |
36 | 0 | FREE_AND_NULL(s->slab); \ |
37 | 0 | } \ Unexecuted instantiation: object-name.c:clear_contains_cache Unexecuted instantiation: remote.c:clear_contains_cache Unexecuted instantiation: revision.c:clear_contains_cache Unexecuted instantiation: shallow.c:clear_contains_cache Unexecuted instantiation: submodule.c:clear_contains_cache Unexecuted instantiation: bisect.c:clear_contains_cache Unexecuted instantiation: commit-graph.c:clear_commit_pos Unexecuted instantiation: commit-reach.c:clear_contains_cache Unexecuted instantiation: commit.c:clear_contains_cache Unexecuted instantiation: commit.c:clear_merge_desc_slab Unexecuted instantiation: diff-lib.c:clear_contains_cache Unexecuted instantiation: fetch-pack.c:clear_contains_cache Unexecuted instantiation: log-tree.c:clear_contains_cache Unexecuted instantiation: merge-ort.c:clear_contains_cache Unexecuted instantiation: sequencer.c:clear_contains_cache |
38 | | \ |
39 | 0 | scope void deep_clear_ ##slabname(struct slabname *s, void (*free_fn)(elemtype *)) \ |
40 | 0 | { \ |
41 | 0 | unsigned int i; \ |
42 | 0 | for (i = 0; i < s->slab_count; i++) { \ |
43 | 0 | unsigned int j; \ |
44 | 0 | if (!s->slab[i]) \ |
45 | 0 | continue; \ |
46 | 0 | for (j = 0; j < s->slab_size; j++) \ |
47 | 0 | free_fn(&s->slab[i][j * s->stride]); \ |
48 | 0 | } \ |
49 | 0 | clear_ ##slabname(s); \ |
50 | 0 | } \ Unexecuted instantiation: object-name.c:deep_clear_contains_cache Unexecuted instantiation: remote.c:deep_clear_contains_cache Unexecuted instantiation: deep_clear_revision_sources Unexecuted instantiation: revision.c:deep_clear_saved_parents Unexecuted instantiation: revision.c:deep_clear_contains_cache Unexecuted instantiation: revision.c:deep_clear_indegree_slab Unexecuted instantiation: revision.c:deep_clear_author_date_slab Unexecuted instantiation: shallow.c:deep_clear_commit_depth Unexecuted instantiation: shallow.c:deep_clear_contains_cache Unexecuted instantiation: shallow.c:deep_clear_ref_bitmap Unexecuted instantiation: submodule.c:deep_clear_contains_cache Unexecuted instantiation: bisect.c:deep_clear_contains_cache Unexecuted instantiation: bisect.c:deep_clear_commit_weight Unexecuted instantiation: bloom.c:deep_clear_bloom_filter_slab Unexecuted instantiation: commit-graph.c:deep_clear_topo_level_slab Unexecuted instantiation: commit-graph.c:deep_clear_commit_pos Unexecuted instantiation: commit-graph.c:deep_clear_commit_graph_data_slab Unexecuted instantiation: commit-reach.c:deep_clear_contains_cache Unexecuted instantiation: commit-reach.c:deep_clear_bit_arrays Unexecuted instantiation: commit-reach.c:deep_clear_best_branch_base Unexecuted instantiation: commit.c:deep_clear_contains_cache Unexecuted instantiation: commit.c:deep_clear_buffer_slab Unexecuted instantiation: commit.c:deep_clear_indegree_slab Unexecuted instantiation: commit.c:deep_clear_author_date_slab Unexecuted instantiation: commit.c:deep_clear_merge_desc_slab Unexecuted instantiation: diff-lib.c:deep_clear_contains_cache Unexecuted instantiation: fetch-pack.c:deep_clear_contains_cache Unexecuted instantiation: log-tree.c:deep_clear_contains_cache Unexecuted instantiation: merge-ort.c:deep_clear_contains_cache Unexecuted instantiation: sequencer.c:deep_clear_contains_cache Unexecuted instantiation: sequencer.c:deep_clear_commit_todo_item Unexecuted instantiation: rebase-interactive.c:deep_clear_commit_seen |
51 | | \ |
52 | | scope elemtype *slabname## _at_peek(struct slabname *s, \ |
53 | | const struct commit *c, \ |
54 | 0 | int add_if_missing) \ |
55 | 0 | { \ |
56 | 0 | unsigned int nth_slab, nth_slot; \ |
57 | 0 | \ |
58 | 0 | nth_slab = c->index / s->slab_size; \ |
59 | 0 | nth_slot = c->index % s->slab_size; \ |
60 | 0 | \ |
61 | 0 | if (s->slab_count <= nth_slab) { \ |
62 | 0 | unsigned int i; \ |
63 | 0 | if (!add_if_missing) \ |
64 | 0 | return NULL; \ |
65 | 0 | REALLOC_ARRAY(s->slab, nth_slab + 1); \ |
66 | 0 | for (i = s->slab_count; i <= nth_slab; i++) \ |
67 | 0 | s->slab[i] = NULL; \ |
68 | 0 | s->slab_count = nth_slab + 1; \ |
69 | 0 | } \ |
70 | 0 | if (!s->slab[nth_slab]) { \ |
71 | 0 | if (!add_if_missing) \ |
72 | 0 | return NULL; \ |
73 | 0 | s->slab[nth_slab] = xcalloc(s->slab_size, \ |
74 | 0 | sizeof(**s->slab) * s->stride); \ |
75 | 0 | } \ |
76 | 0 | return &s->slab[nth_slab][nth_slot * s->stride]; \ |
77 | 0 | } \ Unexecuted instantiation: object-name.c:contains_cache_at_peek Unexecuted instantiation: remote.c:contains_cache_at_peek Unexecuted instantiation: revision.c:contains_cache_at_peek Unexecuted instantiation: revision.c:author_date_slab_at_peek Unexecuted instantiation: shallow.c:contains_cache_at_peek Unexecuted instantiation: submodule.c:contains_cache_at_peek Unexecuted instantiation: bisect.c:contains_cache_at_peek Unexecuted instantiation: commit.c:contains_cache_at_peek Unexecuted instantiation: diff-lib.c:contains_cache_at_peek Unexecuted instantiation: fetch-pack.c:contains_cache_at_peek Unexecuted instantiation: log-tree.c:contains_cache_at_peek Unexecuted instantiation: merge-ort.c:contains_cache_at_peek Unexecuted instantiation: sequencer.c:contains_cache_at_peek |
78 | | \ |
79 | | scope elemtype *slabname## _at(struct slabname *s, \ |
80 | 0 | const struct commit *c) \ |
81 | 0 | { \ |
82 | 0 | return slabname##_at_peek(s, c, 1); \ |
83 | 0 | } \ Unexecuted instantiation: object-name.c:contains_cache_at Unexecuted instantiation: remote.c:contains_cache_at Unexecuted instantiation: revision_sources_at Unexecuted instantiation: revision.c:indegree_slab_at Unexecuted instantiation: revision.c:saved_parents_at Unexecuted instantiation: revision.c:contains_cache_at Unexecuted instantiation: revision.c:author_date_slab_at Unexecuted instantiation: shallow.c:commit_depth_at Unexecuted instantiation: shallow.c:ref_bitmap_at Unexecuted instantiation: shallow.c:contains_cache_at Unexecuted instantiation: submodule.c:contains_cache_at Unexecuted instantiation: bisect.c:commit_weight_at Unexecuted instantiation: bisect.c:contains_cache_at Unexecuted instantiation: bloom.c:bloom_filter_slab_at Unexecuted instantiation: commit-graph.c:commit_graph_data_slab_at Unexecuted instantiation: commit-graph.c:topo_level_slab_at Unexecuted instantiation: commit-graph.c:commit_pos_at Unexecuted instantiation: commit-reach.c:contains_cache_at Unexecuted instantiation: commit-reach.c:bit_arrays_at Unexecuted instantiation: commit-reach.c:best_branch_base_at Unexecuted instantiation: commit.c:buffer_slab_at Unexecuted instantiation: commit.c:author_date_slab_at Unexecuted instantiation: commit.c:indegree_slab_at Unexecuted instantiation: commit.c:merge_desc_slab_at Unexecuted instantiation: commit.c:contains_cache_at Unexecuted instantiation: diff-lib.c:contains_cache_at Unexecuted instantiation: fetch-pack.c:contains_cache_at Unexecuted instantiation: log-tree.c:contains_cache_at Unexecuted instantiation: merge-ort.c:contains_cache_at Unexecuted instantiation: sequencer.c:commit_todo_item_at Unexecuted instantiation: sequencer.c:contains_cache_at Unexecuted instantiation: rebase-interactive.c:commit_seen_at |
84 | | \ |
85 | | scope elemtype *slabname## _peek(struct slabname *s, \ |
86 | 0 | const struct commit *c) \ |
87 | 0 | { \ |
88 | 0 | return slabname##_at_peek(s, c, 0); \ |
89 | 0 | } \ Unexecuted instantiation: object-name.c:contains_cache_peek Unexecuted instantiation: remote.c:contains_cache_peek Unexecuted instantiation: revision_sources_peek Unexecuted instantiation: revision.c:contains_cache_peek Unexecuted instantiation: revision.c:indegree_slab_peek Unexecuted instantiation: revision.c:author_date_slab_peek Unexecuted instantiation: revision.c:saved_parents_peek Unexecuted instantiation: shallow.c:contains_cache_peek Unexecuted instantiation: shallow.c:commit_depth_peek Unexecuted instantiation: shallow.c:ref_bitmap_peek Unexecuted instantiation: submodule.c:contains_cache_peek Unexecuted instantiation: bisect.c:contains_cache_peek Unexecuted instantiation: bisect.c:commit_weight_peek Unexecuted instantiation: bloom.c:bloom_filter_slab_peek Unexecuted instantiation: commit-graph.c:commit_graph_data_slab_peek Unexecuted instantiation: commit-graph.c:topo_level_slab_peek Unexecuted instantiation: commit-graph.c:commit_pos_peek Unexecuted instantiation: commit-reach.c:contains_cache_peek Unexecuted instantiation: commit-reach.c:bit_arrays_peek Unexecuted instantiation: commit-reach.c:best_branch_base_peek Unexecuted instantiation: commit.c:buffer_slab_peek Unexecuted instantiation: commit.c:contains_cache_peek Unexecuted instantiation: commit.c:indegree_slab_peek Unexecuted instantiation: commit.c:author_date_slab_peek Unexecuted instantiation: commit.c:merge_desc_slab_peek Unexecuted instantiation: diff-lib.c:contains_cache_peek Unexecuted instantiation: fetch-pack.c:contains_cache_peek Unexecuted instantiation: log-tree.c:contains_cache_peek Unexecuted instantiation: merge-ort.c:contains_cache_peek Unexecuted instantiation: sequencer.c:contains_cache_peek Unexecuted instantiation: sequencer.c:commit_todo_item_peek Unexecuted instantiation: rebase-interactive.c:commit_seen_peek |
90 | | \ |
91 | | struct slabname |
92 | | |
93 | | /* |
94 | | * Note that this redundant forward declaration is required |
95 | | * to allow a terminating semicolon, which makes instantiations look |
96 | | * like function declarations. I.e., the expansion of |
97 | | * |
98 | | * implement_commit_slab(indegree, int, static); |
99 | | * |
100 | | * ends in 'struct indegree;'. This would otherwise |
101 | | * be a syntax error according (at least) to ISO C. It's hard to |
102 | | * catch because GCC silently parses it by default. |
103 | | */ |
104 | | |
105 | | #endif /* COMMIT_SLAB_IMPL_H */ |