4#ifndef _Stroika_Foundation_Containers_Concrete_Mapping_Factory_h_
5#define _Stroika_Foundation_Containers_Concrete_Mapping_Factory_h_
7#include "Stroika/Foundation/StroikaPreComp.h"
16 template <
typename KEY_TYPE,
typename MAPPED_VALUE_TYPE>
20namespace Stroika::Foundation::Containers::Factory {
32 template <
typename KEY_TYPE,
typename VALUE_TYPE, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
35 static inline atomic<Mapping<KEY_TYPE, VALUE_TYPE> (*) (
const KEY_EQUALS_COMPARER&)> sFactory_{
nullptr};
38 static_assert (not is_reference_v<KEY_TYPE> and not is_reference_v<VALUE_TYPE> and not is_reference_v<KEY_EQUALS_COMPARER>,
39 "typically if this fails its because a (possibly indirect) caller forgot to use forward<TTT>(), or remove_cvref_t");
58 optional<bool> fOptimizeForLookupSpeedOverUpdateSpeed;
107 static void Register (
const optional<Mapping_Factory>& f = nullopt);
111 const bool fHints_OptimizeForLookupSpeedOverUpdateSpeed{
true};
125#include "Mapping_Factory.inl"
Singleton factory object - Used to create the default backend implementation of a Mapping<> container...
function< ConstructedType(const KEY_EQUALS_COMPARER &keyEqualsComparer)> FactoryFunctionType
constexpr Mapping_Factory()
static const Mapping_Factory & Default()
Mapping< KEY_TYPE, VALUE_TYPE > ConstructedType
static void Register(const optional< Mapping_Factory > &f=nullopt)
nonvirtual ConstructedType operator()(const KEY_EQUALS_COMPARER &keyEqualsComparer) const