30 const double* dataInput,
32 std::vector<bool>& flagInitial,
33 bool ignoreMissingValue,
bool firstPass)
35 if (ignoreMissingValue)
37 int nbLocalIndex = localIndex.size();
38 int currentlocalIndex = 0;
39 if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN();
40 for (
int idx = 0; idx < nbLocalIndex; ++idx)
42 currentlocalIndex = localIndex[idx].first;
45 if (flagInitial[currentlocalIndex])
47 dataOut(currentlocalIndex) = *(dataInput + idx);
48 flagInitial[currentlocalIndex] =
false;
52 dataOut(currentlocalIndex) = std::min(*(dataInput + idx), dataOut(currentlocalIndex));
59 int nbLocalIndex = localIndex.size();
60 int currentlocalIndex = 0;
61 for (
int idx = 0; idx < nbLocalIndex; ++idx)
63 currentlocalIndex = localIndex[idx].first;
64 if (flagInitial[currentlocalIndex])
66 dataOut(currentlocalIndex) = *(dataInput + idx);
67 flagInitial[currentlocalIndex] =
false;
71 dataOut(currentlocalIndex) = std::min(*(dataInput + idx), dataOut(currentlocalIndex));
static CReductionAlgorithm * create()
virtual void apply(const std::vector< std::pair< int, double > > &localIndex, const double *dataInput, CArray< double, 1 > &dataOut, std::vector< bool > &flagInitial, bool ignoreMissingValue, bool firstPass)
Apply a reduction operation on local data.
static bool registerTrans()
static bool registerOperation(EReductionType reduceType, CreateOperationCallBack createFn)
Interface for all reduction alogrithms.