30 #ifndef DOXYGEN_SHOULD_SKIP_THIS 33 # define GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED 1
35 # include <agrum/tools/multidim/utils/operators/completeProjectionRegister4MultiDim.h> 39 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMaxMultiDimArray 40 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 42 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min() 43 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 44 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 45 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 46 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 48 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectMaxMultiDimArray 49 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 51 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min() 52 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 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 projectMaxMultiDimArray4Pointers 58 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 59 if (*(y) > *(x)) *(x) = *(y) 60 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min() 61 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 62 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 63 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 64 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 66 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME projectMaxMultiDimArray4Pointers 67 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 68 if (*(y) > *(x)) *(x) = *(y) 69 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min() 70 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 71 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 72 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 73 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 77 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMinMultiDimArray 78 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 80 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max() 81 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 82 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 83 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 84 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 86 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectMinMultiDimArray 87 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 89 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max() 90 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 91 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 92 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 93 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 95 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectMinMultiDimArray4Pointers 96 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 97 if (*(x) > *(y)) *(x) = *(y) 98 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max() 99 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 100 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 101 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 102 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 104 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME projectMinMultiDimArray4Pointers 105 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 106 if (*(x) > *(y)) *(x) = *(y) 107 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max() 108 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 109 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 110 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 111 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 115 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSumMultiDimArray 116 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y 117 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
118 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 119 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 120 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 121 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 123 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectSumMultiDimArray 124 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y 125 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
126 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 127 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 128 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 129 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 131 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectSumMultiDimArray4Pointers 132 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) *(x) += *(y) 133 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
134 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 135 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 136 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 137 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 139 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME projectSumMultiDimArray4Pointers 140 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) *(x) += *(y) 141 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
142 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 143 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 144 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 145 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 149 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectProductMultiDimArray 150 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (x) *= (y) 151 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
152 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 153 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 154 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 155 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 157 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME projectProductMultiDimArray 158 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (x) *= (y) 159 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
160 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 161 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_IMPL2ARRAY_NAME 162 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 163 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 165 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME projectProductMultiDimArray4Pointers 166 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (*x) *= (*y) 167 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
168 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 169 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_NAME 170 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 171 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 173 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 174 projectProductMultiDimArray4Pointers 175 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) (*x) *= (*y) 176 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
177 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimArray.h> 178 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_POINTER_IMPL2ARRAY_NAME 179 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 180 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 186 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMax 187 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "max" 188 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimImplementation.h> 189 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 190 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME 193 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMin 194 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "min" 195 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimImplementation.h> 196 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 197 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME 200 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSum 201 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "sum" 202 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimImplementation.h> 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 projectProduct 208 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME "product" 209 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4MultiDimImplementation.h> 210 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 211 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_FUNC_NAME 215 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMaxMultiDimImplementation 216 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 218 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min() 219 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4BaseName.h> 220 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 221 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 222 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 224 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectMinMultiDimImplementation 225 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) 227 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max() 228 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4BaseName.h> 229 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 230 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 231 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 233 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectSumMultiDimImplementation 234 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x += y 235 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)0
236 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4BaseName.h> 237 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 238 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 239 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 241 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME projectProductMultiDimImplementation 242 # define GUM_MULTI_DIM_COMPLETE_PROJECTION(x, y) x *= y 243 # define GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL (GUM_SCALAR)1
244 # include <agrum/tools/multidim/utils/patterns/completeProjectionPattern4BaseName.h> 245 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NAME 246 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION 247 # undef GUM_MULTI_DIM_COMPLETE_PROJECTION_NEUTRAL 256 template <
typename GUM_SCALAR >
258 static bool first_init =
true;
263 std::string MultiDimArrayString(
"MultiDimArray");
264 std::string BaseNameString(
"MultiDimImplementation");
267 registerCompleteProjection< GUM_SCALAR >(
"max",
269 &projectMaxMultiDimArray);
270 registerCompleteProjection< GUM_SCALAR >(
"min",
272 &projectMinMultiDimArray);
273 registerCompleteProjection< GUM_SCALAR >(
"sum",
275 &projectSumMultiDimArray);
276 registerCompleteProjection< GUM_SCALAR >(
"product",
278 &projectProductMultiDimArray);
281 registerCompleteProjection< GUM_SCALAR >(
"max",
283 &projectMaxMultiDimImplementation);
284 registerCompleteProjection< GUM_SCALAR >(
"min",
286 &projectMinMultiDimImplementation);
287 registerCompleteProjection< GUM_SCALAR >(
"sum",
289 &projectSumMultiDimImplementation);
290 registerCompleteProjection< GUM_SCALAR >(
"product",
292 &projectProductMultiDimImplementation);
297 template <
typename GUM_SCALAR >
299 static bool first_init =
true;
304 std::string MultiDimArrayString(
"MultiDimArray");
305 std::string BaseNameString(
"MultiDimImplementation");
308 registerCompleteProjection< GUM_SCALAR* >(
"max",
310 &projectMaxMultiDimArray4Pointers);
311 registerCompleteProjection< GUM_SCALAR* >(
"min",
313 &projectMinMultiDimArray4Pointers);
314 registerCompleteProjection< GUM_SCALAR* >(
"sum",
316 &projectSumMultiDimArray4Pointers);
317 registerCompleteProjection< GUM_SCALAR* >(
"product",
319 &projectProductMultiDimArray4Pointers);
326 # undef GUM_COMPLETE_PROJECTION_PATTERN_ALLOWED INLINE void emplace(Args &&... args)
void completeProjections4MultiDimInit()
the function used to register all the complete projection operators on multidimImplementations over n...
void pointerCompleteProjections4MultiDimInit()
The function used to register all the complete projections on multidimImplementations over pointers t...