31 #ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 41 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 42 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 43 template <
typename GUM_SCALAR >
44 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME(
const MultiDimArray< GUM_SCALAR >* table,
45 Instantiation* instantiation)
50 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 51 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 52 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 53 template <
typename GUM_SCALAR>
54 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
55 const MultiDimArray<GUM_SCALAR*>* table,
56 Instantiation* instantiation )
59 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F 60 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 61 template <
typename GUM_SCALAR>
62 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
63 const MultiDimArray<GUM_SCALAR>* table,
64 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
66 Instantiation* instantiation )
69 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 70 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 71 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 72 template <
typename GUM_SCALAR>
73 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
74 const MultiDimArray<GUM_SCALAR*>* table,
75 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
76 const GUM_SCALAR
const* ),
77 Instantiation* instantiation )
80 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 81 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 82 template <
typename GUM_SCALAR>
83 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME(
84 const MultiDimImplementation<GUM_SCALAR>* ttable,
85 Instantiation* instantiation )
88 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 89 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR * 90 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 91 template <
typename GUM_SCALAR>
93 GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME(
94 const MultiDimImplementation<GUM_SCALAR*>* ttable,
95 Instantiation* instantiation )
102 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 103 const auto table =
reinterpret_cast<
const MultiDimArray< GUM_SCALAR >* >(ttable);
106 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 107 const auto table =
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* >(&(table->unsafeGet(0)));
117 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
120 GUM_SCALAR old_val = current_val;
121 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
122 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* deb_ptr = ptable;
124 for (Size i = 0; i < nb_elt; ++i, ++ptable) {
125 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 126 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
128 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
131 if (current_val != old_val) {
132 old_val = current_val;
133 current_ptr = ptable;
138 instantiation->forgetMaster();
139 instantiation->clear();
140 const Sequence<
const DiscreteVariable* >& table_vars = table->variablesSequence();
142 for (
const auto var: table_vars)
143 instantiation->add(*var);
146 table->fromOffset(*instantiation, Size(current_ptr - deb_ptr));
147 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 153 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 154 GUM_SCALAR old_val = current_val;
155 GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE* current_ptr = ptable;
157 for (Size i = 0; i < nb_elt; ++i, ++ptable) {
158 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, *ptable);
160 if (current_val != old_val) {
161 old_val = current_val;
162 current_ptr = ptable;
169 for (Size i = 0; i < nb_elt; ++i, ++ptable) {
170 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, *ptable);
178 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 180 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 181 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER