Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Mapping_Array.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_Mapping_Array_h_
5#define _Stroika_Foundation_Containers_Concrete_Mapping_Array_h_
6
7#include "Stroika/Foundation/StroikaPreComp.h"
8
9#include "Stroika/Foundation/Containers/Mapping.h"
11
12/**
13 * \file
14 *
15 * \note Code-Status: <a href="Code-Status.md#Beta">Beta</a>
16 */
17
19
20 /**
21 * \brief Mapping_Array<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an Array-based concrete implementation of the Mapping<KEY_TYPE, MAPPED_VALUE_TYPE, typename TRAITS::MappingTraitsType> container pattern.
22 *
23 * \note Runtime performance/complexity:
24 * o Add/Lookup () are O(N)
25 * o Suitable for small (apx < 10) sized containers
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::ArrayBasedContainer<Mapping_Array<KEY_TYPE, MAPPED_VALUE_TYPE>, Mapping<KEY_TYPE, MAPPED_VALUE_TYPE>, true> {
32 private:
34
35 public:
36 using KeyEqualsCompareFunctionType = typename inherited::KeyEqualsCompareFunctionType;
37 using value_type = typename inherited::value_type;
38 using mapped_type = typename inherited::mapped_type;
39
40 public:
41 /**
42 * \see docs on Mapping<> constructor
43 */
45 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
46 explicit Mapping_Array (KEY_EQUALS_COMPARER&& keyEqualsComparer);
47 Mapping_Array (Mapping_Array&&) noexcept = default;
48 Mapping_Array (const Mapping_Array&) noexcept = default;
49 Mapping_Array (const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
50 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
51 Mapping_Array (KEY_EQUALS_COMPARER&& keyEqualsComparer, const initializer_list<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>>& src);
52 template <IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
53 requires (not derived_from<remove_cvref_t<ITERABLE_OF_ADDABLE>, Mapping_Array<KEY_TYPE, MAPPED_VALUE_TYPE>>)
54 explicit Mapping_Array (ITERABLE_OF_ADDABLE&& src)
55#if qCompilerAndStdLib_RequiresNotMatchInlineOutOfLineForTemplateClassBeingDefined_Buggy
57 {
59 this->reserve (src.size ());
60 }
61 this->AddAll (forward<ITERABLE_OF_ADDABLE> (src));
62 AssertRepValidType_ ();
63 }
64#endif
65 ;
66 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER, IIterableOfTo<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERABLE_OF_ADDABLE>
67 Mapping_Array (KEY_EQUALS_COMPARER&& keyEqualsComparer, ITERABLE_OF_ADDABLE&& src);
68 template <IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
69 Mapping_Array (ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
70 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER, IInputIterator<KeyValuePair<KEY_TYPE, MAPPED_VALUE_TYPE>> ITERATOR_OF_ADDABLE>
71 Mapping_Array (KEY_EQUALS_COMPARER&& keyEqualsComparer, ITERATOR_OF_ADDABLE&& start, ITERATOR_OF_ADDABLE&& end);
72
73 public:
74 nonvirtual Mapping_Array& operator= (Mapping_Array&&) noexcept = default;
75 nonvirtual Mapping_Array& operator= (const Mapping_Array&) = default;
76
77 private:
79 template <qCompilerAndStdLib_ConstraintDiffersInTemplateRedeclaration_BWA (IEqualsComparer<KEY_TYPE>) KEY_EQUALS_COMPARER>
80 class Rep_;
81
82 private:
83 nonvirtual void AssertRepValidType_ () const;
84
85 private:
86 friend inherited;
87 };
88
89}
90
91/*
92 ********************************************************************************
93 ******************************* Implementation Details *************************
94 ********************************************************************************
95 */
96
97#include "Mapping_Array.inl"
98
99#endif /*_Stroika_Foundation_Containers_Concrete_Mapping_Array_h_ */
Mapping_Array<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an Array-based concrete implementation of the M...
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
ArrayBasedContainer is a Stroika implementation detail, but its public methods are fair game and full...
impl detail for array based container support (see ArrayBasedContainer docs on bool USING_IREP)
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.
Concept checks if the given type T has a const size() method which can be called to return a size_t.
Definition Concepts.h:361