51#ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED
62# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
63# define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_ELEMENT
65 template <
typename GUM_ELEMENT >
73#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
74#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_ELEMENT*
75#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
76 template <
typename GUM_ELEMENT>
77 GUM_ELEMENT* 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_ELEMENT
84 template <
typename GUM_ELEMENT>
85 GUM_ELEMENT GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
87 GUM_ELEMENT ( *f )(
const GUM_ELEMENT&,
const GUM_ELEMENT& ),
91#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F
92#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_ELEMENT*
93#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
94 template <
typename GUM_ELEMENT>
95 GUM_ELEMENT* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
97 GUM_ELEMENT* ( *f )(
const GUM_ELEMENT
const*,
98 const GUM_ELEMENT
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_ELEMENT current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
122 GUM_ELEMENT 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_ELEMENT 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