| 958 | |
| 959 | template <class TDst, class TSrcArrayLike, class TSize=size_t> |
| 960 | inline TVector<TDst> GetSubset( |
| 961 | const TSrcArrayLike& srcArrayLike, |
| 962 | const TArraySubsetIndexing<TSize>& subsetIndexing, |
| 963 | TMaybe<NPar::ILocalExecutor*> localExecutor = Nothing(), // use parallel implementation if defined |
| 964 | TMaybe<TSize> approximateBlockSize = Nothing() // for parallel version |
| 965 | ) { |
| 966 | TVector<TDst> dst; |
| 967 | dst.yresize(subsetIndexing.Size()); |
| 968 | |
| 969 | TArraySubset<const TSrcArrayLike, TSize> arraySubset(&srcArrayLike, &subsetIndexing); |
| 970 | if (localExecutor.Defined()) { |
| 971 | arraySubset.ParallelForEach( |
| 972 | [&dst](TSize idx, TDst srcElement) { dst[idx] = srcElement; }, |
| 973 | *localExecutor, |
| 974 | approximateBlockSize |
| 975 | ); |
| 976 | } else { |
| 977 | arraySubset.ForEach( |
| 978 | [&dst](TSize idx, TDst srcElement) { dst[idx] = srcElement; } |
| 979 | ); |
| 980 | } |
| 981 | |
| 982 | return dst; |
| 983 | } |
| 984 | |
| 985 | template <class T, class TMaybePolicy, class TSize=size_t> |
| 986 | inline TMaybe<TVector<T>, TMaybePolicy> GetSubsetOfMaybeEmpty( |