28 #ifndef DOXYGEN_SHOULD_SKIP_THIS 31 # define GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 1 37 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMaxMultiDimArray 38 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 40 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 41 std::numeric_limits< GUM_SCALAR >::min() 43 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 44 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 45 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 47 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectMaxMultiDimArray 48 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 50 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 51 std::numeric_limits< GUM_SCALAR >::min() 53 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 54 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 55 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 57 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME \ 58 projectMaxMultiDimArray4Pointers 59 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 60 if (*(y) > *(x)) *(x) = *(y) 61 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 62 std::numeric_limits< GUM_SCALAR >::min() 64 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 65 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 66 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 68 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME \ 69 projectMaxMultiDimArray4Pointers 70 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 71 if (*(y) > *(x)) *(x) = *(y) 72 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 73 std::numeric_limits< GUM_SCALAR >::min() 75 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 76 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 77 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 81 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMinMultiDimArray 82 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 84 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 85 std::numeric_limits< GUM_SCALAR >::max() 87 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 88 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 89 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 91 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectMinMultiDimArray 92 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 94 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 95 std::numeric_limits< GUM_SCALAR >::max() 97 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 98 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 99 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 101 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME \ 102 projectMinMultiDimArray4Pointers 103 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 104 if (*(x) > *(y)) *(x) = *(y) 105 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 106 std::numeric_limits< GUM_SCALAR >::max() 108 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 109 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 110 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 112 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME \ 113 projectMinMultiDimArray4Pointers 114 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 115 if (*(x) > *(y)) *(x) = *(y) 116 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 117 std::numeric_limits< GUM_SCALAR >::max() 119 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 120 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 121 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 125 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSumMultiDimArray 126 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y 127 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0 129 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 130 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 131 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 133 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectSumMultiDimArray 134 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y 135 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0 137 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 138 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 139 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 141 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME \ 142 projectSumMultiDimArray4Pointers 143 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) *(x) += *(y) 144 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0 146 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 147 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 148 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 150 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME \ 151 projectSumMultiDimArray4Pointers 152 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) *(x) += *(y) 153 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0 155 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 156 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 157 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 161 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectProductMultiDimArray 162 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (x) *= (y) 163 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1 165 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 166 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 167 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 169 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME \ 170 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_IMPL2ARRAY_NAME 175 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 176 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 178 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME \ 179 projectProductMultiDimArray4Pointers 180 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (*x) *= (*y) 181 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1 183 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 184 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 185 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 187 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME \ 188 projectProductMultiDimArray4Pointers 189 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (*x) *= (*y) 190 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1 192 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 193 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 194 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 200 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMax 201 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "max" 203 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 204 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME 207 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMin 208 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "min" 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 projectSum 215 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "sum" 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 projectProduct 222 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "product" 224 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 225 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME 229 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMaxMultiDimImplementation 230 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 232 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 233 std::numeric_limits< GUM_SCALAR >::min() 235 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 236 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 237 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 239 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMinMultiDimImplementation 240 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) \ 242 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL \ 243 std::numeric_limits< GUM_SCALAR >::max() 245 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 246 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 247 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 249 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSumMultiDimImplementation 250 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y 251 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0 253 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 254 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 255 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 257 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME \ 258 projectProductMultiDimImplementation 259 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x *= y 260 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1 262 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 263 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 264 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 273 template <
typename GUM_SCALAR >
275 static bool first_init =
true;
280 std::string MultiDimArrayString(
"MultiDimArray");
281 std::string BaseNameString(
"MultiDimImplementation");
284 registerCompleteProjection< GUM_SCALAR >(
286 registerCompleteProjection< GUM_SCALAR >(
288 registerCompleteProjection< GUM_SCALAR >(
290 registerCompleteProjection< GUM_SCALAR >(
294 registerCompleteProjection< GUM_SCALAR >(
295 "max", BaseNameString, &projectMaxMultiDimImplementation);
296 registerCompleteProjection< GUM_SCALAR >(
297 "min", BaseNameString, &projectMinMultiDimImplementation);
298 registerCompleteProjection< GUM_SCALAR >(
299 "sum", BaseNameString, &projectSumMultiDimImplementation);
300 registerCompleteProjection< GUM_SCALAR >(
301 "product", BaseNameString, &projectProductMultiDimImplementation);
306 template <
typename GUM_SCALAR >
308 static bool first_init =
true;
313 std::string MultiDimArrayString(
"MultiDimArray");
314 std::string BaseNameString(
"MultiDimImplementation");
317 registerCompleteProjection< GUM_SCALAR* >(
319 registerCompleteProjection< GUM_SCALAR* >(
321 registerCompleteProjection< GUM_SCALAR* >(
323 registerCompleteProjection< GUM_SCALAR* >(
331 # undef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 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
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.
the pattern used by all the projections of multidim tables over all their variables ...
GUM_SCALAR * projectMaxMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
void completeProjections4MultiDimInit()
the function used to register all the complete projection operators on multidimImplementations over n...
A container for registering complete projection functions on multiDimImplementations, i.e., projections over all variables.
the pattern used by all the MultiDimImplementation projections
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 ...
void pointerCompleteProjections4MultiDimInit()
The function used to register all the complete projections on multidimImplementations over pointers t...
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...
the pattern used by all the "basename" projections of multidim tables over all their variables ...
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...