aGrUM  0.14.2
projections4MultiDim_tpl.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005 by Pierre-Henri WUILLEMIN et Christophe GONZALES *
3  * {prenom.nom}_at_lip6.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
26 #ifndef DOXYGEN_SHOULD_SKIP_THIS
27 
28 // allow projectionPatterns to be used
29 # define GUM_PROJECTION_PATTERN_ALLOWED 1
30 
31 # include <agrum/core/functors.h>
33 
34 // a specialized max projection function for multiDimArrays
35 
36 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimArray
37 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
38 # define GUM_MULTI_DIM_PROJECTION(x, y) \
39  if (y > x) x = y
40 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
42 # undef GUM_MULTI_DIM_PROJECTION_NAME
43 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
44 # undef GUM_MULTI_DIM_PROJECTION
45 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
46 
47 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectMaxMultiDimArray
48 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
49 # define GUM_MULTI_DIM_PROJECTION(x, y) \
50  if (y > x) x = y
51 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
53 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
54 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
55 # undef GUM_MULTI_DIM_PROJECTION
56 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
57 
58 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectMaxMultiDimArray4Pointers
59 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
60 # define GUM_MULTI_DIM_PROJECTION(x, y) \
61  if (*(y) > *(x)) *(x) = *(y)
62 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
64 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
65 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
66 # undef GUM_MULTI_DIM_PROJECTION
67 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
68 
69 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
70  projectMaxMultiDimArray4Pointers
71 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
72 # define GUM_MULTI_DIM_PROJECTION(x, y) \
73  if (*(y) > *(x)) *(x) = *(y)
74 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
76 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
77 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
78 # undef GUM_MULTI_DIM_PROJECTION
79 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
80 
81 // a specialized min projection function for multiDimArrays
82 
83 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimArray
84 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
85 # define GUM_MULTI_DIM_PROJECTION(x, y) \
86  if (x > y) x = y
87 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
89 # undef GUM_MULTI_DIM_PROJECTION_NAME
90 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
91 # undef GUM_MULTI_DIM_PROJECTION
92 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
93 
94 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectMinMultiDimArray
95 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
96 # define GUM_MULTI_DIM_PROJECTION(x, y) \
97  if (x > y) x = y
98 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
100 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
101 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
102 # undef GUM_MULTI_DIM_PROJECTION
103 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
104 
105 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectMinMultiDimArray4Pointers
106 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
107 # define GUM_MULTI_DIM_PROJECTION(x, y) \
108  if (*(x) > *(y)) *(x) = *(y)
109 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
111 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
112 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
113 # undef GUM_MULTI_DIM_PROJECTION
114 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
115 
116 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
117  projectMinMultiDimArray4Pointers
118 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
119 # define GUM_MULTI_DIM_PROJECTION(x, y) \
120  if (*(x) > *(y)) *(x) = *(y)
121 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
123 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
124 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
125 # undef GUM_MULTI_DIM_PROJECTION
126 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
127 
128 // a specialized sum projection function for multiDimArrays
129 
130 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimArray
131 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
132 # define GUM_MULTI_DIM_PROJECTION(x, y) x += y
133 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
135 # undef GUM_MULTI_DIM_PROJECTION_NAME
136 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
137 # undef GUM_MULTI_DIM_PROJECTION
138 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
139 
140 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectSumMultiDimArray
141 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
142 # define GUM_MULTI_DIM_PROJECTION(x, y) x += y
143 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
145 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
146 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
147 # undef GUM_MULTI_DIM_PROJECTION
148 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
149 
150 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectSumMultiDimArray4Pointers
151 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
152 # define GUM_MULTI_DIM_PROJECTION(x, y) *(x) += *(y)
153 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
155 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
156 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
157 # undef GUM_MULTI_DIM_PROJECTION
158 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
159 
160 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
161  projectSumMultiDimArray4Pointers
162 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
163 # define GUM_MULTI_DIM_PROJECTION(x, y) *(x) += *(y)
164 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
166 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
167 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
168 # undef GUM_MULTI_DIM_PROJECTION
169 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
170 
171 // a specialized product projection function for multiDimArrays
172 
173 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimArray
174 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
175 # define GUM_MULTI_DIM_PROJECTION(x, y) (x) *= (y)
176 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
178 # undef GUM_MULTI_DIM_PROJECTION_NAME
179 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
180 # undef GUM_MULTI_DIM_PROJECTION
181 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
182 
183 # define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectProductMultiDimArray
184 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
185 # define GUM_MULTI_DIM_PROJECTION(x, y) (x) *= (y)
186 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
188 # undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
189 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
190 # undef GUM_MULTI_DIM_PROJECTION
191 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
192 
193 # define GUM_MULTI_DIM_PROJECTION_POINTER_NAME \
194  projectProductMultiDimArray4Pointers
195 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
196 # define GUM_MULTI_DIM_PROJECTION(x, y) (*x) *= (*y)
197 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
199 # undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
200 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
201 # undef GUM_MULTI_DIM_PROJECTION
202 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
203 
204 # define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME \
205  projectProductMultiDimArray4Pointers
206 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
207 # define GUM_MULTI_DIM_PROJECTION(x, y) (*x) *= (*y)
208 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
210 # undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
211 # undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
212 # undef GUM_MULTI_DIM_PROJECTION
213 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
214 
215 // a specialized max projection function for multiDimFunctionGraphs
216 
217 # define GUM_MULTI_DIM_PROJECTION_OPERATOR Maximizes
218 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL \
219  (-1 * std::numeric_limits< GUM_SCALAR >::max())
220 
221 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimFunctionGraph
223 # undef GUM_MULTI_DIM_PROJECTION_NAME
224 
225 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
226  projectMaxMultiDimFunctionGraph
228 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
229 
230 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
231 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
232 
233 // a specialized min projection function for multiDimFunctionGraphs
234 
235 # define GUM_MULTI_DIM_PROJECTION_OPERATOR Minimizes
236 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
237 
238 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimFunctionGraph
240 # undef GUM_MULTI_DIM_PROJECTION_NAME
241 
242 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
243  projectMinMultiDimFunctionGraph
245 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
246 
247 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
248 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
249 
250 // a specialized sum projection function for multiDimFunctionGraphs
251 
252 # define GUM_MULTI_DIM_PROJECTION_OPERATOR std::plus
253 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
254 
255 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimFunctionGraph
257 # undef GUM_MULTI_DIM_PROJECTION_NAME
258 
259 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
260  projectSumMultiDimFunctionGraph
262 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
263 
264 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
265 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
266 
267 // a specialized product projection function for multiDimFunctionGraphs
268 
269 # define GUM_MULTI_DIM_PROJECTION_OPERATOR std::multiplies
270 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
271 
272 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimFunctionGraph
274 # undef GUM_MULTI_DIM_PROJECTION_NAME
275 
276 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \
277  projectProductMultiDimFunctionGraph
279 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
280 
281 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR
282 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
283 
284 // a specialized function for functionally projecting a multiDimArray
285 
286 /*
287 #define GUM_MULTI_DIM_PROJECTION_NAME_F projectFuncMultiDimArray
288 #define GUM_MULTI_DIM_PROJECTION(x,y) f( (x),(y) )
289 #define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR) 0
290 #include <agrum/multidim/utils/patterns/projectionPattern4MultiDimArray.h>
291 #undef GUM_MULTI_DIM_PROJECTION_NAME_F
292 #undef GUM_MULTI_DIM_PROJECTION
293 */
294 
295 // the operators that should be used to select appropriately the functions
296 // to project multiDims
297 
298 // the function to be used to project a MultiDimImplementation using a Max
299 # define GUM_MULTI_DIM_PROJECTION_NAME projectMax
300 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "max"
301 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
303 # undef GUM_MULTI_DIM_PROJECTION_NAME
304 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
305 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
306 
307 // the function to be used to project a MultiDimImplementation using a Min
308 # define GUM_MULTI_DIM_PROJECTION_NAME projectMin
309 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "min"
310 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
312 # undef GUM_MULTI_DIM_PROJECTION_NAME
313 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
314 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
315 
316 // the function to be used to project a MultiDimImplementation using a Sum
317 # define GUM_MULTI_DIM_PROJECTION_NAME projectSum
318 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "sum"
319 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
321 # undef GUM_MULTI_DIM_PROJECTION_NAME
322 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
323 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
324 
325 // the function to be used to project a MultiDimImplementation using a Product
326 # define GUM_MULTI_DIM_PROJECTION_NAME projectProduct
327 # define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "product"
328 # define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
330 # undef GUM_MULTI_DIM_PROJECTION_NAME
331 # undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
332 # undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
333 
334 // default "basename" functions for projecting MultiDimImplementations
335 
336 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimImplementation
337 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) > (y) ? (x) : (y))
338 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
340 # undef GUM_MULTI_DIM_PROJECTION_NAME
341 # undef GUM_MULTI_DIM_PROJECTION
342 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
343 
344 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimImplementation
345 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) > (y) ? (y) : (x))
346 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
348 # undef GUM_MULTI_DIM_PROJECTION_NAME
349 # undef GUM_MULTI_DIM_PROJECTION
350 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
351 
352 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimImplementation
353 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) + (y))
354 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
356 # undef GUM_MULTI_DIM_PROJECTION_NAME
357 # undef GUM_MULTI_DIM_PROJECTION
358 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
359 
360 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimImplementation
361 # define GUM_MULTI_DIM_PROJECTION(x, y) ((x) * (y))
362 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
364 # undef GUM_MULTI_DIM_PROJECTION_NAME
365 # undef GUM_MULTI_DIM_PROJECTION
366 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
367 
368 //
369 // DO NOT FORGET TO REGISTER YOUR BINARY FUNCTIONS
370 //
371 
372 namespace gum {
373  // the function used to register all the above functions
374  template < typename GUM_SCALAR >
375  void projections4MultiDimInit() {
376  static bool first_init = true;
377 
378  if (first_init) {
379  first_init = false;
380 
381  std::string MultiDimArrayString("MultiDimArray");
382  std::string MultiDimFunctionGraphString("MultiDimFunctionGraph");
383  std::string BaseNameString("MultiDimImplementation");
384 
385  // register base functions for multiDimArrays
386  registerProjection< GUM_SCALAR >(
387  "max", MultiDimArrayString, &projectMaxMultiDimArray);
388  registerProjection< GUM_SCALAR >(
389  "min", MultiDimArrayString, &projectMinMultiDimArray);
390  registerProjection< GUM_SCALAR >(
391  "sum", MultiDimArrayString, &projectSumMultiDimArray);
392  registerProjection< GUM_SCALAR >(
393  "product", MultiDimArrayString, &projectProductMultiDimArray);
394 
395  // register base functions for multiDimArrays
396  registerProjection< GUM_SCALAR >(
397  "max", MultiDimFunctionGraphString, &projectMaxMultiDimFunctionGraph);
398  registerProjection< GUM_SCALAR >(
399  "min", MultiDimFunctionGraphString, &projectMinMultiDimFunctionGraph);
400  registerProjection< GUM_SCALAR >(
401  "sum", MultiDimFunctionGraphString, &projectSumMultiDimFunctionGraph);
402  registerProjection< GUM_SCALAR >("product",
403  MultiDimFunctionGraphString,
405 
406  // register default basename functions
407  registerProjection< GUM_SCALAR >(
408  "max", BaseNameString, &projectMaxMultiDimImplementation);
409  registerProjection< GUM_SCALAR >(
410  "min", BaseNameString, &projectMinMultiDimImplementation);
411  registerProjection< GUM_SCALAR >(
412  "sum", BaseNameString, &projectSumMultiDimImplementation);
413  registerProjection< GUM_SCALAR >(
414  "product", BaseNameString, &projectProductMultiDimImplementation);
415  }
416  }
417 
418  // the function used to register all the above functions
419  template < typename GUM_SCALAR >
421  static bool first_init = true;
422 
423  if (first_init) {
424  first_init = false;
425 
426  std::string MultiDimArrayString("MultiDimArray");
427  std::string BaseNameString("MultiDimImplementation");
428 
429  // register base functions for multiDimArrays
430  registerProjection< GUM_SCALAR* >(
431  "max", MultiDimArrayString, &projectMaxMultiDimArray4Pointers);
432  registerProjection< GUM_SCALAR* >(
433  "min", MultiDimArrayString, &projectMinMultiDimArray4Pointers);
434  registerProjection< GUM_SCALAR* >(
435  "sum", MultiDimArrayString, &projectSumMultiDimArray4Pointers);
436  registerProjection< GUM_SCALAR* >(
437  "product", MultiDimArrayString, &projectProductMultiDimArray4Pointers);
438  }
439  }
440 
441 } /* namespace gum */
442 
443 // remove permission to use operatorsPatterns
444 # undef GUM_PROJECTION_PATTERN_ALLOWED
445 
446 #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 ...
A container for registering projection functions on multiDimImplementations.
the pattern used by all the MultiDimImplementation projections
gum is the global namespace for all aGrUM entities
Definition: agrum.h:25
This files contains several function objects that are not (yet) defined in the STL.
the pattern used by all the projections of multidimensional tables
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
the pattern used by all the "basename" projections of multidim tables
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
the pattern used by all the projections of multidimensional tables
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...