Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
SortedAssociation_SkipList.h
Go to the documentation of this file.
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5#ifndef _Stroika_Foundation_Containers_Concrete_SortedAssociation_SkipList_h_
6#define _Stroika_Foundation_Containers_Concrete_SortedAssociation_SkipList_h_
7
8#include "Stroika/Foundation/StroikaPreComp.h"
9
10#include "Stroika/Foundation/Containers/DataStructures/SkipList.h"
12#include "Stroika/Foundation/Containers/SortedAssociation.h"
13
14/**
15 * \file
16 *
17 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
18 *
19 */
21
22 using Common::IThreeWayComparer;
23
24 /**
25 * \brief SortedAssociation_SkipList<KEY_TYPE,MAPPED_VALUE_TYPE> is an SkipList-based concrete implementation of the SortedAssociation<KEY_TYPE,MAPPED_VALUE_TYPE> container pattern.
26 *
27 * \note Runtime performance/complexity:
28 * @todo
29 *
30 * \note \em Thread-Safety <a href="Thread-Safety.md#C++-Standard-Thread-Safety">C++-Standard-Thread-Safety</a>
31 */
32 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
34 : public Private::SkipListBasedContainer<SortedAssociation_SkipList<KEY_TYPE, MAPPED_VALUE_TYPE>, SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE>, true> {
35 private:
36 using inherited =
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 * AddOrExtendOrReplaceMode::eAddExtras is the most common behavior for Association, so default to that in SkipList.
49 */
50 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER = compare_three_way>
52
53 /**
54 * \brief SKIPLIST is SkipList that can be used inside SortedMapping_SkipList
55 */
56 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER = compare_three_way>
58
59 public:
60 /**
61 * \see docs on SortedAssociation<> constructor
62 */
64 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER>
65 explicit SortedAssociation_SkipList (KEY_COMPARER&& comparer);
66 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER>
70 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER>
71 SortedAssociation_SkipList (KEY_COMPARER&& comparer, const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
72 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
73 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, SortedAssociation_SkipList<KEY_TYPE, MAPPED_VALUE_TYPE>>)
74 explicit SortedAssociation_SkipList (ITERABLE_OF_ADDABLE&& src)
75#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
77 {
78 AssertRepValidType_ ();
79 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
80 AssertRepValidType_ ();
81 }
82#endif
83 ;
84 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
85 SortedAssociation_SkipList (KEY_COMPARER&& comparer, ITERABLE_OF_ADDABLE&& src);
86 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
87 SortedAssociation_SkipList (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
88 template <IThreeWayComparer<KEY_TYPE> KEY_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
89 SortedAssociation_SkipList (KEY_COMPARER&& comparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
90
91 public:
92 /**
93 */
94 nonvirtual SortedAssociation_SkipList& operator= (SortedAssociation_SkipList&&) noexcept = default;
95 nonvirtual SortedAssociation_SkipList& operator= (const SortedAssociation_SkipList&) = default;
96
97 private:
98 using IImplRepBase_ = Private::SkipListBasedContainerIRep<typename SortedAssociation<KEY_TYPE, MAPPED_VALUE_TYPE>::_IRep>;
99 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IThreeWayComparer<KEY_TYPE>) KEY_COMPARER>
100 class Rep_;
101
102 private:
103 nonvirtual void AssertRepValidType_ () const;
104
105 private:
106 friend inherited;
107 };
108
109}
110
111/*
112 ********************************************************************************
113 ******************************* Implementation Details *************************
114 ********************************************************************************
115 */
116#include "SortedAssociation_SkipList.inl"
117
118#endif /*_Stroika_Foundation_Containers_Concrete_SortedAssociation_SkipList_h_ */
nonvirtual void AddAll(ITERABLE_OF_ADDABLE &&items)
typename inherited::value_type value_type
SortedAssociation_SkipList<KEY_TYPE,MAPPED_VALUE_TYPE> is an SkipList-based concrete implementation o...
SkipListBasedContainer is a Stroika implementation detail, but its public methods are fair game and f...
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.