| 936 | // TCallback accepts (dstIndex, quantizedValue) arguments |
| 937 | template <class TSrc, class TCallback> |
| 938 | static void QuantizeNonDefaultValues( |
| 939 | const TSrc& srcFeature, |
| 940 | const TIncrementalDenseIndexing& incrementalDenseIndexing, |
| 941 | TValueQuantizer<TSrc> valueQuantizer, |
| 942 | NPar::ILocalExecutor* localExecutor, |
| 943 | TCallback&& callback |
| 944 | ) { |
| 945 | using TValueType = typename TSrc::TValueType; |
| 946 | using TDenseSrcData = TPolymorphicArrayValuesHolder<TSrc>; |
| 947 | using TSparseSrcData = TSparsePolymorphicArrayValuesHolder<TSrc>; |
| 948 | |
| 949 | if (const auto* denseSrcFeature = dynamic_cast<const TDenseSrcData*>(&srcFeature)){ |
| 950 | if (std::get_if<TIndexedSubset<ui32>>(&incrementalDenseIndexing.SrcSubsetIndexing)) { |
| 951 | TConstArrayRef<ui32> dstIndices |
| 952 | = std::get<TIndexedSubset<ui32>>(incrementalDenseIndexing.DstIndexing); |
| 953 | |
| 954 | denseSrcFeature->GetData()->CloneWithNewSubsetIndexing( |
| 955 | &incrementalDenseIndexing.SrcSubsetIndexing |
| 956 | )->ParallelForEach( |
| 957 | [=] (ui32 i, TValueType srcValue) { |
| 958 | callback(dstIndices[i], valueQuantizer.Quantize(srcValue)); |
| 959 | }, |
| 960 | localExecutor |
| 961 | ); |
| 962 | } else { |
| 963 | denseSrcFeature->GetData()->ParallelForEach( |
| 964 | [=] (ui32 dstIdx, TValueType srcValue) { |
| 965 | callback(dstIdx, valueQuantizer.Quantize(srcValue)); |
| 966 | }, |
| 967 | localExecutor |
| 968 | ); |
| 969 | } |
| 970 | } else if (const auto* sparseSrcFeature = dynamic_cast<const TSparseSrcData*>(&srcFeature)) { |
| 971 | const auto& sparseArray = sparseSrcFeature->GetData(); |
| 972 | sparseArray.ForEachNonDefault( |
| 973 | [=] (ui32 dstIdx, TValueType srcValue) { |
| 974 | callback(dstIdx, valueQuantizer.Quantize(srcValue)); |
| 975 | } |
| 976 | ); |
| 977 | } else { |
| 978 | CB_ENSURE_INTERNAL(false, "QuantizeNonDefaultValues: unsupported src feature type"); |
| 979 | } |
| 980 | } |
| 981 | |
| 982 | template < |
| 983 | class TStoredDstValue, |
no test coverage detected