32 #ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 42 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 43 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 44 template <
typename GUM_SCALAR >
45 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME(
46 const MultiDimArray< GUM_SCALAR >* table, Instantiation* instantiation)
51 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 52 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 53 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 54 template <
typename GUM_SCALAR>
55 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
56 const MultiDimArray<GUM_SCALAR*>* table,
57 Instantiation* instantiation )
60 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F 61 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 62 template <
typename GUM_SCALAR>
63 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
64 const MultiDimArray<GUM_SCALAR>* table,
65 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
67 Instantiation* instantiation )
70 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 71 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 72 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 73 template <
typename GUM_SCALAR>
74 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
75 const MultiDimArray<GUM_SCALAR*>* table,
76 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
77 const GUM_SCALAR
const* ),
78 Instantiation* instantiation )
81 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 82 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 83 template <
typename GUM_SCALAR>
84 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME(
85 const MultiDimImplementation<GUM_SCALAR>* ttable,
86 Instantiation* instantiation )
89 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 90 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 91 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 92 template <
typename GUM_SCALAR>
94 GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME(
95 const MultiDimImplementation<GUM_SCALAR*>* ttable,
96 Instantiation* instantiation )
103 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 105 reinterpret_cast< const MultiDimArray< GUM_SCALAR >*
>(ttable);
108 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 110 reinterpret_cast< const MultiDimArray< GUM_SCALAR* >*
>(ttable);
114 Size nb_elt = table->domainSize();
118 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* ptable =
119 const_cast< GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE*
>(
120 &(table->unsafeGet(0)));
121 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
124 GUM_SCALAR old_val = current_val;
125 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
126 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* deb_ptr = ptable;
128 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
129 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 130 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
132 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
135 if (current_val != old_val) {
136 old_val = current_val;
137 current_ptr = ptable;
142 instantiation->forgetMaster();
143 instantiation->clear();
144 const Sequence< const DiscreteVariable* >& table_vars =
145 table->variablesSequence();
147 for (
const auto var : table_vars)
148 instantiation->add(*var);
151 table->fromOffset(*instantiation,
Size(current_ptr - deb_ptr));
152 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 158 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 159 GUM_SCALAR old_val = current_val;
160 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
162 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
163 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
165 if (current_val != old_val) {
166 old_val = current_val;
167 current_ptr = ptable;
174 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
175 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
183 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 185 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 186 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
std::size_t Size
In aGrUM, hashed values are unsigned long int.