source: XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp @ 2280

Last change on this file since 2280 was 2137, checked in by yushan, 3 years ago

temporal commit for merging graph into XIOS_coupling

File size: 2.2 KB
RevLine 
[641]1#include "pass_through_filter.hpp"
[1686]2#include "workflow_graph.hpp"
[2019]3#include <algorithm>
[641]4
5namespace xios
6{
[1686]7  CPassThroughFilter::CPassThroughFilter(CGarbageCollector& gc)
8    : CFilter(gc, 1, this)
[2019]9  { /* Nothing to do */ }
10
11  CDataPacketPtr CPassThroughFilter::apply(std::vector<CDataPacketPtr> data)
12  {
13    buildWorkflowGraph(data);
14    return data[0];
[1686]15  }
[641]16
[2019]17  void CPassThroughFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data)
[1686]18  {
[2019]19    if(this->graphEnabled)
[1686]20    {
[2026]21      if(data[0]->graphPackage && data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId())
[2021]22      {
23        std::cout<<"PASS THROUGH FILTER OMITTED "<<this<<std::endl;
24        std::cout<<data[0]->graphPackage->currentField->getId()<< "-------"<< this->graphPackage->inFields[0]->getId()<<std::endl;
25        return;
26      }
[2019]27      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
[1686]28     
[2019]29      if(!data[0]->graphPackage) 
[1686]30      {
[2019]31        data[0]->graphPackage = new CGraphDataPackage;
32        data[0]->graphPackage->fromFilter = -1;
[2026]33        data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
[1686]34      }
[2023]35
36      for(int i=0; i<this->graphPackage->filterId; i++)
37      {
[2028]38        if(CXios::isClient
39          &&  (*CWorkflowGraph::vectorOfNodes_)[i].label_field_id == this->label_field_id 
[2023]40          && (*CWorkflowGraph::vectorOfNodes_)[i].timestamp == data[0]->timestamp
41          && (*CWorkflowGraph::vectorOfNodes_)[i].filter_name == "Pass through filter" )
42        {
43          data[0]->graphPackage->fromFilter = i;
44          return;
45        } 
46      }
[2021]47     
48      CWorkflowGraph::addNode("Pass through filter", 2, false, 1, data[0]);
[2023]49      if(CXios::isClient) (*CWorkflowGraph::vectorOfNodes_)[this->graphPackage->filterId].label_field_id = this->label_field_id;
50      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
51     
[2019]52      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
53      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
[1686]54     
[2019]55      data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
56       
57    } 
58  }
[1686]59
60
[2019]61} // namespace xios
Note: See TracBrowser for help on using the repository browser.