Ignore:
Timestamp:
06/04/21 11:54:38 (3 years ago)
Author:
yushan
Message:

Big commit on graph functionality. Add buildWorkflowGraph function for filters

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.cpp

    r641 r2143  
    11#include "pass_through_filter.hpp" 
     2#include "workflow_graph.hpp" 
     3#include <algorithm> 
    24 
    35namespace xios 
     
    911  CDataPacketPtr CPassThroughFilter::apply(std::vector<CDataPacketPtr> data) 
    1012  { 
     13    buildWorkflowGraph(data); 
    1114    return data[0]; 
    1215  } 
     16 
     17  void CPassThroughFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data) 
     18  { 
     19    if(this->graphEnabled) 
     20    { 
     21      if(data[0]->graphPackage && data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId()) 
     22      { 
     23        std::cout<<"PASS THROUGH FILTER OMITTED "<<this<<std::endl; 
     24        return; 
     25      } 
     26      this->graphPackage->filterId = CWorkflowGraph::getNodeSize(); 
     27       
     28      if(!data[0]->graphPackage)  
     29      { 
     30        data[0]->graphPackage = new CGraphDataPackage; 
     31        data[0]->graphPackage->fromFilter = -1; 
     32        data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     33      } 
     34 
     35      for(int i=0; i<this->graphPackage->filterId; i++) 
     36      { 
     37        if(CXios::isClient  
     38          &&  (*CWorkflowGraph::vectorOfNodes_)[i].label_field_id == this->label_field_id   
     39          && (*CWorkflowGraph::vectorOfNodes_)[i].timestamp == data[0]->timestamp 
     40          && (*CWorkflowGraph::vectorOfNodes_)[i].filter_name == "Pass through filter" ) 
     41        { 
     42          data[0]->graphPackage->fromFilter = i; 
     43          return; 
     44        }   
     45      } 
     46       
     47      CWorkflowGraph::addNode("Pass through filter", 2, false, 1, data[0]); 
     48      if(CXios::isClient) (*CWorkflowGraph::vectorOfNodes_)[this->graphPackage->filterId].label_field_id = this->label_field_id; 
     49      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]); 
     50       
     51      data[0]->graphPackage->currentField = this->graphPackage->inFields[0]; 
     52      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end()); 
     53       
     54      data[0]->graphPackage->fromFilter = this->graphPackage->filterId; 
     55         
     56    }  
     57  } 
     58 
     59 
    1360} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.