@@ -784,40 +784,16 @@ void search_knn_hamming_per_invlist(
784784 }
785785}
786786
787- struct Run_search_knn_hamming_per_invlist {
788- using T = void ;
789-
790- template <class HammingComputer , class ... Types>
791- void f (Types... args) {
792- search_knn_hamming_per_invlist<HammingComputer>(args...);
793- }
794- };
795-
796- template <bool store_pairs>
797- struct Run_search_knn_hamming_count {
798- using T = void ;
799-
800- template <class HammingComputer , class ... Types>
801- void f (Types... args) {
802- search_knn_hamming_count<HammingComputer, store_pairs>(args...);
803- }
804- };
805-
806- struct BuildScanner {
807- using T = BinaryInvertedListScanner*;
808-
809- template <class HammingComputer >
810- T f (size_t code_size, bool store_pairs) {
811- return new IVFBinaryScannerL2<HammingComputer>(code_size, store_pairs);
812- }
813- };
814-
815787} // anonymous namespace
816788
817789BinaryInvertedListScanner* IndexBinaryIVF::get_InvertedListScanner (
818790 bool store_pairs) const {
819- BuildScanner bs;
820- return dispatch_HammingComputer (code_size, bs, code_size, store_pairs);
791+ return with_HammingComputer (
792+ code_size,
793+ [&]<class HammingComputer >() -> BinaryInvertedListScanner* {
794+ return new IVFBinaryScannerL2<HammingComputer>(
795+ code_size, store_pairs);
796+ });
821797}
822798
823799void IndexBinaryIVF::search_preassigned (
@@ -831,23 +807,23 @@ void IndexBinaryIVF::search_preassigned(
831807 bool store_pairs,
832808 const IVFSearchParameters* params) const {
833809 if (per_invlist_search) {
834- Run_search_knn_hamming_per_invlist r;
835- // clang-format off
836- dispatch_HammingComputer (
837- code_size, r, this , n, x, k,
838- cidx, cdis, dis, idx, store_pairs, params);
839- // clang-format on
810+ with_HammingComputer (code_size, [&]<class HammingComputer >() {
811+ search_knn_hamming_per_invlist<HammingComputer>(
812+ this , n, x, k, cidx, cdis, dis, idx, store_pairs, params);
813+ });
840814 } else if (use_heap) {
841815 search_knn_hamming_heap (
842816 this , n, x, k, cidx, cdis, dis, idx, store_pairs, params);
843817 } else if (store_pairs) { // !use_heap && store_pairs
844- Run_search_knn_hamming_count<true > r;
845- dispatch_HammingComputer (
846- code_size, r, this , n, x, cidx, k, dis, idx, params);
818+ with_HammingComputer (code_size, [&]<class HammingComputer >() {
819+ search_knn_hamming_count<HammingComputer, true >(
820+ this , n, x, cidx, k, dis, idx, params);
821+ });
847822 } else { // !use_heap && !store_pairs
848- Run_search_knn_hamming_count<false > r;
849- dispatch_HammingComputer (
850- code_size, r, this , n, x, cidx, k, dis, idx, params);
823+ with_HammingComputer (code_size, [&]<class HammingComputer >() {
824+ search_knn_hamming_count<HammingComputer, false >(
825+ this , n, x, cidx, k, dis, idx, params);
826+ });
851827 }
852828}
853829
0 commit comments