51#ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED
62# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
63# define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR
65 template <
typename GUM_SCALAR >
73#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
74#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR*
75#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
76 template <
typename GUM_SCALAR>
77 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
82#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F
83#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR
84 template <
typename GUM_SCALAR>
85 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
87 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
const GUM_SCALAR& ),
91#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F
92#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR*
93#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
94 template <
typename GUM_SCALAR>
95 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
97 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
98 const GUM_SCALAR
const*))
105# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F
110 Size nb_elt = table->domainSize();
117 for (
const auto var: table->variablesSequence())
118 table_inst.
add(*var);
119 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
122 GUM_SCALAR old_val = current_val;
123 Size current_ptr = 0;
125 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
126# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
127 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
129 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
132 if (current_val != old_val) {
133 old_val = current_val;
139 instantiation->forgetMaster();
140 instantiation->clear();
143 for (
const auto var: table_vars)
144 instantiation->add(*var);
147 instantiation->operator+=(current_ptr);
148 return table->get(*instantiation);
150# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
151 GUM_SCALAR old_val = current_val;
152 Size current_ptr = 0;
154 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
155 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
157 if (current_val != old_val) {
158 old_val = current_val;
163 table_inst.setFirst();
164 table_inst += current_ptr
return table->get(table_inst);
167 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
168 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
176# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE
178# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
179# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
Class for assigning/browsing values to tuples of discrete variables.
void add(const DiscreteVariable &v) final
Adds a new variable in the Instantiation.
<agrum/base/multidim/multiDimImplementation.h>
The generic class for storing (ordered) sequences of objects.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
gum is the global namespace for all aGrUM entities