15 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
17 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE>)
20 _AssertRepValidType ();
22 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
23 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
24 inline SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE>::SortedAssociation (KEY_COMPARER&& comparer)
25 : inherited{Factory::SortedAssociation_Factory<KEY_TYPE, MAPPED_VALUE_TYPE, remove_cvref_t<KEY_COMPARER>>::Default () (
26 forward<KEY_COMPARER> (comparer))}
28 _AssertRepValidType ();
30 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
32 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE>)
36 _AssertRepValidType ();
38 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
39 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
41 const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src)
42 : SortedAssociation{forward<KEY_COMPARER> (comparer)}
45 _AssertRepValidType ();
47#if !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
48 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
49 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
51 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE> and
52 not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE>>)
55 _AssertRepValidType ();
56 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
57 _AssertRepValidType ();
60 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
61 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
63 : SortedAssociation{forward<KEY_COMPARER> (comparer)}
65 _AssertRepValidType ();
66 this->
AddAll (forward<ITERABLE_OF_ADDABLE> (src));
67 _AssertRepValidType ();
69 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
70 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
72 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE>)
75 this->AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
76 _AssertRepValidType ();
78 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
79 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
81 : SortedAssociation{forward<KEY_COMPARER> (comparer)}
83 this->
AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (
end));
84 _AssertRepValidType ();
86 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
90 _AssertRepValidType ();
92 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
96 _AssertRepValidType ();
98 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
99 inline void SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE>::_AssertRepValidType ()
const
102 [[maybe_unused]] _SafeReadRepAccessor<_IRep> ignored{
this};
105 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
109 _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetKeyThreeWayComparer ()};
111 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
114 return _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetKeyThreeWayComparer ();
116 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
117 template <
typename RESULT_CONTAINER, invocable<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ELEMENT_MAPPER>
119 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>,
typename RESULT_CONTAINER::value_type> or
120 convertible_to<invoke_result_t<ELEMENT_MAPPER, KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>, optional<typename RESULT_CONTAINER::value_type>>)
122 if constexpr (same_as<RESULT_CONTAINER, SortedAssociation>) {
124 return inherited::template Where<RESULT_CONTAINER> (
125 forward<ELEMENT_MAPPER> (elementMapper), RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
128 return inherited::template Where<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper));
131 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
132 template <derived_from<Iterable<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>> RESULT_CONTAINER,
typename INCLUDE_PREDICATE>
134 requires (predicate<INCLUDE_PREDICATE, KEY_TYPE> or predicate<INCLUDE_PREDICATE, KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>)
136 if constexpr (same_as<RESULT_CONTAINER, SortedAssociation>) {
138 return inherited::template Where<RESULT_CONTAINER> (
139 forward<INCLUDE_PREDICATE> (includeIfTrue), RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
142 return inherited::template Where<RESULT_CONTAINER> (forward<INCLUDE_PREDICATE> (includeIfTrue));
145 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
#define RequireExpression(c)
nonvirtual void AddAll(ITERABLE_OF_ADDABLE &&items)
nonvirtual strong_ordering operator<=>(const SortedAssociation &rhs) const
nonvirtual KeyThreeWayComparerType GetKeyThreeWayComparer() const
nonvirtual RESULT_CONTAINER Where(INCLUDE_PREDICATE &&includeIfTrue) const
subset of this SortedAssociation matching filter-function
nonvirtual RESULT_CONTAINER Map(ELEMENT_MAPPER &&elementMapper) const
'override' Iterable<>::Map () function so RESULT_CONTAINER defaults to SortedAssociation,...
nonvirtual KeyInOrderComparerType GetKeyInOrderComparer() 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.
Use this to wrap a basic (ITotallyOrderingComparer) comparer, and produce a Three-Way comparer.