31 #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 MultiDimImplementation< GUM_SCALAR >* table,
47 Instantiation* instantiation = 0)
52 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 53 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR* 54 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 55 template <
typename GUM_SCALAR>
56 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
57 const MultiDimImplementation<GUM_SCALAR*>* table,
58 Instantiation* instantiation = 0 )
61 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F 62 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 63 template <
typename GUM_SCALAR>
64 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
65 const MultiDimImplementation<GUM_SCALAR>* table,
66 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
const GUM_SCALAR& ),
67 Instantiation* instantiation = 0 )
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 MultiDimImplementation<GUM_SCALAR*>* table,
76 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
77 const GUM_SCALAR
const*))
84 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 85 Instantiation* instantiation = 0;
89 Size nb_elt = table->domainSize();
93 Instantiation table_inst(table);
94 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
97 GUM_SCALAR old_val = current_val;
100 for (Size i = 0; i < nb_elt; ++i, ++table_inst) {
101 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 102 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
104 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
107 if (current_val != old_val) {
108 old_val = current_val;
114 instantiation->forgetMaster();
115 instantiation->clear();
116 const Sequence<
const DiscreteVariable* >& table_vars
117 = table->variablesSequence();
119 for (
const auto var: table_vars)
120 instantiation->add(*var);
123 instantiation->operator+=(current_ptr);
124 return table->get(*instantiation);
126 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 127 GUM_SCALAR old_val = current_val;
128 Size current_ptr = 0;
130 for (Size i = 0; i < nb_elt; ++i, ++table_inst) {
131 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
133 if (current_val != old_val) {
134 old_val = current_val;
139 table_inst.setFirst();
140 table_inst += current_ptr
return table->get(table_inst);
143 for (Size i = 0; i < nb_elt; ++i, ++table_inst) {
144 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
152 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 154 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 155 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER