19 #ifndef viskores_cont_tbb_internal_ParallelSort_h
20 #define viskores_cont_tbb_internal_ParallelSort_h
29 #include <viskores/cont/tbb/internal/ParallelSortTBB.hxx>
31 #include <type_traits>
48 template <
typename T,
typename Container,
class BinaryCompare>
50 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
56 template <
typename HandleType,
class BinaryCompare>
58 BinaryCompare binary_compare,
59 viskores::cont::internal::radix::PSortTag)
65 IteratorsType iterators(arrayPortal);
67 internal::WrappedBinaryOperator<bool, BinaryCompare> wrappedCompare(binary_compare);
72 template <
typename T,
typename StorageT,
class BinaryCompare>
74 BinaryCompare binary_compare,
75 viskores::cont::internal::radix::RadixSortTag)
77 using namespace viskores::cont::internal::radix;
78 auto c = get_std_compare(binary_compare, T{});
82 valuesPortal.GetIteratorBegin(),
static_cast<std::size_t
>(values.
GetNumberOfValues()), c);
86 template <
typename T,
typename Container,
class BinaryCompare>
89 using namespace viskores::cont::internal::radix;
90 using SortAlgorithmTag =
typename sort_tag_type<T, Container, BinaryCompare>::type;
96 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
99 BinaryCompare binary_compare,
100 viskores::cont::internal::radix::PSortTag)
102 using namespace viskores::cont::internal::radix;
104 constexpr
bool larger_than_64bits =
sizeof(U) >
sizeof(
viskores::Int64);
105 if (larger_than_64bits)
114 IndexType indexArray;
115 ValueType valuesScattered;
130 viskores::cont::internal::KeyCompare<T, viskores::Id, BinaryCompare>(binary_compare),
146 tbb::CopyPortals(inputPortal, outputPortal, 0, 0, valuesScattered.GetNumberOfValues());
156 viskores::cont::internal::KeyCompare<T, U, BinaryCompare>(binary_compare),
162 template <
typename T,
typename StorageT,
typename StorageU,
class BinaryCompare>
165 BinaryCompare binary_compare,
166 viskores::cont::internal::radix::RadixSortTag)
168 using namespace viskores::cont::internal::radix;
169 auto c = get_std_compare(binary_compare, T{});
174 valuesPortal.GetIteratorBegin(),
180 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
183 BinaryCompare binary_compare,
184 viskores::cont::internal::radix::RadixSortTag)
191 IndexType indexArray;
192 ValueType valuesScattered;
213 viskores::cont::internal::KeyCompare<T, viskores::Id, BinaryCompare>(binary_compare),
214 viskores::cont::internal::radix::PSortTag{});
230 tbb::CopyPortals(inputPortal, outputPortal, 0, 0, valuesScattered.GetNumberOfValues());
235 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
238 BinaryCompare binary_compare)
240 using namespace viskores::cont::internal::radix;
241 using SortAlgorithmTag =
242 typename sortbykey_tag_type<T, U, StorageT, StorageU, BinaryCompare>::type;
250 #endif // viskores_cont_tbb_internal_ParallelSort_h