30 #ifndef DOXYGEN_SHOULD_SKIP_THIS 33 # define GUM_OPERATOR_PATTERN_ALLOWED 1 44 # define GUM_MULTI_DIM_OPERATOR_NAME add2MultiDimArrays 45 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) + (y) 47 # undef GUM_MULTI_DIM_OPERATOR_NAME 48 # undef GUM_MULTI_DIM_OPERATOR 50 # define GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME add2MultiDimArrays 51 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) + (y) 53 # undef GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME 54 # undef GUM_MULTI_DIM_OPERATOR 56 # define GUM_MULTI_DIM_OPERATOR_POINTER_NAME add2MultiDimArrays4Pointers 57 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) + (*y)) 59 # undef GUM_MULTI_DIM_OPERATOR_POINTER_NAME 60 # undef GUM_MULTI_DIM_OPERATOR 62 # define GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME \ 63 add2MultiDimArrays4Pointers 64 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) + (*y)) 66 # undef GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME 67 # undef GUM_MULTI_DIM_OPERATOR 71 # define GUM_MULTI_DIM_OPERATOR_NAME subtract2MultiDimArrays 72 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) - (y) 74 # undef GUM_MULTI_DIM_OPERATOR_NAME 75 # undef GUM_MULTI_DIM_OPERATOR 77 # define GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME subtract2MultiDimArrays 78 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) - (y) 80 # undef GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME 81 # undef GUM_MULTI_DIM_OPERATOR 83 # define GUM_MULTI_DIM_OPERATOR_POINTER_NAME subtract2MultiDimArrays4Pointers 84 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) - (*y)) 86 # undef GUM_MULTI_DIM_OPERATOR_POINTER_NAME 87 # undef GUM_MULTI_DIM_OPERATOR 89 # define GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME \ 90 subtract2MultiDimArrays4Pointers 91 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) - (*y)) 93 # undef GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME 94 # undef GUM_MULTI_DIM_OPERATOR 98 # define GUM_MULTI_DIM_OPERATOR_NAME multiply2MultiDimArrays 99 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) * (y) 101 # undef GUM_MULTI_DIM_OPERATOR_NAME 102 # undef GUM_MULTI_DIM_OPERATOR 104 # define GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME multiply2MultiDimArrays 105 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) * (y) 107 # undef GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME 108 # undef GUM_MULTI_DIM_OPERATOR 110 # define GUM_MULTI_DIM_OPERATOR_POINTER_NAME multiply2MultiDimArrays4Pointers 111 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) * (*y)) 113 # undef GUM_MULTI_DIM_OPERATOR_POINTER_NAME 114 # undef GUM_MULTI_DIM_OPERATOR 116 # define GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME \ 117 multiply2MultiDimArrays4Pointers 118 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) * (*y)) 120 # undef GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME 121 # undef GUM_MULTI_DIM_OPERATOR 125 # define GUM_MULTI_DIM_OPERATOR_NAME divide2MultiDimArrays 126 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) / (y) 128 # undef GUM_MULTI_DIM_OPERATOR_NAME 129 # undef GUM_MULTI_DIM_OPERATOR 131 # define GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME divide2MultiDimArrays 132 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) / (y) 134 # undef GUM_MULTI_DIM_OPERATOR_IMPL2ARRAY_NAME 135 # undef GUM_MULTI_DIM_OPERATOR 137 # define GUM_MULTI_DIM_OPERATOR_POINTER_NAME divide2MultiDimArrays4Pointers 138 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) / (*y)) 140 # undef GUM_MULTI_DIM_OPERATOR_POINTER_NAME 141 # undef GUM_MULTI_DIM_OPERATOR 143 # define GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME \ 144 divide2MultiDimArrays4Pointers 145 # define GUM_MULTI_DIM_OPERATOR(x, y) new T((*x) / (*y)) 147 # undef GUM_MULTI_DIM_OPERATOR_POINTER_IMPL2ARRAY_NAME 148 # undef GUM_MULTI_DIM_OPERATOR 158 # define GUM_MULTI_DIM_OPERATOR std::plus 160 # define GUM_MULTI_DIM_OPERATOR_NAME add2MultiDimFunctionGraphs 162 # undef GUM_MULTI_DIM_OPERATOR_NAME 164 # define GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME \ 165 add2MultiDimFunctionGraphs 167 # undef GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME 169 # undef GUM_MULTI_DIM_OPERATOR 175 # define GUM_MULTI_DIM_OPERATOR std::minus 177 # define GUM_MULTI_DIM_OPERATOR_NAME subtract2MultiDimFunctionGraphs 179 # undef GUM_MULTI_DIM_OPERATOR_NAME 181 # define GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME \ 182 subtract2MultiDimFunctionGraphs 184 # undef GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME 186 # undef GUM_MULTI_DIM_OPERATOR 192 # define GUM_MULTI_DIM_OPERATOR std::multiplies 194 # define GUM_MULTI_DIM_OPERATOR_NAME multiply2MultiDimFunctionGraphs 196 # undef GUM_MULTI_DIM_OPERATOR_NAME 198 # define GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME \ 199 multiply2MultiDimFunctionGraphs 201 # undef GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME 203 # undef GUM_MULTI_DIM_OPERATOR 209 # define GUM_MULTI_DIM_OPERATOR std::divides 211 # define GUM_MULTI_DIM_OPERATOR_NAME divide2MultiDimFunctionGraphs 213 # undef GUM_MULTI_DIM_OPERATOR_NAME 215 # define GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME \ 216 divide2MultiDimFunctionGraphs 218 # undef GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME 220 # undef GUM_MULTI_DIM_OPERATOR 226 # define GUM_MULTI_DIM_OPERATOR Maximizes 228 # define GUM_MULTI_DIM_OPERATOR_NAME maximize2MultiDimFunctionGraphs 230 # undef GUM_MULTI_DIM_OPERATOR_NAME 232 # define GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME \ 233 maximize2MultiDimFunctionGraphs 235 # undef GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME 237 # undef GUM_MULTI_DIM_OPERATOR 243 # define GUM_MULTI_DIM_OPERATOR Minimizes 245 # define GUM_MULTI_DIM_OPERATOR_NAME minimize2MultiDimFunctionGraphs 247 # undef GUM_MULTI_DIM_OPERATOR_NAME 249 # define GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME \ 250 minimize2MultiDimFunctionGraphs 252 # undef GUM_MULTI_DIM_OPERATOR_IMPL2DECISION_GRAPH_NAME 254 # undef GUM_MULTI_DIM_OPERATOR 258 # define GUM_MULTI_DIM_OPERATOR_NAME_F combine2MultiDimArrays 259 # define GUM_MULTI_DIM_OPERATOR(x, y) f((x), (y)) 261 # undef GUM_MULTI_DIM_OPERATOR_NAME_F 262 # undef GUM_MULTI_DIM_OPERATOR 268 # define GUM_MULTI_DIM_OPERATOR_NAME operator+ 269 # define GUM_MULTI_DIM_OPERATOR_FUNC_NAME "+" 270 # define GUM_MULTI_DIM_SYMMETRIC_OPERATOR 272 # undef GUM_MULTI_DIM_OPERATOR_NAME 273 # undef GUM_MULTI_DIM_OPERATOR_FUNC_NAME 274 # undef GUM_MULTI_DIM_SYMMETRIC_OPERATOR 277 # define GUM_MULTI_DIM_OPERATOR_NAME operator* 278 # define GUM_MULTI_DIM_OPERATOR_FUNC_NAME "*" 279 # define GUM_MULTI_DIM_SYMMETRIC_OPERATOR 281 # undef GUM_MULTI_DIM_OPERATOR_NAME 282 # undef GUM_MULTI_DIM_OPERATOR_FUNC_NAME 283 # undef GUM_MULTI_DIM_SYMMETRIC_OPERATOR 286 # define GUM_MULTI_DIM_OPERATOR_NAME operator- 287 # define GUM_MULTI_DIM_OPERATOR_FUNC_NAME "-" 289 # undef GUM_MULTI_DIM_OPERATOR_NAME 290 # undef GUM_MULTI_DIM_OPERATOR_FUNC_NAME 293 # define GUM_MULTI_DIM_OPERATOR_NAME operator/ 294 # define GUM_MULTI_DIM_OPERATOR_FUNC_NAME "/" 296 # undef GUM_MULTI_DIM_OPERATOR_NAME 297 # undef GUM_MULTI_DIM_OPERATOR_FUNC_NAME 301 # define GUM_MULTI_DIM_OPERATOR_NAME add2MultiDimImplementations 302 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) + (y) 304 # undef GUM_MULTI_DIM_OPERATOR_NAME 305 # undef GUM_MULTI_DIM_OPERATOR 307 # define GUM_MULTI_DIM_OPERATOR_NAME subtract2MultiDimImplementations 308 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) - (y) 310 # undef GUM_MULTI_DIM_OPERATOR_NAME 311 # undef GUM_MULTI_DIM_OPERATOR 313 # define GUM_MULTI_DIM_OPERATOR_NAME multiply2MultiDimImplementations 314 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) * (y) 316 # undef GUM_MULTI_DIM_OPERATOR_NAME 317 # undef GUM_MULTI_DIM_OPERATOR 319 # define GUM_MULTI_DIM_OPERATOR_NAME divide2MultiDimImplementations 320 # define GUM_MULTI_DIM_OPERATOR(x, y) (x) / (y) 322 # undef GUM_MULTI_DIM_OPERATOR_NAME 323 # undef GUM_MULTI_DIM_OPERATOR 332 template <
typename GUM_SCALAR >
334 static bool first_init =
true;
339 std::string MultiDimArrayString(
"MultiDimArray");
340 std::string MultiDimFunctionGraphString(
"MultiDimFunctionGraph");
341 std::string BaseNameString(
"MultiDimImplementation");
344 registerOperator< GUM_SCALAR >(
346 registerOperator< GUM_SCALAR >(
348 registerOperator< GUM_SCALAR >(
350 registerOperator< GUM_SCALAR >(
354 registerOperator< GUM_SCALAR >(
"+",
355 MultiDimFunctionGraphString,
356 MultiDimFunctionGraphString,
358 registerOperator< GUM_SCALAR >(
"-",
359 MultiDimFunctionGraphString,
360 MultiDimFunctionGraphString,
362 registerOperator< GUM_SCALAR >(
"*",
363 MultiDimFunctionGraphString,
364 MultiDimFunctionGraphString,
366 registerOperator< GUM_SCALAR >(
"/",
367 MultiDimFunctionGraphString,
368 MultiDimFunctionGraphString,
372 registerOperator< GUM_SCALAR >(
373 "+", BaseNameString, BaseNameString, &add2MultiDimImplementations);
374 registerOperator< GUM_SCALAR >(
375 "-", BaseNameString, BaseNameString, &subtract2MultiDimImplementations);
376 registerOperator< GUM_SCALAR >(
377 "*", BaseNameString, BaseNameString, &multiply2MultiDimImplementations);
378 registerOperator< GUM_SCALAR >(
379 "/", BaseNameString, BaseNameString, ÷2MultiDimImplementations);
384 template <
typename GUM_SCALAR >
386 static bool first_init =
true;
391 std::string MultiDimArrayString(
"MultiDimArray");
392 std::string BaseNameString(
"MultiDimImplementation");
395 registerOperator< GUM_SCALAR* >(
"+",
399 registerOperator< GUM_SCALAR* >(
"-",
403 registerOperator< GUM_SCALAR* >(
"*",
407 registerOperator< GUM_SCALAR* >(
"/",
417 # undef GUM_OPERATOR_PATTERN_ALLOWED MultiDimArray< T > * multiply2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
void operators4MultiDimInit()
the function used to register all the operators on multidimImplementations over non-pointers types...
MultiDimArray< T *> * divide2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for dividing two multiDimArraysThe function produces a tensorial division of t...
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
MultiDimArray< T *> * add2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
MultiDimFunctionGraph< T > * subtract2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
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.
MultiDimArray< T *> * subtract2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
MultiDimArray< T *> * multiply2MultiDimArrays4Pointers(const MultiDimArray< T * > *t1, const MultiDimArray< T * > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
void pointerOperators4MultiDimInit()
the function used to register all the operators on multidimImplementations over pointers types...
MultiDimFunctionGraph< T > * multiply2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for multiplying two multiDimArraysThe function produces a tensorial product of...
MultiDimArray< T > * add2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
MultiDimArray< T > * subtract2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for subtracting two multiDimArraysThe function produces a tensorial subtractio...
MultiDimFunctionGraph< T > * add2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for summing two multiDimArraysThe function produces a tensorial addition of t1...
MultiDimFunctionGraph< T > * divide2MultiDimFunctionGraphs(const MultiDimFunctionGraph< T > *t1, const MultiDimFunctionGraph< T > *t2)
a specialized function for dividing two multiDimArraysThe function produces a tensorial division of t...
MultiDimArray< T > * divide2MultiDimArrays(const MultiDimArray< T > *t1, const MultiDimArray< T > *t2)
a specialized function for dividing two multiDimArraysThe function produces a tensorial division of t...
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.