aGrUM  0.16.0
projections4MultiDim_tpl.h
Go to the documentation of this file.
1 
29 #ifndef DOXYGEN_SHOULD_SKIP_THIS
30 
31 // allow projectionPatterns to be used
32 # define GUM_PROJECTION_PATTERN_ALLOWED 1
33 
34 # include <agrum/core/functors.h>
36 
37 // a specialized max projection function for multiDimArrays
38 
39 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimArray
40 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
41 # define GUM_MULTI_DIM_PROJECTION(x, y) \
42  if (y > x) x = y
43 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
45 # undef GUM_MULTI_DIM_PROJECTION_NAME
46 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
47 # undef GUM_MULTI_DIM_PROJECTION
48 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
49 
50 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectMaxMultiDimArray
51 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
52 # define GUM_MULTI_DIM_PROJECTION(x, y) \
53  if (y > x) x = y
54 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
56 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
57 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
58 # undef GUM_MULTI_DIM_PROJECTION
59 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
60 
61 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectMaxMultiDimArray4Pointers
62 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
63 # define GUM_MULTI_DIM_PROJECTION(x, y) \
64  if (*(y) > *(x)) *(x) = *(y)
65 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
67 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
68 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
69 # undef GUM_MULTI_DIM_PROJECTION
70 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
71 
72 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
73  projectMaxMultiDimArray4Pointers
74 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
75 # define GUM_MULTI_DIM_PROJECTION(x, y) \
76  if (*(y) > *(x)) *(x) = *(y)
77 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
79 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
80 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
81 # undef GUM_MULTI_DIM_PROJECTION
82 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
83 
84 // a specialized min projection function for multiDimArrays
85 
86 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimArray
87 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
88 # define GUM_MULTI_DIM_PROJECTION(x, y) \
89  if (x > y) x = y
90 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
92 # undef GUM_MULTI_DIM_PROJECTION_NAME
93 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
94 # undef GUM_MULTI_DIM_PROJECTION
95 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
96 
97 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectMinMultiDimArray
98 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
99 # define GUM_MULTI_DIM_PROJECTION(x, y) \
100  if (x > y) x = y
101 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
103 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
104 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
105 # undef GUM_MULTI_DIM_PROJECTION
106 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
107 
108 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectMinMultiDimArray4Pointers
109 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
110 # define GUM_MULTI_DIM_PROJECTION(x, y) \
111  if (*(x) > *(y)) *(x) = *(y)
112 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
114 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
115 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
116 # undef GUM_MULTI_DIM_PROJECTION
117 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
118 
119 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
120  projectMinMultiDimArray4Pointers
121 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
122 # define GUM_MULTI_DIM_PROJECTION(x, y) \
123  if (*(x) > *(y)) *(x) = *(y)
124 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
126 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
127 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
128 # undef GUM_MULTI_DIM_PROJECTION
129 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
130 
131 // a specialized sum projection function for multiDimArrays
132 
133 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimArray
134 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
135 # define GUM_MULTI_DIM_PROJECTION(x, y) x += y
136 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
138 # undef GUM_MULTI_DIM_PROJECTION_NAME
139 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
140 # undef GUM_MULTI_DIM_PROJECTION
141 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
142 
143 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectSumMultiDimArray
144 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
145 # define GUM_MULTI_DIM_PROJECTION(x, y) x += y
146 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
148 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
149 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
150 # undef GUM_MULTI_DIM_PROJECTION
151 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
152 
153 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectSumMultiDimArray4Pointers
154 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
155 # define GUM_MULTI_DIM_PROJECTION(x, y) *(x) += *(y)
156 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
158 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
159 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
160 # undef GUM_MULTI_DIM_PROJECTION
161 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
162 
163 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
164  projectSumMultiDimArray4Pointers
165 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
166 # define GUM_MULTI_DIM_PROJECTION(x, y) *(x) += *(y)
167 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
169 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
170 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
171 # undef GUM_MULTI_DIM_PROJECTION
172 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
173 
174 // a specialized product projection function for multiDimArrays
175 
176 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimArray
177 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
178 # define GUM_MULTI_DIM_PROJECTION(x, y) (x) *= (y)
179 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
181 # undef GUM_MULTI_DIM_PROJECTION_NAME
182 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
183 # undef GUM_MULTI_DIM_PROJECTION
184 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
185 
186 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectProductMultiDimArray
187 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
188 # define GUM_MULTI_DIM_PROJECTION(x, y) (x) *= (y)
189 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
191 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
192 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
193 # undef GUM_MULTI_DIM_PROJECTION
194 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
195 
196 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME \
197  projectProductMultiDimArray4Pointers
198 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
199 # define GUM_MULTI_DIM_PROJECTION(x, y) (*x) *= (*y)
200 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
202 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
203 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
204 # undef GUM_MULTI_DIM_PROJECTION
205 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
206 
207 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
208  projectProductMultiDimArray4Pointers
209 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
210 # define GUM_MULTI_DIM_PROJECTION(x, y) (*x) *= (*y)
211 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
213 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
214 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
215 # undef GUM_MULTI_DIM_PROJECTION
216 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
217 
218 // a specialized max projection function for multiDimFunctionGraphs
219 
220 # define GUM_MULTI_DIM_PROJECTION_OPERATOR Maximizes
221 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL \
222  (-1 * std::numeric_limits< GUM_SCALAR >::max())
223 
224 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimFunctionGraph
226 # undef GUM_MULTI_DIM_PROJECTION_NAME
227 
228 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
229  projectMaxMultiDimFunctionGraph
231 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
232 
233 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
234 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
235 
236 // a specialized min projection function for multiDimFunctionGraphs
237 
238 # define GUM_MULTI_DIM_PROJECTION_OPERATOR Minimizes
239 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
240 
241 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimFunctionGraph
243 # undef GUM_MULTI_DIM_PROJECTION_NAME
244 
245 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
246  projectMinMultiDimFunctionGraph
248 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
249 
250 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
251 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
252 
253 // a specialized sum projection function for multiDimFunctionGraphs
254 
255 # define GUM_MULTI_DIM_PROJECTION_OPERATOR std::plus
256 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
257 
258 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimFunctionGraph
260 # undef GUM_MULTI_DIM_PROJECTION_NAME
261 
262 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
263  projectSumMultiDimFunctionGraph
265 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
266 
267 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
268 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
269 
270 // a specialized product projection function for multiDimFunctionGraphs
271 
272 # define GUM_MULTI_DIM_PROJECTION_OPERATOR std::multiplies
273 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
274 
275 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimFunctionGraph
277 # undef GUM_MULTI_DIM_PROJECTION_NAME
278 
279 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
280  projectProductMultiDimFunctionGraph
282 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
283 
284 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
285 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
286 
287 // a specialized function for functionally projecting a multiDimArray
288 
289 /*
290 #define GUM_MULTI_DIM_PROJECTION_NAME_F projectFuncMultiDimArray
291 #define GUM_MULTI_DIM_PROJECTION(x,y) f( (x),(y) )
292 #define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR) 0
293 #include <agrum/multidim/utils/patterns/projectionPattern4MultiDimArray.h>
294 #undef GUM_MULTI_DIM_PROJECTION_NAME_F
295 #undef GUM_MULTI_DIM_PROJECTION
296 */
297 
298 // the operators that should be used to select appropriately the functions
299 // to project multiDims
300 
301 // the function to be used to project a MultiDimImplementation using a Max
302 # define GUM_MULTI_DIM_PROJECTION_NAME projectMax
303 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "max"
304 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
306 # undef GUM_MULTI_DIM_PROJECTION_NAME
307 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
308 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
309 
310 // the function to be used to project a MultiDimImplementation using a Min
311 # define GUM_MULTI_DIM_PROJECTION_NAME projectMin
312 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "min"
313 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
315 # undef GUM_MULTI_DIM_PROJECTION_NAME
316 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
317 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
318 
319 // the function to be used to project a MultiDimImplementation using a Sum
320 # define GUM_MULTI_DIM_PROJECTION_NAME projectSum
321 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "sum"
322 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
324 # undef GUM_MULTI_DIM_PROJECTION_NAME
325 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
326 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
327 
328 // the function to be used to project a MultiDimImplementation using a Product
329 # define GUM_MULTI_DIM_PROJECTION_NAME projectProduct
330 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "product"
331 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
333 # undef GUM_MULTI_DIM_PROJECTION_NAME
334 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
335 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
336 
337 // default "basename" functions for projecting MultiDimImplementations
338 
339 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimImplementation
340 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) > (y) ? (x) : (y))
341 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
343 # undef GUM_MULTI_DIM_PROJECTION_NAME
344 # undef GUM_MULTI_DIM_PROJECTION
345 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
346 
347 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimImplementation
348 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) > (y) ? (y) : (x))
349 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
351 # undef GUM_MULTI_DIM_PROJECTION_NAME
352 # undef GUM_MULTI_DIM_PROJECTION
353 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
354 
355 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimImplementation
356 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) + (y))
357 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
359 # undef GUM_MULTI_DIM_PROJECTION_NAME
360 # undef GUM_MULTI_DIM_PROJECTION
361 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
362 
363 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimImplementation
364 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) * (y))
365 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
367 # undef GUM_MULTI_DIM_PROJECTION_NAME
368 # undef GUM_MULTI_DIM_PROJECTION
369 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
370 
371 //
372 // DO NOT FORGET TO REGISTER YOUR BINARY FUNCTIONS
373 //
374 
375 namespace gum {
376  // the function used to register all the above functions
377  template < typename GUM_SCALAR >
378  void projections4MultiDimInit() {
379  static bool first_init = true;
380 
381  if (first_init) {
382  first_init = false;
383 
384  std::string MultiDimArrayString("MultiDimArray");
385  std::string MultiDimFunctionGraphString("MultiDimFunctionGraph");
386  std::string BaseNameString("MultiDimImplementation");
387 
388  // register base functions for multiDimArrays
389  registerProjection< GUM_SCALAR >(
390  "max", MultiDimArrayString, &projectMaxMultiDimArray);
391  registerProjection< GUM_SCALAR >(
392  "min", MultiDimArrayString, &projectMinMultiDimArray);
393  registerProjection< GUM_SCALAR >(
394  "sum", MultiDimArrayString, &projectSumMultiDimArray);
395  registerProjection< GUM_SCALAR >(
396  "product", MultiDimArrayString, &projectProductMultiDimArray);
397 
398  // register base functions for multiDimArrays
399  registerProjection< GUM_SCALAR >(
400  "max", MultiDimFunctionGraphString, &projectMaxMultiDimFunctionGraph);
401  registerProjection< GUM_SCALAR >(
402  "min", MultiDimFunctionGraphString, &projectMinMultiDimFunctionGraph);
403  registerProjection< GUM_SCALAR >(
404  "sum", MultiDimFunctionGraphString, &projectSumMultiDimFunctionGraph);
405  registerProjection< GUM_SCALAR >("product",
406  MultiDimFunctionGraphString,
408 
409  // register default basename functions
410  registerProjection< GUM_SCALAR >(
411  "max", BaseNameString, &projectMaxMultiDimImplementation);
412  registerProjection< GUM_SCALAR >(
413  "min", BaseNameString, &projectMinMultiDimImplementation);
414  registerProjection< GUM_SCALAR >(
415  "sum", BaseNameString, &projectSumMultiDimImplementation);
416  registerProjection< GUM_SCALAR >(
417  "product", BaseNameString, &projectProductMultiDimImplementation);
418  }
419  }
420 
421  // the function used to register all the above functions
422  template < typename GUM_SCALAR >
424  static bool first_init = true;
425 
426  if (first_init) {
427  first_init = false;
428 
429  std::string MultiDimArrayString("MultiDimArray");
430  std::string BaseNameString("MultiDimImplementation");
431 
432  // register base functions for multiDimArrays
433  registerProjection< GUM_SCALAR* >(
434  "max", MultiDimArrayString, &projectMaxMultiDimArray4Pointers);
435  registerProjection< GUM_SCALAR* >(
436  "min", MultiDimArrayString, &projectMinMultiDimArray4Pointers);
437  registerProjection< GUM_SCALAR* >(
438  "sum", MultiDimArrayString, &projectSumMultiDimArray4Pointers);
439  registerProjection< GUM_SCALAR* >(
440  "product", MultiDimArrayString, &projectProductMultiDimArray4Pointers);
441  }
442  }
443 
444 } /* namespace gum */
445 
446 // remove permission to use operatorsPatterns
447 # undef GUM_PROJECTION_PATTERN_ALLOWED
448 
449 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
GUM_SCALAR * projectMinMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Min operator.
MultiDimFunctionGraph< GUM_SCALAR > * projectMinMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const Set< const DiscreteVariable * > &del_vars)
a specialized function for projecting a multiDimFunctionGraph using a Min operator ...
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
GUM_SCALAR projectMinMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Min operator.
GUM_SCALAR projectMaxMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
MultiDimFunctionGraph< GUM_SCALAR > * projectSumMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const Set< const DiscreteVariable * > &del_vars)
a specialized function for projecting a multiDimFunctionGraph using a summation
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
GUM_SCALAR * projectMaxMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
void projections4MultiDimInit()
the function used to register all the projection operators on multidimImplementations over non-pointe...
MultiDimFunctionGraph< GUM_SCALAR > * projectProductMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const Set< const DiscreteVariable * > &del_vars)
a specialized function for projecting a multiDimFunctionGraph using products
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
GUM_SCALAR projectProductMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
a function for projecting a multiDimArray using a Product operatorThe function projects a table over ...
MultiDimFunctionGraph< GUM_SCALAR > * projectMaxMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const Set< const DiscreteVariable * > &del_vars)
a specialized function for projecting a multiDimFunctionGraph using a Max operator ...
GUM_SCALAR projectSumMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
a specialized function for projecting a multiDimArray using a Sum operatorThe function projects a tab...
GUM_SCALAR * projectProductMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
a function for projecting a multiDimArray using a Product operatorThe function projects a table over ...
GUM_SCALAR * projectSumMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
a specialized function for projecting a multiDimArray using a Sum operatorThe function projects a tab...
void pointerProjections4MultiDimInit()
the function used to register all the projections on multidimImplementations over pointers types...