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;
40 if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN();
42 for (
int idx = 0; idx < nbLocalIndex; ++idx)
44 currentlocalIndex = localIndex[idx].first;
47 if (flagInitial[currentlocalIndex])
49 dataOut(currentlocalIndex) = *(dataInput + idx);
50 flagInitial[currentlocalIndex] =
false;
54 dataOut(currentlocalIndex) += *(dataInput + idx);
61 int nbLocalIndex = localIndex.
size();
62 int currentlocalIndex = 0;
63 for (
int idx = 0; idx < nbLocalIndex; ++idx)
65 currentlocalIndex = localIndex[idx].first;
66 if (flagInitial[currentlocalIndex])
68 dataOut(currentlocalIndex) = *(dataInput + idx);
69 flagInitial[currentlocalIndex] =
false;
73 dataOut(currentlocalIndex) += *(dataInput + idx);
virtual size_t size(void) const
static bool registerTrans()
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 registerOperation(EReductionType reduceType, CreateOperationCallBack createFn)
Interface for all reduction alogrithms.