26 #ifndef DOXYGEN_SHOULD_SKIP_THIS 29 # define GUM_PROJECTION_PATTERN_ALLOWED 1 36 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimArray 37 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE 38 # define GUM_MULTI_DIM_PROJECTION(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 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) \ 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 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 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 83 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimArray 84 # define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE 85 # define GUM_MULTI_DIM_PROJECTION(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 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) \ 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 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 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 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 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 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 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 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 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 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 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 217 # define GUM_MULTI_DIM_PROJECTION_OPERATOR Maximizes 218 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL \ 219 (-1 * std::numeric_limits< GUM_SCALAR >::max()) 221 # define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimFunctionGraph 223 # undef GUM_MULTI_DIM_PROJECTION_NAME 225 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \ 226 projectMaxMultiDimFunctionGraph 228 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME 230 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR 231 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL 235 # define GUM_MULTI_DIM_PROJECTION_OPERATOR Minimizes 236 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max() 238 # define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimFunctionGraph 240 # undef GUM_MULTI_DIM_PROJECTION_NAME 242 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \ 243 projectMinMultiDimFunctionGraph 245 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME 247 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR 248 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL 252 # define GUM_MULTI_DIM_PROJECTION_OPERATOR std::plus 253 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0 255 # define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimFunctionGraph 257 # undef GUM_MULTI_DIM_PROJECTION_NAME 259 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \ 260 projectSumMultiDimFunctionGraph 262 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME 264 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR 265 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL 269 # define GUM_MULTI_DIM_PROJECTION_OPERATOR std::multiplies 270 # define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1 272 # define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimFunctionGraph 274 # undef GUM_MULTI_DIM_PROJECTION_NAME 276 # define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME \ 277 projectProductMultiDimFunctionGraph 279 # undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME 281 # undef GUM_MULTI_DIM_PROJECTION_OPERATOR 282 # undef GUM_MULTI_DIM_PROJECTION_NEUTRAL 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 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 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 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 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 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 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 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 374 template <
typename GUM_SCALAR >
376 static bool first_init =
true;
381 std::string MultiDimArrayString(
"MultiDimArray");
382 std::string MultiDimFunctionGraphString(
"MultiDimFunctionGraph");
383 std::string BaseNameString(
"MultiDimImplementation");
386 registerProjection< GUM_SCALAR >(
388 registerProjection< GUM_SCALAR >(
390 registerProjection< GUM_SCALAR >(
392 registerProjection< GUM_SCALAR >(
396 registerProjection< GUM_SCALAR >(
398 registerProjection< GUM_SCALAR >(
400 registerProjection< GUM_SCALAR >(
402 registerProjection< GUM_SCALAR >(
"product",
403 MultiDimFunctionGraphString,
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);
419 template <
typename GUM_SCALAR >
421 static bool first_init =
true;
426 std::string MultiDimArrayString(
"MultiDimArray");
427 std::string BaseNameString(
"MultiDimImplementation");
430 registerProjection< GUM_SCALAR* >(
432 registerProjection< GUM_SCALAR* >(
434 registerProjection< GUM_SCALAR* >(
436 registerProjection< GUM_SCALAR* >(
444 # undef GUM_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.
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
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...