18#include "QtCore/private/qglobal_p.h"
28constexpr T &&
Forward(
typename std::remove_reference<T>::type &t)
noexcept
30 return static_cast<T &&>(t);
34constexpr T &&
Forward(
typename std::remove_reference<T>::type &&t)
noexcept
36 static_assert(!
std::is_lvalue_reference<T>::value,
37 "template argument substituting T is an lvalue reference type");
38 return static_cast<T &&>(t);
41template <
typename ManualType,
typename ...>
44 using type = ManualType;
47template <
typename ... Types>
50template <
typename ManualType,
typename... Types>
54template<
typename ... Values>
57template <
template <
typename>
class Predicate,
59struct QuickSortFilter;
61template <
typename ... Right,
typename ... Left>
65template<
typename ... Right,
typename Middle,
typename ... Left>
71template <
template <
typename>
class Predicate,
84template <
template <
typename>
class Predicate>
90template <
typename ... Values>
93template <
typename Pivot,
typename ... Values>
96 template <
typename Left>
98 static constexpr const bool value = Left::data() <= Pivot::data();
101 template <
typename Left>
103 static constexpr const bool value = !(Left::data() <= Pivot::data());
106 using LeftSide =
typename QuickSortFilter<LessThan, QuickSortData<Values...>>::Type;
107 using RightSide =
typename QuickSortFilter<MoreThan, QuickSortData<Values...>>::Type;
109 using LeftQS =
typename QuickSort<LeftSide>::Type;
110 using RightQS =
typename QuickSort<RightSide>::Type;
112 using Type =
decltype(quickSortConcat(LeftQS{}, QuickSortData<Pivot> {}, RightQS{}));
123template <
typename ManualType =
void,
typename ... Types>
126 return {{QtPrivate::Forward<
typename QtPrivate::ArrayType<ManualType, Types...>::value_type>(t)...}};
129template<
typename ... Values>
134template<
typename ... Values>
137 return qMakeArray(Values::data() ...);
constexpr T && Forward(typename std::remove_reference< T >::type &t) noexcept
constexpr QuickSortData< Right..., Left... > quickSortConcat(QuickSortData< Right... >, QuickSortData< Left... >) noexcept
constexpr T && Forward(typename std::remove_reference< T >::type &&t) noexcept
constexpr QuickSortData< Right..., Middle, Left... > quickSortConcat(QuickSortData< Right... >, QuickSortData< Middle >, QuickSortData< Left... >) noexcept
constexpr auto qMakeArray(QtPrivate::QuickSortData< Values... >) noexcept -> decltype(qMakeArray(Values::data()...))
constexpr QtPrivate::ArrayType< ManualType, Types... > qMakeArray(Types &&... t) noexcept
static constexpr const bool value
static constexpr const bool value