Stroika Library 3.0d18
 
Loading...
Searching...
No Matches
Mapping_Factory.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include <type_traits>
5
7#include "Stroika/Foundation/Containers/Concrete/Mapping_HashTable.h"
10
12 // avoid issue with #include deadly embrace
13 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
14 class Mapping_Array;
15 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
16 class Mapping_HashTable;
17 template <typename KEY_TYPE, typename MAPPED_VALUE_TYPE>
18 class Mapping_LinkedList;
19}
20namespace Stroika::Foundation::Containers::Factory {
21
22 /*
23 ********************************************************************************
24 ****** Mapping_Factory<KEY_TYPE, VALUE_TYPE, KEY_EQUALS_COMPARER> **************
25 ********************************************************************************
26 */
27 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
29 : fFactory_{f}
30 {
31 }
32 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
37 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
39 : fFactory_{nullptr}
40 , fHints_OptimizeForLookupSpeedOverUpdateSpeed{hints.fOptimizeForLookupSpeedOverUpdateSpeed.value_or (true)}
41 {
42 }
43 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
45 {
46 return AccessDefault_ ();
47 }
48 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
49 inline auto Mapping_Factory<KEY_TYPE, VALUE_TYPE, KEY_EQUALS_COMPARER>::operator() (const KEY_EQUALS_COMPARER& keyEqualsComparer) const -> ConstructedType
50 {
51 if (this->fFactory_ == nullptr) [[likely]] {
52 if constexpr (same_as<KEY_EQUALS_COMPARER, equal_to<KEY_TYPE>> and default_initializable<Concrete::Mapping_HashTable<KEY_TYPE, VALUE_TYPE>>) {
53 static const auto kDefault_ = Concrete::Mapping_HashTable<KEY_TYPE, VALUE_TYPE>{};
54 return kDefault_;
55 }
56 else if constexpr (same_as<KEY_EQUALS_COMPARER, equal_to<KEY_TYPE>> and
57 default_initializable<Concrete::SortedMapping_stdmap<KEY_TYPE, VALUE_TYPE>>) {
58 static const auto kDefault_ = Concrete::SortedMapping_stdmap<KEY_TYPE, VALUE_TYPE>{};
59 return kDefault_;
60 }
61 else {
62 if (fHints_OptimizeForLookupSpeedOverUpdateSpeed) [[likely]] {
63 // array has better memory locality properties so lookups faster
64 return Concrete::Mapping_Array<KEY_TYPE, VALUE_TYPE>{keyEqualsComparer};
65 }
66 else {
68 }
69 }
70 }
71 else {
72 return this->fFactory_ (keyEqualsComparer);
73 }
74 }
75 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
77 {
78 AccessDefault_ () = f.has_value () ? *f : Mapping_Factory{Hints{}};
79 }
80 template <typename KEY_TYPE, typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER>
82 {
83 static Mapping_Factory sDefault_{Hints{}};
84 return sDefault_;
85 }
86
87}
Mapping_Array<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an Array-based concrete implementation of the M...
Mapping_HashTable<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is a HashTable based concrete implementation o...
Mapping_LinkedList<KEY_TYPE, MAPPED_VALUE_TYPE, TRAITS> is an LinkedList-based concrete implementatio...
SortedMapping_stdmap<KEY_TYPE,MAPPED_VALUE_TYPE> is an std::map-based concrete implementation of the ...
Singleton factory object - Used to create the default backend implementation of a Mapping<> container...
static void Register(const optional< Mapping_Factory > &f=nullopt)
nonvirtual ConstructedType operator()(const KEY_EQUALS_COMPARER &keyEqualsComparer) const