15 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
16 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
21 _AssertRepValidType ();
23 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
24 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
26 : inherited (Factory::SortedKeyedCollection_Factory<T, KEY_TYPE, TRAITS, remove_cvref_t<KEY_COMPARER>>::Default () (
27 keyExtractor, forward<KEY_COMPARER> (keyComparer)))
29 _AssertRepValidType ();
31#if !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
32 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
33 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE, ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
35 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS> and
36 not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedKeyedCollection<T, KEY_TYPE, TRAITS>>)
37 : SortedKeyedCollection{}
40 _AssertRepValidType ();
43 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
44 template <IIterableOfTo<T> ITERABLE_OF_ADDABLE, ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
46 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS>)
49 _AssertRepValidType ();
51 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
52 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER, IIterableOfTo<T> ITERABLE_OF_ADDABLE>
54 KEY_COMPARER&& keyComparer, ITERABLE_OF_ADDABLE&& src)
55 : SortedKeyedCollection{keyExtractor, forward<KEY_COMPARER> (keyComparer)}
58 _AssertRepValidType ();
60 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
61 template <IInputIterator<T> ITERATOR_OF_ADDABLE, ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
63 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS>)
64 : SortedKeyedCollection{KeyExtractorType{}, KEY_COMPARER{}}
66 this->AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
67 _AssertRepValidType ();
69 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
70 template <IInputIterator<T> ITERATOR_OF_ADDABLE, ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
72 ITERATOR_OF_ADDABLE&& end)
73 requires (IKeyedCollection_ExtractorCanBeDefaulted<T, KEY_TYPE, TRAITS>)
74 : SortedKeyedCollection{KeyExtractorType{}, forward<KEY_COMPARER> (keyComparer)}
76 this->AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
77 _AssertRepValidType ();
79 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
80 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER, IInputIterator<T> ITERATOR_OF_ADDABLE>
82 ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end)
83 : SortedKeyedCollection{keyExtractor, forward<KEY_COMPARER> (keyComparer)}
85 this->
AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (
end));
86 _AssertRepValidType ();
88 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
93 _AssertRepValidType ();
95 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
99 _AssertRepValidType ();
101 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
102 inline void SortedKeyedCollection<T, KEY_TYPE, TRAITS>::_AssertRepValidType ()
const
105 _SafeReadRepAccessor<_IRep>{
this};
108 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
109 inline auto SortedKeyedCollection<T, KEY_TYPE, TRAITS>::GetInOrderKeyComparer () const -> KeyInOrderComparerType
111 return _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetThreeWayKeyComparer ();
113 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
114 inline auto SortedKeyedCollection<T, KEY_TYPE, TRAITS>::GetThreeWayKeyComparer () const -> KeyThreeWayComparerType
116 return _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetThreeWayKeyComparer ();
118 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
119 template <
typename RESULT_CONTAINER, invocable<T> ELEMENT_MAPPER>
121 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, T>,
typename RESULT_CONTAINER::value_type> or
122 convertible_to<invoke_result_t<ELEMENT_MAPPER, T>, optional<typename RESULT_CONTAINER::value_type>>)
124 if constexpr (same_as<RESULT_CONTAINER, SortedKeyedCollection>) {
126 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper),
127 RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
130 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper));
133 template <
typename T,
typename KEY_TYPE,
typename TRAITS>
134 template <derived_from<Iterable<T>> RESULT_CONTAINER, predicate<T> INCLUDE_PREDICATE>
137 if constexpr (same_as<RESULT_CONTAINER, SortedKeyedCollection>) {
139 return inherited::template Where<RESULT_CONTAINER> (
140 forward<INCLUDE_PREDICATE> (includeIfTrue), RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
143 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 RequireNotNull(p)
#define RequireExpression(c)
nonvirtual unsigned int AddAll(ITERATOR_OF_ADDABLE &&start, ITERATOR_OF_ADDABLE2 &&end)
A SortedKeyedCollection is a KeyedCollection<T> which remains sorted (iteration produces items sorted...
nonvirtual RESULT_CONTAINER Where(INCLUDE_PREDICATE &&includeIfTrue) const
subset of this SortedKeyedCollection matching filter-function
nonvirtual RESULT_CONTAINER Map(ELEMENT_MAPPER &&elementMapper) const
'override' Iterable<>::Map () function so RESULT_CONTAINER defaults to SortedKeyedCollection,...
SortedKeyedCollection(KEY_COMPARER &&keyComparer=KEY_COMPARER{})
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.