29 #ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 39 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 40 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 41 template <
typename GUM_SCALAR >
42 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME(
43 const MultiDimArray< GUM_SCALAR >* table, Instantiation* instantiation)
48 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 49 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 50 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 51 template <
typename GUM_SCALAR>
52 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
53 const MultiDimArray<GUM_SCALAR*>* table,
54 Instantiation* instantiation )
57 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F 58 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 59 template <
typename GUM_SCALAR>
60 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
61 const MultiDimArray<GUM_SCALAR>* table,
62 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
64 Instantiation* instantiation )
67 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 68 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 69 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 70 template <
typename GUM_SCALAR>
71 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
72 const MultiDimArray<GUM_SCALAR*>* table,
73 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
74 const GUM_SCALAR
const* ),
75 Instantiation* instantiation )
78 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 79 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 80 template <
typename GUM_SCALAR>
81 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME(
82 const MultiDimImplementation<GUM_SCALAR>* ttable,
83 Instantiation* instantiation )
86 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 87 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 88 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 89 template <
typename GUM_SCALAR>
91 GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME(
92 const MultiDimImplementation<GUM_SCALAR*>* ttable,
93 Instantiation* instantiation )
100 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 102 reinterpret_cast< const MultiDimArray< GUM_SCALAR >*
>(ttable);
105 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 107 reinterpret_cast< const MultiDimArray< GUM_SCALAR* >*
>(ttable);
111 Size nb_elt = table->domainSize();
115 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* ptable =
116 const_cast< GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE*
>(
117 &(table->unsafeGet(0)));
118 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
121 GUM_SCALAR old_val = current_val;
122 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
123 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* deb_ptr = ptable;
125 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
126 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 127 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
129 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
132 if (current_val != old_val) {
133 old_val = current_val;
134 current_ptr = ptable;
139 instantiation->forgetMaster();
140 instantiation->clear();
141 const Sequence< const DiscreteVariable* >& table_vars =
142 table->variablesSequence();
144 for (
const auto var : table_vars)
145 instantiation->add(*var);
148 table->fromOffset(*instantiation,
Size(current_ptr - deb_ptr));
149 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 155 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 156 GUM_SCALAR old_val = current_val;
157 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
159 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
160 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
162 if (current_val != old_val) {
163 old_val = current_val;
164 current_ptr = ptable;
171 for (
Size i = 0; i < nb_elt; ++i, ++ptable) {
172 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
180 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 182 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 183 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER gum is the global namespace for all aGrUM entities
std::size_t Size
In aGrUM, hashed values are unsigned long int.