Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Mapping_LinkedList.h
Go to the documentation of this file.
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5#include "Stroika/Foundation/StroikaPreComp.h"
6
7#include "Stroika/Foundation/Containers/Mapping.h"
8
9#ifndef _Stroika_Foundation_Containers_Concrete_Mapping_LinkedList_h_
10#define _Stroika_Foundation_Containers_Concrete_Mapping_LinkedList_h_
11
12/**
13 * \file
14 *
15 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
16 *
17 */
18
20
21 /**
22 * \brief Mapping_LinkedList<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an LinkedList-based concrete implementation of the Mapping<KEY_TYPE, MAPPED_VALUE_TYPE, typename TRAITS::MappingTraitsType> container pattern.
23 *
24 * \note Runtime performance/complexity:
25 * o size () is O(N), but empty () is constant
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>
30 class Mapping_LinkedList : public Mapping<KEY_TYPE, MAPPED_VALUE_TYPE> {
31 private:
33
34 public:
35 using KeyEqualsCompareFunctionType = typename inherited::KeyEqualsCompareFunctionType;
36 using value_type = typename inherited::value_type;
37 using mapped_type = typename inherited::mapped_type;
38
39 public:
40 /**
41 * \see docs on Mapping<> constructor
42 */
44 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
45 explicit Mapping_LinkedList (KEY_EQUALS_COMPARER&& keyEqualsComparer);
46 Mapping_LinkedList (Mapping_LinkedList&&) noexcept = default;
47 Mapping_LinkedList (const Mapping_LinkedList&) noexcept = default;
49 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
50 Mapping_LinkedList (KEY_EQUALS_COMPARER&& keyEqualsComparer, const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
51 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
52 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, Mapping_LinkedList<KEY_TYPE, MAPPED_VALUE_TYPE>>)
53 explicit Mapping_LinkedList (ITERABLE_OF_ADDABLE&& src)
54#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
56 {
57 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
58 AssertRepValidType_ ();
59 }
60#endif
61 ;
62 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
63 Mapping_LinkedList (KEY_EQUALS_COMPARER&& keyEqualsComparer, ITERABLE_OF_ADDABLE&& src);
64 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
65 Mapping_LinkedList (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
66 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
67 Mapping_LinkedList (KEY_EQUALS_COMPARER&& keyEqualsComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
68
69 public:
70 nonvirtual Mapping_LinkedList& operator= (Mapping_LinkedList&&) noexcept = default;
71 nonvirtual Mapping_LinkedList& operator= (const Mapping_LinkedList&) = default;
72
73 private:
74 using IImplRepBase_ = typename Mapping<KEY_TYPE, MAPPED_VALUE_TYPE>::_IRep;
75 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<KEY_TYPE>) KEY_EQUALS_COMPARER>
76 class Rep_;
77
78 private:
79 nonvirtual void AssertRepValidType_ () const;
80 };
81
82}
83
84/*
85 ********************************************************************************
86 ******************************* Implementation Details *************************
87 ********************************************************************************
88 */
89
90#include "Mapping_LinkedList.inl"
91
92#endif /*_Stroika_Foundation_Containers_Concrete_Mapping_LinkedList_h_ */
Mapping_LinkedList<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an LinkedList-based concrete implementatio...
Implementation detail for Mapping<T> implementors.
Definition Mapping.h:667
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.