51#define GUM_PARTIAL_INSTANTIATION_PATTERN_ALLOWED 1
55#define GUM_MULTI_DIM_DECORATOR_PARTIAL_INST(NAME) \
57 template < typename GUM_SCALAR > \
58 MultiDimImplementation< GUM_SCALAR >* \
59 NAME(const MultiDimDecorator< GUM_SCALAR >& table, \
60 const HashTable< const DiscreteVariable*, Idx >& inst_vars) { \
61 const MultiDimImplementation< GUM_SCALAR >* impl = table.content(); \
62 return NAME(*impl, inst_vars); \
68#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME partialInstantiationMultiDimArray
70#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
72#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_IMPL2ARRAY_NAME partialInstantiationMultiDimArray
74#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_IMPL2ARRAY_NAME
76#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_NAME partialInstantiationMultiDimArray4Pointers
78#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_NAME
80#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_IMPL2ARRAY_NAME \
81 partialInstantiationMultiDimArray4Pointers
83#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_IMPL2ARRAY_NAME
87#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME partialInstantiationMultiDimImplementation
89#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
91#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_POINTER_NAME \
92 partialInstantiationMultiDimImplementation4Pointers
94#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
100#define GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME partialInstantiation
102#undef GUM_MULTI_DIM_PARTIAL_INSTANTIATION_NAME
114 template <
typename GUM_SCALAR >
117 static std::once_flag first;
118 std::call_once(first, []() {
119 std::string MultiDimArrayString(
"MultiDimArray");
120 std::string MultiDimDecisionDiagramString(
"MultiDimDecisionDiagram");
121 std::string BaseNameString(
"MultiDimImplementation");
131 &partialInstantiationMultiDimImplementation);
136 template <
typename GUM_SCALAR >
139 static std::once_flag first;
140 std::call_once(first, []() {
141 std::string MultiDimArrayString(
"MultiDimArray");
142 std::string BaseNameString(
"MultiDimImplementation");
153 &partialInstantiationMultiDimImplementation4Pointers);
160#undef GUM_PARTIAL_INSTANTIATION_PATTERN_ALLOWED
gum is the global namespace for all aGrUM entities
void partialInstantiation4MultiDimInit()
The function used to register all the instantiation operators on multidimImplementations over non-poi...
MultiDimArray< GUM_SCALAR > * partialInstantiationMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, const HashTable< const DiscreteVariable *, Idx > &inst_vars)
A specialized function for instantiating variables in a multiDimArray.
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 pointerPartialInstantiation4MultiDimInit()
The function used to register all the instantiations on multidimImplementations over pointers types.
MultiDimArray< GUM_SCALAR * > * partialInstantiationMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, const HashTable< const DiscreteVariable *, Idx > &inst_vars)
A specialized function for instantiating variables in a MultiDimArray.
#define GUM_MULTI_DIM_DECORATOR_PARTIAL_INST(NAME)
the pattern used by all the partial instantiations of multidimensional tables
the pattern used by all the partial instantiations of multidimensional tables
the pattern used by all the partial instantiations of multidimensional tables
Headers for PartialInstantiationRegister4MultiDim.