Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
SortedMapping_stdmap.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 "Stroika/Foundation/Containers/SortedMapping.h"
9
10#include <map>
11
12#ifndef _Stroika_Foundation_Containers_Concrete_SortedMapping_stdmap_h_
13#define _Stroika_Foundation_Containers_Concrete_SortedMapping_stdmap_h_
14
15/**
16 * \file
17 *
18 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
19 *
20 */
22
23 using Common::IInOrderComparer;
24
25 /**
26 * \brief SortedMapping_stdmap<KEY_TYPE,MAPPED_VALUE_TYPE> is an std::map-based concrete implementation of the SortedMapping<KEY_TYPE,MAPPED_VALUE_TYPE> container pattern.
27 *
28 * \note Runtime performance/complexity:
29 * Very good low overhead implementation
30 *
31 * o size () is constant complexity
32 * o Uses Memory::BlockAllocatorOrStdAllocatorAsAppropriate
33 * o O (log N) adds, removes and lookups
34 *
35 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
36 */
37 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
38 class SortedMapping_stdmap : public SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE> {
39 private:
41
42 public:
43 using KeyEqualsCompareFunctionType = typename inherited::KeyEqualsCompareFunctionType;
44 using KeyThreeWayComparerType = typename inherited::KeyThreeWayComparerType;
45 using value_type = typename inherited::value_type;
46 using key_type = typename inherited::key_type;
47 using mapped_type = typename inherited::mapped_type;
48
49 public:
50 /**
51 * \brief STDMAP is std::map<> that can be used inside SortedMapping_stdmap
52 */
53 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER = less<KEY_TYPE>>
54 using STDMAP = map<KEY_TYPE, MAPPED_VALUE_TYPE, KEY_INORDER_COMPARER,
56
57 public:
58 /**
59 * \see docs on SortedMapping<> constructor
60 */
62 requires (totally_ordered<KEY_TYPE>);
63 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER>
64 explicit SortedMapping_stdmap (KEY_INORDER_COMPARER&& inorderComparer);
65 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER>
67 SortedMapping_stdmap (SortedMapping_stdmap&&) noexcept = default;
68 SortedMapping_stdmap (const SortedMapping_stdmap&) noexcept = default;
69 SortedMapping_stdmap (const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src)
70 requires (totally_ordered<KEY_TYPE>);
71 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER>
72 SortedMapping_stdmap (KEY_INORDER_COMPARER&& inorderComparer, const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
73 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
74 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedMapping_stdmap<KEY_TYPE, MAPPED_VALUE_TYPE>>)
75 explicit SortedMapping_stdmap (ITERABLE_OF_ADDABLE&& src)
76 requires (totally_ordered<KEY_TYPE>)
77#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
79 {
80 AssertRepValidType_ ();
81 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
82 AssertRepValidType_ ();
83 }
84#endif
85 ;
86 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
87 SortedMapping_stdmap (KEY_INORDER_COMPARER&& inorderComparer, ITERABLE_OF_ADDABLE&& src);
88 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
89 SortedMapping_stdmap (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end)
90 requires (totally_ordered<KEY_TYPE>);
91 template <IInOrderComparer<KEY_TYPE> KEY_INORDER_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
92 SortedMapping_stdmap (KEY_INORDER_COMPARER&& inorderComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
93
94 public:
95 /**
96 */
97 nonvirtual SortedMapping_stdmap& operator= (SortedMapping_stdmap&&) noexcept = default;
98 nonvirtual SortedMapping_stdmap& operator= (const SortedMapping_stdmap&) = default;
99
100 private:
101 using IImplRepBase_ = typename SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE>::_IRep;
102 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IInOrderComparer<KEY_TYPE>) KEY_INORDER_COMPARER>
103 class Rep_;
104
105 private:
106 nonvirtual void AssertRepValidType_ () const;
107 };
108
109}
110
111/*
112 ********************************************************************************
113 ******************************* Implementation Details *************************
114 ********************************************************************************
115 */
116#include "SortedMapping_stdmap.inl"
117
118#endif /*_Stroika_Foundation_Containers_Concrete_SortedMapping_stdmap_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
SortedMapping_stdmap<KEY_TYPE,MAPPED_VALUE_TYPE> is an std::map-based concrete implementation of the ...
map< KEY_TYPE, MAPPED_VALUE_TYPE, KEY_INORDER_COMPARER, Memory::BlockAllocatorOrStdAllocatorAsAppropriate< pair< const key_type, mapped_type >, sizeof(value_type)<=1024 > > STDMAP
STDMAP is std::map<> that can be used inside SortedMapping_stdmap.
Common::ComparisonRelationDeclaration< Common::ComparisonRelationType::eEquals, function< bool(ArgByValueType< key_type >, ArgByValueType< key_type >)> > KeyEqualsCompareFunctionType
Definition Mapping.h:159
nonvirtual unsigned int AddAll(ITERABLE_OF_ADDABLE &&items, AddReplaceMode addReplaceMode=AddReplaceMode::eAddReplaces)
typename inherited::value_type value_type
Definition Mapping.h:139
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.