Changeset 1704 for XIOS/trunk/src/filter/unary_arithmetic_filter.cpp
- Timestamp:
- 09/11/19 10:22:09 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/filter/unary_arithmetic_filter.cpp
r643 r1704 1 1 #include "unary_arithmetic_filter.hpp" 2 #include "workflow_graph.hpp" 3 #include "yacc_var.hpp" 4 #include "file.hpp" 2 5 3 6 namespace xios … … 6 9 : CFilter(gc, 1, this) 7 10 , op(operatorExpr.getOpField(op)) 8 { /* Nothing to do */ }; 11 { 12 expression.assign(*yacc_globalInputText_ptr, 0, yacc_globalInputText_ptr->size()-1); 13 }; 14 15 std::tuple<int, int, int> CUnaryArithmeticFilter::buildGraph(std::vector<CDataPacketPtr> data) 16 { 17 bool building_graph = this->tag ? data[0]->timestamp >= this->start_graph && data[0]->timestamp <= this->end_graph : false; 18 int unique_filter_id; 19 bool firstround; 20 21 if(building_graph) 22 { 23 CWorkflowGraph::allocNodeEdge(); 24 size_t filterhash = std::hash<StdString>{}(expression+to_string(data[0]->timestamp)+this->field->getId()); 25 26 // first round 27 if(CWorkflowGraph::mapHashFilterID_ptr->find(filterhash) == CWorkflowGraph::mapHashFilterID_ptr->end()) 28 { 29 firstround=true; 30 this->filterID = InvalidableObject::filterIdGenerator++; 31 int edgeID = InvalidableObject::edgeIdGenerator++; 32 33 CWorkflowGraph::addNode(this->filterID, "Arithmetic Filter\\n("+expression+")", 3, 1, 0, data[0]); 34 (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].filter_tag = this->tag; 35 (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].distance = data[0]->distance+1; 36 37 (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); 38 if(this->field->file) (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes += "</br>file attributes : </br>" +this->field->file->record4graphXiosAttributes(); 39 40 if(CWorkflowGraph::build_begin) 41 { 42 43 CWorkflowGraph::addEdge(edgeID, this->filterID, data[0]); 44 (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].expected_entry_nb ++; 45 46 (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; 47 } 48 else CWorkflowGraph::build_begin = true; 49 50 (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash] = this->filterID; 51 unique_filter_id = this->filterID; 52 } 53 else 54 { 55 firstround=false; 56 unique_filter_id = (*CWorkflowGraph::mapHashFilterID_ptr)[filterhash]; 57 if(data[0]->src_filterID != unique_filter_id) 58 { 59 int edgeID = InvalidableObject::edgeIdGenerator++; 60 CWorkflowGraph::addEdge(edgeID, unique_filter_id, data[0]); 61 (*CWorkflowGraph::mapFilters_ptr_with_info)[data[0]->src_filterID].filter_filled = 0 ; 62 (*CWorkflowGraph::mapFilters_ptr_with_info)[unique_filter_id].expected_entry_nb ++; 63 } 64 } 65 66 } 67 68 return std::make_tuple(building_graph, firstround, unique_filter_id); 69 } 9 70 10 71 CDataPacketPtr CUnaryArithmeticFilter::apply(std::vector<CDataPacketPtr> data) … … 15 76 packet->status = data[0]->status; 16 77 78 std::tuple<int, int, int> graph = buildGraph(data); 79 80 if(std::get<0>(graph)) packet->src_filterID = std::get<2>(graph); 81 if(std::get<0>(graph) && std::get<1>(graph)) packet->distance = data[0]->distance+1; 82 if(std::get<0>(graph) && !std::get<1>(graph)) packet->distance = data[0]->distance; 83 84 packet->field = this->field; 85 17 86 if (packet->status == CDataPacket::NO_ERROR) 18 87 packet->data.reference(op(data[0]->data));
Note: See TracChangeset
for help on using the changeset viewer.