#ifndef __WEIGHT_TRANSFORM_CONNECTOR_HPP__ #define __WEIGHT_TRANSFORM_CONNECTOR_HPP__ #include "xios_spl.hpp" #include "array_new.hpp" #include "local_view.hpp" namespace xios { class CWeightTransformConnector { private: shared_ptr srcView_; shared_ptr dstView_; vector weights_; // sizeof sum(nWeights_) vector connector_; // sizeof sum(nWeights_) vector nWeights_ ; // sizeof dstSize_ int srcSize_ ; int dstSize_ ; void computeConnector(unordered_map>& indexMap, unordered_map>& weightMap) ; public: CWeightTransformConnector(shared_ptr srcView, shared_ptr dstView, unordered_map>& indexMap, unordered_map>& weightMap) ; void transfer(int repeat, int sizeT, const CArray& dataIn, CArray& dataOut) { int dstSlice = dstSize_*sizeT ; int srcSlice = srcSize_*sizeT ; dataOut.resize(repeat* dstSlice) ; dataOut=0 ; // what to do about missing value => next step ? const double* input = dataIn.dataFirst() ; double* output = dataOut.dataFirst() ; for(int r=0;r& dataIn, CArray& dataOut) { transfer(1,sizeT, dataIn, dataOut) ; } void transfer(const CArray& dataIn, CArray& dataOut) { transfer(1,1,dataIn, dataOut) ; } }; } #endif