Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
SortedMapping_SkipList.h
Go to the documentation of this file.
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#ifndef _Stroika_Foundation_Containers_Concrete_SortedMapping_SkipList_h_
5#define _Stroika_Foundation_Containers_Concrete_SortedMapping_SkipList_h_
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
9#include "Stroika/Foundation/Containers/DataStructures/SkipList.h"
11#include "Stroika/Foundation/Containers/SortedMapping.h"
12
13/**
14 * \file
15 *
16 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
17 *
18 */
19
21
22 using Common::IThreeWayComparer;
23
24 /**
25 * \brief SortedMapping_SkipList<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an SkipList-based concrete implementation of the Mapping<KEY_TYPE, MAPPED_VALUE_TYPE, typename TRAITS::MappingTraitsType> container pattern.
26 *
27 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
28 */
29 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
31 : public Private::SkipListBasedContainer<SortedMapping_SkipList<KEY_TYPE, MAPPED_VALUE_TYPE>, SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE>, true> {
32 private:
33 using inherited =
35
36 public:
37 using KeyEqualsCompareFunctionType = typename inherited::KeyEqualsCompareFunctionType;
38 using KeyThreeWayComparerType = typename inherited::KeyThreeWayComparerType;
39 using key_type = typename inherited::key_type;
40 using value_type = typename inherited::value_type;
41 using mapped_type = typename inherited::mapped_type;
42
43 public:
44 /**
45 * AddOrExtendOrReplaceMode::eAddReplaces is the most common behavior for Mapping, so default to that in SkipList, and special case
46 * AddOrExtendOrReplaceMode::eAddIfMissing.
47 */
48 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER = compare_three_way>
50
51 /**
52 * \brief SKIPLIST is SkipList that can be used inside SortedMapping_SkipList
53 */
54 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER = compare_three_way>
56
57 public:
58 /**
59 * \see docs on Mapping<> constructor, except that KEY_EQUALS_COMPARER is replaced with KEY_THREEWAY_COMPARER and EqualsComparer is replaced by IInOrderComparer
60 * and added SortedMapping_SkipList (SKIPLIST<>&& src)
61 */
63 requires (three_way_comparable<KEY_TYPE>);
64 template <IThreeWayComparer<KEY_TYPE> KEY_THREEWAY_COMPARER>
66 template <IThreeWayComparer<KEY_TYPE> KEY_THREEWAY_COMPARER>
67 explicit SortedMapping_SkipList (KEY_THREEWAY_COMPARER&& keyComparer);
69 SortedMapping_SkipList (const SortedMapping_SkipList&) noexcept = default;
70 SortedMapping_SkipList (const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src)
71 requires (three_way_comparable<KEY_TYPE>);
72 template <IThreeWayComparer<KEY_TYPE> KEY_THREEWAY_COMPARER>
73 SortedMapping_SkipList (KEY_THREEWAY_COMPARER&& keyComparer, const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
74 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
75 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedMapping_SkipList<KEY_TYPE, MAPPED_VALUE_TYPE>>)
76 explicit SortedMapping_SkipList (ITERABLE_OF_ADDABLE&& src)
77 requires (three_way_comparable<KEY_TYPE>)
78#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
80 {
81 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
82 AssertRepValidType_ ();
83 }
84#endif
85 ;
86 template <IThreeWayComparer<KEY_TYPE> KEY_THREEWAY_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
87 SortedMapping_SkipList (KEY_THREEWAY_COMPARER&& keyComparer, ITERABLE_OF_ADDABLE&& src);
88 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
89 SortedMapping_SkipList (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end)
90 requires (three_way_comparable<KEY_TYPE>);
91 template <IThreeWayComparer<KEY_TYPE> KEY_THREEWAY_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
92 SortedMapping_SkipList (KEY_THREEWAY_COMPARER&& keyComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
93
94 public:
95 /**
96 */
97 nonvirtual SortedMapping_SkipList& operator= (SortedMapping_SkipList&&) noexcept = default;
98 nonvirtual SortedMapping_SkipList& operator= (const SortedMapping_SkipList&) = default;
99
100 private:
101 using IImplRepBase_ = Private::SkipListBasedContainerIRep<typename SortedMapping<KEY_TYPE, MAPPED_VALUE_TYPE>::_IRep>;
102 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IThreeWayComparer<KEY_TYPE>) KEY_THREEWAY_COMPARER>
103 class Rep_;
104
105 private:
106 nonvirtual void AssertRepValidType_ () const;
107
108 private:
109 friend inherited;
110 };
111
112}
113
114/*
115 ********************************************************************************
116 ******************************* Implementation Details *************************
117 ********************************************************************************
118 */
119#include "SortedMapping_SkipList.inl"
120
121#endif /*_Stroika_Foundation_Containers_Concrete_SortedMapping_SkipList_h_ */
SortedMapping_SkipList<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an SkipList-based concrete implementat...
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
SkipListBasedContainer is a Stroika implementation detail, but its public methods are fair game and f...
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.