16 requires (ITotallyOrderingComparer<less<T>, T>)
19 _AssertRepValidType ();
22 template <ITotallyOrderingComparer<T> COMPARER>
23 inline SortedSet<T>::SortedSet (COMPARER&& comparer)
24 : inherited{Factory::SortedSet_Factory<T, remove_cvref_t<COMPARER>>::Default () (forward<COMPARER> (comparer))}
26 _AssertRepValidType ();
32 _AssertRepValidType ();
38 _AssertRepValidType ();
42 requires (ITotallyOrderingComparer<less<T>, T>)
46 _AssertRepValidType ();
49 template <ITotallyOrderingComparer<T> COMPARER>
51 : SortedSet{forward<COMPARER> (comparer)}
54 _AssertRepValidType ();
56#if !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
58 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE>
60 requires (ITotallyOrderingComparer<less<T>, T> and not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedSet<T>>)
63 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
64 _AssertRepValidType ();
68 template <ITotallyOrderingComparer<T> COMPARER, IIterableOfTo<T> ITERABLE_OF_ADDABLE>
70 : SortedSet (forward<COMPARER> (comparer))
72 this->
AddAll (forward<ITERABLE_OF_ADDABLE> (src));
73 _AssertRepValidType ();
76 template <IInputIterator<T> ITERATOR_OF_ADDABLE, sentinel_for<remove_cvref_t<ITERATOR_OF_ADDABLE>> ITERATOR_OF_ADDABLE2>
78 requires (ITotallyOrderingComparer<less<T>, T>)
81 this->AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE2> (end));
82 _AssertRepValidType ();
85 template <ITotallyOrderingComparer<T> COMPARER, IInputIterator<T> ITERATOR_OF_ADDABLE>
87 : SortedSet{forward<COMPARER> (comparer)}
89 this->
AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (
end));
90 _AssertRepValidType ();
93 inline void SortedSet<T>::_AssertRepValidType ()
const
96 _SafeReadRepAccessor<_IRep>{
this};
104 template <
typename T>
107 return _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetElementThreeWayComparer ();
109 template <
typename T>
114 template <
typename T>
115 template <
typename RESULT_CONTAINER, invocable<T> ELEMENT_MAPPER>
117 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, T>,
typename RESULT_CONTAINER::value_type> or
118 convertible_to<invoke_result_t<ELEMENT_MAPPER, T>, optional<typename RESULT_CONTAINER::value_type>>)
120 if constexpr (same_as<RESULT_CONTAINER, SortedSet>) {
122 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper),
123 RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
126 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper));
129 template <
typename T>
130 template <derived_from<Iterable<T>> RESULT_CONTAINER, predicate<T> INCLUDE_PREDICATE>
131 inline RESULT_CONTAINER SortedSet<T>::Where (INCLUDE_PREDICATE&& includeIfTrue)
const
133 if constexpr (same_as<RESULT_CONTAINER, SortedSet>) {
135 return inherited::template Where<RESULT_CONTAINER> (
136 forward<INCLUDE_PREDICATE> (includeIfTrue), RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
139 return inherited::template Where<RESULT_CONTAINER> (forward<INCLUDE_PREDICATE> (includeIfTrue));
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
#define RequireExpression(c)
nonvirtual void AddAll(ITERATOR_OF_ADDABLE &&start, ITERATOR_OF_ADDABLE2 &&end)
nonvirtual RESULT_CONTAINER Map(ELEMENT_MAPPER &&elementMapper) const
'override' Iterable<>::Map () function so RESULT_CONTAINER defaults to SortedSet, and improve that ca...
nonvirtual ElementInOrderComparerType GetElementInOrderComparer() const
nonvirtual ElementThreeWayComparerType GetElementThreeWayComparer() const
nonvirtual strong_ordering operator<=>(const SortedSet &rhs) const
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.
Use this to wrap any basic comparer, and produce a Less comparer.