51#ifndef DOXYGEN_SHOULD_SKIP_THIS
54# define GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 1
60# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMaxMultiDimArray
61# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
63# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::lowest()
65# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
66# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
67# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
69# define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectMaxMultiDimArray
70# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
72# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::lowest()
74# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME
75# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
76# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
78# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectMaxMultiDimArray4Pointers
79# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
80 if (*(y) > *(x)) *(x) = *(y)
81# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::lowest()
83# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
84# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
85# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
87# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME projectMaxMultiDimArray4Pointers
88# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
89 if (*(y) > *(x)) *(x) = *(y)
90# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::lowest()
92# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME
93# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
94# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
98# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMinMultiDimArray
99# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
101# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
103# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
104# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
105# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
107# define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectMinMultiDimArray
108# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
110# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
112# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME
113# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
114# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
116# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectMinMultiDimArray4Pointers
117# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
118 if (*(x) > *(y)) *(x) = *(y)
119# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
121# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
122# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
123# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
125# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME projectMinMultiDimArray4Pointers
126# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
127 if (*(x) > *(y)) *(x) = *(y)
128# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
130# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME
131# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
132# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
136# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSumMultiDimArray
137# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y
138# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
140# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
141# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
142# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
144# define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectSumMultiDimArray
145# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y
146# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
148# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME
149# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
150# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
152# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectSumMultiDimArray4Pointers
153# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) *(x) += *(y)
154# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
156# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
157# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
158# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
160# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME projectSumMultiDimArray4Pointers
161# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) *(x) += *(y)
162# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
164# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME
165# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
166# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
170# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectProductMultiDimArray
171# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (x) *= (y)
172# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
174# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
175# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
176# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
178# define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectProductMultiDimArray
179# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (x) *= (y)
180# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
182# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME
183# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
184# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
186# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectProductMultiDimArray4Pointers
187# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (*x) *= (*y)
188# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
190# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME
191# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
192# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
194# define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME \
195 projectProductMultiDimArray4Pointers
196# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (*x) *= (*y)
197# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
199# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME
200# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
201# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
207# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMax
208# define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "max"
210# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
211# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME
214# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMin
215# define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "min"
217# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
218# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME
221# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSum
222# define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "sum"
224# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
225# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME
228# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectProduct
229# define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "product"
231# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
232# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME
236# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMaxMultiDimImplementation
237# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
239# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::lowest()
241# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
242# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
243# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
245# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMinMultiDimImplementation
246# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \
248# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
250# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
251# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
252# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
254# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSumMultiDimImplementation
255# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y
256# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
258# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
259# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
260# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
262# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectProductMultiDimImplementation
263# define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x *= y
264# define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
266# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME
267# undef GUM_MULTI_DIM_COMPLETE_PROJECTION
268# undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL
277 template <
typename GUM_SCALAR >
280 static std::once_flag first;
281 std::call_once(first, []() {
282 std::string MultiDimArrayString(
"MultiDimArray");
283 std::string BaseNameString(
"MultiDimImplementation");
302 &projectMaxMultiDimImplementation);
305 &projectMinMultiDimImplementation);
308 &projectSumMultiDimImplementation);
311 &projectProductMultiDimImplementation);
316 template <
typename GUM_SCALAR >
319 static std::once_flag first;
320 std::call_once(first, []() {
321 std::string MultiDimArrayString(
"MultiDimArray");
322 std::string BaseNameString(
"MultiDimImplementation");
343# undef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED
the pattern used by all the "basename" projections of multidim tables over all their variables
the pattern used by all the projections of multidim tables over all their variables
the pattern used by all the MultiDimImplementation projections
A container for registering complete projection functions on multiDimImplementations,...
void pointerCompleteProjections4MultiDimInit()
The function used to register all the complete projections on multidimImplementations over pointers t...
GUM_SCALAR projectProductMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
a function for projecting a multiDimArray using a Product operator
GUM_SCALAR projectSumMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
a specialized function for projecting a multiDimArray using a Sum operator
void registerCompleteProjection(const std::string &projection_name, const std::string &type_multidim, typename CompleteProjectionRegister4MultiDim< GUM_SCALAR >::CompleteProjectionPtr function)
A function to more easily register new projection functions in MultiDims.
void completeProjections4MultiDimInit()
the function used to register all the complete projection operators on multidimImplementations over n...
GUM_SCALAR * projectMaxMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
GUM_SCALAR projectMinMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Min operator.
GUM_SCALAR * projectProductMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
a function for projecting a multiDimArray using a Product operator
GUM_SCALAR projectMaxMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
GUM_SCALAR * projectSumMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
a specialized function for projecting a multiDimArray using a Sum operator
GUM_SCALAR * projectMinMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Min operator.
gum is the global namespace for all aGrUM entities