32 #ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 43 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 44 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 45 template <
typename GUM_SCALAR >
46 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME(
47 const MultiDimImplementation< GUM_SCALAR >* table,
48 Instantiation* instantiation = 0)
53 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 54 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR* 55 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 56 template <
typename GUM_SCALAR>
57 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME(
58 const MultiDimImplementation<GUM_SCALAR*>* table,
59 Instantiation* instantiation = 0 )
62 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F 63 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 64 template <
typename GUM_SCALAR>
65 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME_F(
66 const MultiDimImplementation<GUM_SCALAR>* table,
67 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
const GUM_SCALAR& ),
68 Instantiation* instantiation = 0 )
71 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 72 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR* 73 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 74 template <
typename GUM_SCALAR>
75 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
76 const MultiDimImplementation<GUM_SCALAR*>* table,
77 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
78 const GUM_SCALAR
const*))
85 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 86 Instantiation* instantiation = 0;
87 # endif // GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 90 Size nb_elt = table->domainSize();
94 Instantiation table_inst(table);
95 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
98 GUM_SCALAR old_val = current_val;
101 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
102 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 103 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
105 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
106 # endif // GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 108 if (current_val != old_val) {
109 old_val = current_val;
115 instantiation->forgetMaster();
116 instantiation->clear();
117 const Sequence< const DiscreteVariable* >& table_vars =
118 table->variablesSequence();
120 for (
const auto var : table_vars)
121 instantiation->add(*var);
124 instantiation->operator+=(current_ptr);
125 return table->get(*instantiation);
127 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 128 GUM_SCALAR old_val = current_val;
129 Size current_ptr = 0;
131 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
132 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
134 if (current_val != old_val) {
135 old_val = current_val;
140 table_inst.setFirst();
141 table_inst += current_ptr
return table->get(table_inst);
144 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
145 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
153 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 155 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 156 # 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.