- Timestamp:
- 07/22/21 14:05:58 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/unary_arithmetic_filter.cpp
r643 r2193 1 1 #include "unary_arithmetic_filter.hpp" 2 #include "workflow_graph.hpp" 3 2 4 3 5 namespace xios … … 8 10 { /* Nothing to do */ }; 9 11 12 std::pair<int, int> CUnaryArithmeticFilter::buildGraph(std::vector<CDataPacketPtr> data) 13 { 14 bool building_graph = this->graphEnabled; 15 int unique_filter_id; 16 bool firstround = true; 17 18 if(building_graph) 19 { 20 if(!data[0]->graphPackage) 21 { 22 data[0]->graphPackage = new CGraphDataPackage; 23 data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 24 data[0]->graphPackage->fromFilter = -1; 25 } 26 27 if(!CWorkflowGraph::mapHashFilterID_) CWorkflowGraph::mapHashFilterID_ = new std::unordered_map <size_t, int>; 28 29 size_t filterhash = std::hash<StdString>{}(this->graphPackage->inFields[0]->content+to_string(data[0]->timestamp)+this->graphPackage->inFields[0]->getId()); 30 31 // first round 32 if(CWorkflowGraph::mapHashFilterID_->find(filterhash) == CWorkflowGraph::mapHashFilterID_->end()) 33 { 34 this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 35 unique_filter_id = this->graphPackage->filterId; 36 CWorkflowGraph::addNode("Arithmetic filter\\n ("+this->graphPackage->inFields[0]->content+")", 4, false, 0, data[0]); 37 38 CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 39 data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 40 data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 41 std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 42 43 44 (*CWorkflowGraph::mapHashFilterID_)[filterhash] = unique_filter_id; 45 46 } 47 // not first round 48 else 49 { 50 unique_filter_id = (*CWorkflowGraph::mapHashFilterID_)[filterhash]; 51 if(data[0]->graphPackage->fromFilter != unique_filter_id) 52 { 53 CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, unique_filter_id, data[0]); 54 } 55 } 56 } 57 58 return std::make_pair(building_graph, unique_filter_id); 59 } 60 61 10 62 CDataPacketPtr CUnaryArithmeticFilter::apply(std::vector<CDataPacketPtr> data) 11 63 { … … 15 67 packet->status = data[0]->status; 16 68 69 std::pair<int, int> graph = buildGraph(data); 70 71 if(std::get<0>(graph)) 72 { 73 packet->graphPackage = new CGraphDataPackage; 74 packet->graphPackage->fromFilter = std::get<1>(graph); 75 packet->graphPackage->currentField = this->graphPackage->inFields[0]; 76 } 77 17 78 if (packet->status == CDataPacket::NO_ERROR) 18 79 packet->data.reference(op(data[0]->data));
Note: See TracChangeset
for help on using the changeset viewer.