30 const double* dataInput,
32 std::vector<bool>& flagInitial,
33 bool ignoreMissingValue,
bool firstPass)
37 if (ignoreMissingValue)
39 int nbLocalIndex = localIndex.size();
40 int currentlocalIndex = 0;
41 double currentWeight = 0.0;
43 if (firstPass) dataOut=std::numeric_limits<double>::quiet_NaN();
45 for (
int idx = 0; idx < nbLocalIndex; ++idx)
47 currentlocalIndex = localIndex[idx].first;
48 currentWeight = localIndex[idx].second;
51 if (flagInitial[currentlocalIndex])
53 dataOut(currentlocalIndex) = *(dataInput + idx);
54 flagInitial[currentlocalIndex] =
false;
58 dataOut(currentlocalIndex) += *(dataInput + idx);
66 int nbLocalIndex = localIndex.
size();
67 int currentlocalIndex = 0;
68 double currentWeight = 0.0;
69 for (
int idx = 0; idx < nbLocalIndex; ++idx)
71 currentlocalIndex = localIndex[idx].first;
72 currentWeight = localIndex[idx].second;
74 if (flagInitial[currentlocalIndex])
76 dataOut(currentlocalIndex) = *(dataInput + idx);
77 flagInitial[currentlocalIndex] =
false;
81 dataOut(currentlocalIndex) += *(dataInput + idx);
virtual size_t size(void) const
static bool registerTrans()
CArray< double, 1 > weights_
CAverageReductionAlgorithm()
virtual void updateData(CArray< double, 1 > &dataOut)
Update local data In some case (e.g average) we need global information (e.g weights) then update dat...
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.