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 SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE>::SortedMapping (KEY_COMPARER&& keyComparer)
25 : inherited{Factory::SortedMapping_Factory<KEY_TYPE, MAPPED_VALUE_TYPE, remove_cvref_t<KEY_COMPARER>>::Default () (forward<KEY_COMPARER> (keyComparer))}
27 _AssertRepValidType ();
29 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
31 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE>)
35 _AssertRepValidType ();
37 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
38 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER>
40 const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src)
41 : SortedMapping{forward<KEY_COMPARER> (keyComparer)}
44 _AssertRepValidType ();
46#if !qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
47 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
48 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
50 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE> and
51 not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE>>)
54 _AssertRepValidType ();
55 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
56 _AssertRepValidType ();
59 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
60 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
62 : SortedMapping{forward<KEY_COMPARER> (keyComparer)}
64 _AssertRepValidType ();
65 this->
AddAll (forward<ITERABLE_OF_ADDABLE> (src));
66 _AssertRepValidType ();
68 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
69 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
71 requires (ITotallyOrderingComparer<less<KEY_TYPE>, KEY_TYPE>)
74 this->AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (end));
75 _AssertRepValidType ();
77 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
78 template <ITotallyOrderingComparer<KEY_TYPE> KEY_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
80 : SortedMapping{forward<KEY_COMPARER> (keyComparer)}
82 this->
AddAll (forward<ITERATOR_OF_ADDABLE> (start), forward<ITERATOR_OF_ADDABLE> (
end));
83 _AssertRepValidType ();
85 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
89 _AssertRepValidType ();
91 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
95 _AssertRepValidType ();
97 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
98 inline void SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE>::_AssertRepValidType ()
const
101 [[maybe_unused]] _SafeReadRepAccessor<_IRep> ignored{
this};
104 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
108 _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetKeyThreeWayComparer ()};
110 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
113 return _SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().GetKeyThreeWayComparer ();
115 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
116 template <
typename RESULT_CONTAINER, invocable<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ELEMENT_MAPPER>
118 requires (convertible_to<invoke_result_t<ELEMENT_MAPPER, KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>,
typename RESULT_CONTAINER::value_type> or
119 convertible_to<invoke_result_t<ELEMENT_MAPPER, KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>, optional<typename RESULT_CONTAINER::value_type>>)
121 if constexpr (same_as<RESULT_CONTAINER, SortedMapping>) {
123 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper),
124 RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
127 return inherited::template Map<RESULT_CONTAINER> (forward<ELEMENT_MAPPER> (elementMapper));
130 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
131 template <derived_from<Iterable<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>> RESULT_CONTAINER,
typename INCLUDE_PREDICATE>
133 requires (predicate<INCLUDE_PREDICATE, KEY_TYPE> or predicate<INCLUDE_PREDICATE, KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>)
135 if constexpr (same_as<RESULT_CONTAINER, SortedMapping>) {
137 return inherited::template Where<RESULT_CONTAINER> (
138 forward<INCLUDE_PREDICATE> (includeIfTrue), RESULT_CONTAINER{_SafeReadRepAccessor<_IRep>{
this}._ConstGetRep ().CloneEmpty ()});
141 return inherited::template Where<RESULT_CONTAINER> (forward<INCLUDE_PREDICATE> (includeIfTrue));
144 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
150 return SeqCmp{}(*
this, rhs);
#define qStroika_Foundation_Debug_AssertionsChecked
The qStroika_Foundation_Debug_AssertionsChecked flag determines if assertions are checked and validat...
#define RequireExpression(c)
nonvirtual unsigned int AddAll(ITERABLE_OF_ADDABLE &&items, AddReplaceMode addReplaceMode=AddReplaceMode::eAddReplaces)
nonvirtual strong_ordering operator<=>(const SortedMapping &rhs) const
nonvirtual RESULT_CONTAINER Where(INCLUDE_PREDICATE &&includeIfTrue) const
subset of this SortedMapping matching filter-function
nonvirtual KeyInOrderComparerType GetKeyInOrderComparer() const
nonvirtual RESULT_CONTAINER Map(ELEMENT_MAPPER &&elementMapper) const
'override' Iterable<>::Map () function so RESULT_CONTAINER defaults to SortedMapping,...
nonvirtual KeyThreeWayComparerType GetKeyThreeWayComparer() 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.