29 #ifndef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 40 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 41 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR 42 template <
typename GUM_SCALAR >
43 GUM_SCALAR GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME(
44 const MultiDimImplementation< GUM_SCALAR >* table,
45 Instantiation* instantiation = 0)
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 MultiDimImplementation<GUM_SCALAR*>* table,
56 Instantiation* instantiation = 0 )
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 MultiDimImplementation<GUM_SCALAR>* table,
64 GUM_SCALAR ( *f )(
const GUM_SCALAR&,
const GUM_SCALAR& ),
65 Instantiation* instantiation = 0 )
68 #ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 69 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE GUM_SCALAR* 70 #define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 71 template <
typename GUM_SCALAR>
72 GUM_SCALAR* GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F(
73 const MultiDimImplementation<GUM_SCALAR*>* table,
74 GUM_SCALAR* ( *f )(
const GUM_SCALAR
const*,
75 const GUM_SCALAR
const*))
82 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 83 Instantiation* instantiation = 0;
84 # endif // GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME_F 87 Size nb_elt = table->domainSize();
91 Instantiation table_inst(table);
92 GUM_SCALAR current_val = GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL;
95 GUM_SCALAR old_val = current_val;
98 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
99 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 100 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
102 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
103 # endif // GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 105 if (current_val != old_val) {
106 old_val = current_val;
112 instantiation->forgetMaster();
113 instantiation->clear();
114 const Sequence< const DiscreteVariable* >& table_vars =
115 table->variablesSequence();
117 for (
const auto var : table_vars)
118 instantiation->add(*var);
121 instantiation->operator+=(current_ptr);
122 return table->get(*instantiation);
124 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 125 GUM_SCALAR old_val = current_val;
126 Size current_ptr = 0;
128 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
129 GUM_MULTI_DIM_COMPLETE_PROJECTION(¤t_val, table->get(table_inst));
131 if (current_val != old_val) {
132 old_val = current_val;
137 table_inst.setFirst();
138 table_inst += current_ptr
return table->get(table_inst);
141 for (
Size i = 0; i < nb_elt; ++i, ++table_inst) {
142 GUM_MULTI_DIM_COMPLETE_PROJECTION(current_val, table->get(table_inst));
150 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_TYPE 152 # ifdef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER 153 # 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.