Skip to content

Commit 551cf8b

Browse files
peffgitster
authored andcommitted
pack-bitmap: factor out type iterator initialization
When count_object_type() wants to iterate over the bitmap of all objects of a certain type, we have to pair up OBJ_COMMIT with bitmap->commits, and so forth. Since we're about to add more code to iterate over these bitmaps, let's pull the initialization into its own function. We can also use this to simplify traverse_bitmap_commit_list(). It accomplishes the same thing by manually passing the object type and the bitmap to show_objects_for_type(), but using our helper we just need the object type. Note there's one small code change here: previously we'd simply return zero when counting an unknown object type, and now we'll BUG(). This shouldn't matter in practice, as all of the callers pass in only usual commit/tree/blob/tag types. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent d0654dc commit 551cf8b

File tree

1 file changed

+33
-30
lines changed

1 file changed

+33
-30
lines changed

pack-bitmap.c

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -616,9 +616,35 @@ static void show_extended_objects(struct bitmap_index *bitmap_git,
616616
}
617617
}
618618

619+
static void init_type_iterator(struct ewah_iterator *it,
620+
struct bitmap_index *bitmap_git,
621+
enum object_type type)
622+
{
623+
switch (type) {
624+
case OBJ_COMMIT:
625+
ewah_iterator_init(it, bitmap_git->commits);
626+
break;
627+
628+
case OBJ_TREE:
629+
ewah_iterator_init(it, bitmap_git->trees);
630+
break;
631+
632+
case OBJ_BLOB:
633+
ewah_iterator_init(it, bitmap_git->blobs);
634+
break;
635+
636+
case OBJ_TAG:
637+
ewah_iterator_init(it, bitmap_git->tags);
638+
break;
639+
640+
default:
641+
BUG("object type %d not stored by bitmap type index", type);
642+
break;
643+
}
644+
}
645+
619646
static void show_objects_for_type(
620647
struct bitmap_index *bitmap_git,
621-
struct ewah_bitmap *type_filter,
622648
enum object_type object_type,
623649
show_reachable_fn show_reach)
624650
{
@@ -633,7 +659,7 @@ static void show_objects_for_type(
633659
if (bitmap_git->reuse_objects == bitmap_git->pack->num_objects)
634660
return;
635661

636-
ewah_iterator_init(&it, type_filter);
662+
init_type_iterator(&it, bitmap_git, object_type);
637663

638664
while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
639665
eword_t word = objects->words[i] & filter;
@@ -835,14 +861,10 @@ void traverse_bitmap_commit_list(struct bitmap_index *bitmap_git,
835861
{
836862
assert(bitmap_git->result);
837863

838-
show_objects_for_type(bitmap_git, bitmap_git->commits,
839-
OBJ_COMMIT, show_reachable);
840-
show_objects_for_type(bitmap_git, bitmap_git->trees,
841-
OBJ_TREE, show_reachable);
842-
show_objects_for_type(bitmap_git, bitmap_git->blobs,
843-
OBJ_BLOB, show_reachable);
844-
show_objects_for_type(bitmap_git, bitmap_git->tags,
845-
OBJ_TAG, show_reachable);
864+
show_objects_for_type(bitmap_git, OBJ_COMMIT, show_reachable);
865+
show_objects_for_type(bitmap_git, OBJ_TREE, show_reachable);
866+
show_objects_for_type(bitmap_git, OBJ_BLOB, show_reachable);
867+
show_objects_for_type(bitmap_git, OBJ_TAG, show_reachable);
846868

847869
show_extended_objects(bitmap_git, show_reachable);
848870
}
@@ -857,26 +879,7 @@ static uint32_t count_object_type(struct bitmap_index *bitmap_git,
857879
struct ewah_iterator it;
858880
eword_t filter;
859881

860-
switch (type) {
861-
case OBJ_COMMIT:
862-
ewah_iterator_init(&it, bitmap_git->commits);
863-
break;
864-
865-
case OBJ_TREE:
866-
ewah_iterator_init(&it, bitmap_git->trees);
867-
break;
868-
869-
case OBJ_BLOB:
870-
ewah_iterator_init(&it, bitmap_git->blobs);
871-
break;
872-
873-
case OBJ_TAG:
874-
ewah_iterator_init(&it, bitmap_git->tags);
875-
break;
876-
877-
default:
878-
return 0;
879-
}
882+
init_type_iterator(&it, bitmap_git, type);
880883

881884
while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
882885
eword_t word = objects->words[i++] & filter;

0 commit comments

Comments
 (0)