616
}
617
}
618
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
+
646
static void show_objects_for_type(
647
struct bitmap_index *bitmap_git,
621
- struct ewah_bitmap *type_filter,
648
enum object_type object_type,
649
show_reachable_fn show_reach)
650
{
659
if (bitmap_git->reuse_objects == bitmap_git->pack->num_objects)
660
return;
661
636
- ewah_iterator_init(&it, type_filter);
662
+ init_type_iterator(&it, bitmap_git, object_type);
663
664
while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
665
eword_t word = objects->words[i] & filter;
861
{
862
assert(bitmap_git->result);
863
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);
868
869
show_extended_objects(bitmap_git, show_reachable);
870
}
879
struct ewah_iterator it;
880
eword_t filter;
881
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);
883
884
while (i < objects->word_alloc && ewah_iterator_next(&filter, &it)) {
885
eword_t word = objects->words[i++] & filter;