51#ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED
61# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
62# define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR
64 template <
typename GUM_SCALAR >
71#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
72#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR *
73#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
74 template <
typename GUM_SCALAR>
75 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
80#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F
81#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR
82 template <
typename GUM_SCALAR>
83 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
85 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
90#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F
91#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR *
92#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
93 template <
typename GUM_SCALAR>
94 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
96 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
97 const GUM_SCALAR
const* ),
101#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME
102#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR
103 template <
typename GUM_SCALAR>
104 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME(
109#ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME
110#define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR *
111#define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
112 template <
typename GUM_SCALAR>
114 GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME(
123# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME
127# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME
132 Size nb_elt = table->domainSize();
136 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* ptable
137 =
const_cast< GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE*
>(&(table->unsafeGet(0)));
138 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
141 GUM_SCALAR old_val = current_val;
142 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
143 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* deb_ptr = ptable;
145 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
146# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
147 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
149 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
152 if (current_val != old_val) {
153 old_val = current_val;
154 current_ptr = ptable;
159 instantiation->forgetMaster();
160 instantiation->clear();
163 for (
const auto var: table_vars)
164 instantiation->add(*var);
167 table->fromOffset(*instantiation,
Size(current_ptr - deb_ptr));
168# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
174# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
175 GUM_SCALAR old_val = current_val;
176 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
178 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
179 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
181 if (current_val != old_val) {
182 old_val = current_val;
183 current_ptr = ptable;
190 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
191 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
199# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE
201# ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
202# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER
Class for assigning/browsing values to tuples of discrete variables.
Multidimensional matrix stored as an array in memory.
<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