#include "reduce_transform_connector.hpp" #include "exception.hpp" namespace xios { CReduceTransformConnector::CReduceTransformConnector(shared_ptr srcView, shared_ptr dstView, EReduction op, unordered_map>& indexMap, bool detectMissingValue) : srcView_(srcView), dstView_(dstView), detectMissingValue_(detectMissingValue) { switch(op) { case EReduction::sum : transfer_=&CReduceTransformConnector::transferSum ; break ; case EReduction::min : transfer_=&CReduceTransformConnector::transferMin ; break ; case EReduction::max : transfer_=&CReduceTransformConnector::transferMax ; break ; case EReduction::average : transfer_=&CReduceTransformConnector::transferAverage ; break ; default : ERROR("CReduceTransformConnector::CReduceTransformConnector", <<"reduction operator "<<(int)op<<" is not defined for this operation") ; break ; } computeConnector(indexMap) ; } void CReduceTransformConnector::computeConnector(unordered_map>& indexMap) { CArray dstGlobalIndex ; CArray srcGlobalIndex ; dstView_->getGlobalIndexView(dstGlobalIndex) ; srcView_->getGlobalIndexView(srcGlobalIndex) ; unordered_map srcMapIndex ; srcSize_ = srcGlobalIndex.numElements() ; dstSize_ = dstGlobalIndex.numElements() ; for(int i=0;i