14 template <
typename T,
typename TRAITS>
19 _AssertRepValidType ();
21 template <
typename T,
typename TRAITS>
22 template <Common::ITotallyOrderingComparer<T> COMPARER>
23 inline SortedMultiSet<T, TRAITS>::SortedMultiSet (COMPARER&& comparer)
24 : inherited{Factory::SortedMultiSet_Factory<T, TRAITS, remove_cvref_t<COMPARER>>::Default () (forward<COMPARER> (comparer))}
26 _AssertRepValidType ();
28 template <
typename T,
typename TRAITS>
32 _AssertRepValidType ();
34 template <
typename T,
typename TRAITS>
38 _AssertRepValidType ();
40 template <
typename T,
typename TRAITS>
42 requires (Common::ITotallyOrderingComparer<less<T>, T>)
46 _AssertRepValidType ();
48 template <
typename T,
typename TRAITS>
49 template <Common::ITotallyOrderingComparer<T> COMPARER>
51 : SortedMultiSet{forward<COMPARER> (comparer)}
54 _AssertRepValidType ();
56 template <
typename T,
typename TRAITS>
58 requires (Common::ITotallyOrderingComparer<less<T>, T>)
62 _AssertRepValidType ();
64 template <
typename T,
typename TRAITS>
65 template <Common::ITotallyOrderingComparer<T> COMPARER>
67 : SortedMultiSet{forward<COMPARER> (comparer)}
70 _AssertRepValidType ();
72#if !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
73 template <
typename T,
typename TRAITS>
74 template <IIterableOfTo<
typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
76 requires (Common::ITotallyOrderingComparer<less<T>, T> and not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedMultiSet<T, TRAITS>>)
79 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
80 _AssertRepValidType ();
83 template <
typename T,
typename TRAITS>
84 template <Common::ITotallyOrderingComparer<T> COMPARER, IIterableOfTo<
typename TRAITS::CountedValueType> ITERABLE_OF_ADDABLE>
86 : SortedMultiSet{forward<COMPARER> (comparer)}
88 this->
AddAll (forward<ITERABLE_OF_ADDABLE> (src));
89 _AssertRepValidType ();
91 template <
typename T,
typename TRAITS>
92 template <IInputIterator<
typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE>
94 requires (Common::ITotallyOrderingComparer<less<T>, T>)
97 AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
98 _AssertRepValidType ();
100 template <
typename T,
typename TRAITS>
101 template <IInputIterator<
typename TRAITS::CountedValueType> COMPARER, IInputIterator<
typename TRAITS::CountedValueType> ITERATOR_OF_ADDABLE>
105 AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
106 _AssertRepValidType ();
108 template <
typename T,
typename TRAITS>
109 inline void SortedMultiSet<T, TRAITS>::_AssertRepValidType ()
const
112 _SafeReadRepAccessor<_IRep>{
this};
115 template <
typename T,
typename TRAITS>
119 _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetElementThreeWayComparer ()};
121 template <
typename T,
typename TRAITS>
124 return _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetElementThreeWayComparer ();
126 template <
typename T,
typename TRAITS>
127 template <
typename RESULT_CONTAINER, invocable<T> ELEMENT_MAPPER>
129 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, typename TRAITS::CountedValueType>,
typename RESULT_CONTAINER::value_type> or
130 convertible_to<invoke_result_t<ELEMENT_MAPPER, typename TRAITS::CountedValueType>, optional<typename RESULT_CONTAINER::value_type>>)
132 if constexpr (same_as<RESULT_CONTAINER, SortedMultiSet>) {
134 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper),
135 RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
138 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper));
141 template <
typename T,
typename TRAITS>
142 template <derived_from<Iterable<
typename TRAITS::CountedValueType>> RESULT_CONTAINER, predicate<
typename TRAITS::CountedValueType> INCLUDE_PREDICATE>
145 if constexpr (same_as<RESULT_CONTAINER, SortedMultiSet>) {
147 return inherited::template Map<RESULT_CONTAINER> (forward<INCLUDE_PREDICATE> (includeIfTrue),
148 RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
151 return inherited::template Where<RESULT_CONTAINER> (forward<INCLUDE_PREDICATE> (includeIfTrue));
154 template <
typename T,
typename TRAITS>
#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)
Use this to wrap any basic comparer, and produce a Less comparer.