3#include "GlobalParam.h"
8 using concurrent_key_t = std::size_t;
30 virtual T
const Load(concurrent_key_t
const key)
const = 0;
35 virtual void Save(T
const& value, concurrent_key_t
const key) = 0;
39 virtual bool HasKey(concurrent_key_t
const key)
const = 0;
75 ~SingleThreadParam()
override =
default;
76 T
const Load(concurrent_key_t
const key)
const override;
77 void Save(T
const& value, concurrent_key_t
const key)
override;
78 bool HasKey(concurrent_key_t
const key)
const override;
99 using container_t = std::unordered_map<concurrent_key_t, T>;
103 ~MemoizedParam()
override =
default;
104 T
const Load(concurrent_key_t
const key)
const override;
105 void Save(T
const& value, concurrent_key_t
const key)
override;
106 bool HasKey(concurrent_key_t
const key)
const override;
112 container_t m_container;
120 class ConcurrentParamFactory
124 ConcurrentParamFactory() =
delete;
130 template <
typename T>
131 static std::unique_ptr<ConcurrentParam<T>>
Create()
134 if(GlobalConcurrencyModel() ==
"none")
135 GlobalConcurrencyModel =
"memoize";
137 if(GlobalConcurrencyModel() ==
"single")
138 return std::make_unique<SingleThreadParam<T>>();
139 else if(GlobalConcurrencyModel() ==
"memoize")
140 return std::make_unique<MemoizedParam<T>>();
142 throw std::runtime_error(
"unknown GlobalConcurrencyModel '" + GlobalConcurrencyModel() +
"'; valid options are 'single' or 'memoize'");
static std::unique_ptr< ConcurrentParam< T > > Create()
create a new ConcurrentParam-derived class instance
virtual void Save(T const &value, concurrent_key_t const key)=0
modify a value
std::mutex m_mutex
mutex for this ConcurrentParam
bool m_needs_hashing
whether this ConcurrentParam needs hashing for calling Load or Save
virtual bool HasKey(concurrent_key_t const key) const =0
bool NeedsHashing() const
whether or not hashing is needed to use this parameter
virtual std::size_t GetSize() const =0
bool m_empty
whether this ConcurrentParam has something saved
virtual T const Load(concurrent_key_t const key) const =0
access a stored value
ConcurrentParam(std::string const &model)
T const Load(concurrent_key_t const key) const override
access a stored value
bool HasKey(concurrent_key_t const key) const override
std::size_t GetSize() const override
void Save(T const &value, concurrent_key_t const key) override
modify a value
std::size_t GetSize() const override
void Save(T const &value, concurrent_key_t const key) override
modify a value
T const Load(concurrent_key_t const key) const override
access a stored value
bool HasKey(concurrent_key_t const key) const override