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 >
46 GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME(
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 = table->variablesSequence();
118 for (
const auto var: table_vars)
119 instantiation->add(*var);
122 instantiation->operator+=(current_ptr);
123 return table->get(*instantiation);
125 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 126 GUM_SCALAR old_val = current_val;
127 Size current_ptr = 0;
129 for (Size i = 0; i < nb_elt; ++i, ++table_inst) {
130 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
132 if (current_val != old_val) {
133 old_val = current_val;
138 table_inst.setFirst();
139 table_inst += current_ptr
return table->get(table_inst);
142 for (Size i = 0; i < nb_elt; ++i, ++table_inst) {
143 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
151 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 153 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 154 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER