50#ifndef DOXYGEN_SHOULD_SKIP_THIS
59 template <
typename GUM_SCALAR >
61 const std::string& instantiation_func_name,
62 const std::string& type_multidim,
66 PartialInstantiationSet* theset =
nullptr;
68 if (!_set_.exists(instantiation_func_name)) {
69 theset = _set_.insert(instantiation_func_name,
new PartialInstantiationSet).second;
75 __debug__::_inc_deletion_(
"HashTable", __FILE__, __LINE__,
"destructor of", (
void*)theset);
78 theset = _set_[instantiation_func_name];
81 theset->insert(type_multidim, newFunction);
85 template <
typename GUM_SCALAR >
87 const std::string& instantiation_func_name,
88 const std::string& type_multidim) {
89 if (!_set_.exists(instantiation_func_name))
return;
91 PartialInstantiationSet* theset = _set_[instantiation_func_name];
93 theset->erase(type_multidim);
97 template <
typename GUM_SCALAR >
99 const std::string& instantiation_func_name,
100 const std::string& type_multidim)
const {
101 if (!_set_.exists(instantiation_func_name))
return false;
103 const PartialInstantiationSet& theset = *(_set_[instantiation_func_name]);
104 return theset.exists(type_multidim);
109 template <
typename GUM_SCALAR >
112 const std::string& instantiation_func_name,
113 const std::string& type_multidim)
const {
114 const PartialInstantiationSet& theset = *(_set_[instantiation_func_name]);
115 return theset[type_multidim];
120 template <
typename GUM_SCALAR >
126# ifdef GUM_DEBUG_MODE
127 static std::atomic_flag first = ATOMIC_FLAG_INIT;
128 if (!first.test_and_set()) {
133 __debug__::_inc_deletion_(
"HashTable",
137 (
void*)&container._set_);
145 template <
typename GUM_SCALAR >
149 template <
typename GUM_SCALAR >
154 iter != _set_.endSafe();
161 template <
typename GUM_SCALAR >
163 const std::string& instantiation_func_name,
164 const std::string& type_multidim,
HashTableIteratorSafe< Key, Val > iterator_safe
Types for STL compliance.
A container for registering partial instantiation functions on multiDimImplementations,...
bool exists(const std::string &instantiation_func_name, const std::string &type_multidim) const
Indicates whether a given entry exists in the register.
static PartialInstantiationRegister4MultiDim & Register()
A named constructor that constructs one and only one Register per data type.
~PartialInstantiationRegister4MultiDim()
Class destructor.
PartialInstantiationRegister4MultiDim()
Default constructor: creates an empty register.
void erase(const std::string &instantiation_func_name, const std::string &type_multidim)
Removes a given entry from the register.
void insert(const std::string &instantiation_func_name, const std::string &type_multidim, PartialInstantiationPtr newFunction)
Adds a new entry into the register.
MultiDimImplementation< GUM_SCALAR > *(*)(const MultiDimImplementation< GUM_SCALAR > *, const HashTable< const DiscreteVariable *, Idx > &) PartialInstantiationPtr
The type of functions used by the register.
PartialInstantiationPtr get(const std::string &instantiation_func_name, const std::string &type_multidim) const
Returns the specialized partial instantiation operator assigned to a given type of MultiDimImplementa...
gum is the global namespace for all aGrUM entities
void registerPartialInstantiation(const std::string &instantiation_func_name, const std::string &type_multidim, typename PartialInstantiationRegister4MultiDim< GUM_SCALAR >::PartialInstantiationPtr function)
A function to more easily register new instantiation functions in MultiDims.
Headers for PartialInstantiationRegister4MultiDim.