Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
SortedAssociation_stdmultimap.h
Go to the documentation of this file.
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5// Moved #includes outside #include guard to avoid deadly embrace
6#include "Stroika/Foundation/StroikaPreComp.h"
7
8#include <map>
9
10#include "Stroika/Foundation/Containers/SortedAssociation.h"
11
12#ifndef _Stroika_Foundation_Containers_Concrete_SortedAssociation_stdmultimap_h_
13#define _Stroika_Foundation_Containers_Concrete_SortedAssociation_stdmultimap_h_
14
15/**
16 * \file
17 *
18 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
19 *
20 */
22
23 /**
24 * \brief SortedAssociation_stdmultimap<KEY_TYPE,MAPPED_VALUE_TYPE> is an std::map-based concrete implementation of the SortedAssociation<KEY_TYPE,MAPPED_VALUE_TYPE> container pattern.
25 *
26 * \note Runtime performance/complexity:
27 * Very good low overhead implementation
28 *
29 * o size () is constant complexity
30 * o Uses Memory::BlockAllocatorOrStdAllocatorAsAppropriate
31 *
32 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
33 */
34 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
35 class SortedAssociation_stdmultimap : public SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE> {
36 private:
38
39 public:
40 using KeyEqualsCompareFunctionType = typename inherited::KeyEqualsCompareFunctionType;
41 using KeyThreeWayComparerType = typename inherited::KeyThreeWayComparerType;
42 using value_type = typename inherited::value_type;
43 using key_type = typename inherited::key_type;
44 using mapped_type = typename inherited::mapped_type;
45
46 public:
47 /**
48 * \brief STDMULTIMAP is std::multimap<> that can be used inside SortedAssociation_stdmultimap
49 */
50 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER = less<key_type>>
52 multimap<KEY_TYPE, MAPPED_VALUE_TYPE, KEY_INORDER_COMPARER,
54
55 public:
56 /**
57 * \see docs on SortedAssociation<> constructor
58 */
60 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER>
61 explicit SortedAssociation_stdmultimap (KEY_INORDER_COMPARER&& inorderComparer);
62 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER>
66 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER>
67 SortedAssociation_stdmultimap (KEY_INORDER_COMPARER&& inorderComparer, const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
68 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
69 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedAssociation_stdmultimap<KEY_TYPE, MAPPED_VALUE_TYPE>>)
70 explicit SortedAssociation_stdmultimap (ITERABLE_OF_ADDABLE&& src)
71#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
73 {
74 AssertRepValidType_ ();
75 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
76 AssertRepValidType_ ();
77 }
78#endif
79 ;
80 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
81 SortedAssociation_stdmultimap (KEY_INORDER_COMPARER&& inorderComparer, ITERABLE_OF_ADDABLE&& src);
82 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
83 SortedAssociation_stdmultimap (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
84 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
85 SortedAssociation_stdmultimap (KEY_INORDER_COMPARER&& inorderComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
86
87 public:
88 /**
89 */
90 nonvirtual SortedAssociation_stdmultimap& operator= (SortedAssociation_stdmultimap&&) noexcept = default;
91 nonvirtual SortedAssociation_stdmultimap& operator= (const SortedAssociation_stdmultimap&) = default;
92
93 private:
94 using IImplRepBase_ = typename SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE>::_IRep;
95 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IInOrderComparer<KEY_TYPE>) KEY_INORDER_COMPARER>
96 class Rep_;
97
98 private:
99 nonvirtual void AssertRepValidType_ () const;
100 };
101
102}
103
104/*
105 ********************************************************************************
106 ******************************* Implementation Details *************************
107 ********************************************************************************
108 */
109#include "SortedAssociation_stdmultimap.inl"
110
111#endif /*_Stroika_Foundation_Containers_Concrete_SortedAssociation_stdmultimap_h_ */
conditional_t< qStroika_Foundation_Memory_PreferBlockAllocation and andTrueCheck, BlockAllocator< T >, std::allocator< T > > BlockAllocatorOrStdAllocatorAsAppropriate
for type T, either use BlockAllocator<T>, or std::allocator
nonvirtual void AddAll(ITERABLE_OF_ADDABLE &&items)
typename inherited::value_type value_type
SortedAssociation_stdmultimap<KEY_TYPE,MAPPED_VALUE_TYPE> is an std::map-based concrete implementatio...
multimap< KEY_TYPE, MAPPED_VALUE_TYPE, KEY_INORDER_COMPARER, Memory::BlockAllocatorOrStdAllocatorAsAppropriate< pair< const key_type, mapped_type >, sizeof(value_type)<=1024 > > STDMULTIMAP
STDMULTIMAP is std::multimap<> that can be used inside SortedAssociation_stdmultimap.
Common::ComparisonRelationDeclaration< Common::ComparisonRelationType::eThreeWayCompare, function< strong_ordering(ArgByValueType< KEY_TYPE >, ArgByValueType< KEY_TYPE >)> > KeyThreeWayComparerType
generic eThreeWayCompare comparer (function) object for KEY_TYPE of the association.
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.