30 #ifndef DOXYGEN_SHOULD_SKIP_THIS 38 template <
typename GUM_SCALAR >
40 const std::string& instantiation_func_name,
41 const std::string& type_multidim,
42 typename PartialInstantiationRegister4MultiDim<
43 GUM_SCALAR >::PartialInstantiationPtr newFunction) {
45 PartialInstantiationSet* theset;
47 if (!__set.exists(instantiation_func_name)) {
49 __set.insert(instantiation_func_name,
new PartialInstantiationSet).second;
50 # ifdef GUM_DEBUG_MODE 55 __debug__::__inc_deletion(
56 "HashTable", __FILE__, __LINE__,
"destructor of", (
void*)theset);
59 theset = __set[instantiation_func_name];
62 theset->insert(type_multidim, newFunction);
66 template <
typename GUM_SCALAR >
68 const std::string& instantiation_func_name,
69 const std::string& type_multidim) {
70 if (!__set.exists(instantiation_func_name))
return;
72 PartialInstantiationSet* theset = __set[instantiation_func_name];
74 theset->erase(type_multidim);
78 template <
typename GUM_SCALAR >
80 const std::string& instantiation_func_name,
81 const std::string& type_multidim)
const {
82 if (!__set.exists(instantiation_func_name))
return false;
84 return __set[instantiation_func_name].exists(type_multidim);
89 template <
typename GUM_SCALAR >
90 INLINE
typename PartialInstantiationRegister4MultiDim<
91 GUM_SCALAR >::PartialInstantiationPtr
93 const std::string& instantiation_func_name,
94 const std::string& type_multidim)
const {
95 PartialInstantiationSet* theset = __set[instantiation_func_name];
96 return theset-> operator[](type_multidim);
101 template <
typename GUM_SCALAR >
102 PartialInstantiationRegister4MultiDim< GUM_SCALAR >&
104 static PartialInstantiationRegister4MultiDim container;
106 # ifdef GUM_DEBUG_MODE 107 static bool first =
true;
115 __debug__::__inc_deletion(
"HashTable",
119 (
void*)&container.__set);
128 template <
typename GUM_SCALAR >
129 PartialInstantiationRegister4MultiDim<
130 GUM_SCALAR >::PartialInstantiationRegister4MultiDim() {}
133 template <
typename GUM_SCALAR >
134 PartialInstantiationRegister4MultiDim<
135 GUM_SCALAR >::~PartialInstantiationRegister4MultiDim() {
138 iter = __set.beginSafe();
139 iter != __set.endSafe();
146 template <
typename GUM_SCALAR >
148 const std::string& instantiation_func_name,
149 const std::string& type_multidim,
150 typename PartialInstantiationRegister4MultiDim<
151 GUM_SCALAR >::PartialInstantiationPtr
function) {
153 instantiation_func_name, type_multidim,
function);
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
static PartialInstantiationRegister4MultiDim & Register()
A named constructor that constructs one and only one Register per data type.
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...
void erase(const std::string &instantiation_func_name, const std::string &type_multidim)
Removes a given entry from the register.
bool exists(const std::string &instantiation_func_name, const std::string &type_multidim) const
Indicates whether a given entry exists in the register.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
HashTableIteratorSafe< Key, Val > iterator_safe
Types for STL compliance.
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.
void insert(const std::string &instantiation_func_name, const std::string &type_multidim, PartialInstantiationPtr newFunction)
Adds a new entry into the register.