Ignore:
Timestamp:
06/06/17 17:58:16 (7 years ago)
Author:
oabramkina
Message:

Two server levels: merging with trunk r1137.
There are bugs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/parse_expr/filter_expr_node.cpp

    r643 r1158  
    22#include "unary_arithmetic_filter.hpp" 
    33#include "binary_arithmetic_filter.hpp" 
     4#include "ternary_arithmetic_filter.hpp" 
    45#include "field.hpp" 
    56 
     
    4041  boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
    4142  { 
    42     if (!CField::has(fieldId)) 
     43    boost::shared_ptr<COutputPin> outputPin; 
     44 
     45    if (fieldId == "this") 
     46      outputPin = thisField.getSelfTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     47    else if (CField::has(fieldId)) 
     48    { 
     49      CField* field = CField::get(fieldId); 
     50      if (field == &thisField) 
     51        ERROR("boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
     52              << "The field " << fieldId << " has an invalid reference to itself. " 
     53              << "Use the keyword \"this\" if you want to reference the input data sent to this field."); 
     54 
     55      field->buildFilterGraph(gc, false); 
     56      outputPin = field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     57    } 
     58    else 
    4359      ERROR("boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
    4460            << "The field " << fieldId << " does not exist."); 
    4561 
    46     CField* field = CField::get(fieldId); 
    47     if (field == &thisField) 
    48       ERROR("boost::shared_ptr<COutputPin> CFilterFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 
    49             << "The field " << fieldId << " has an invalid reference to itself."); 
    50  
    51     field->buildFilterGraph(gc, false); 
    52     return field->getTemporalDataFilter(gc, thisField.freq_op.isEmpty() ? TimeStep : thisField.freq_op); 
     62    return outputPin; 
    5363  } 
    5464 
     
    120130    return filter; 
    121131  } 
     132 
     133 
     134 
     135 
     136  CFilterScalarScalarFieldOpExprNode::CFilterScalarScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3) 
     137    : child1(child1) 
     138    , opId(opId) 
     139    , child2(child2) 
     140    , child3(child3) 
     141  { 
     142    if (!child1 || !child2 || !child3) 
     143      ERROR("  CFilterScalarScalarFieldOpExprNode::CFilterScalarScalarFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3)", 
     144            "Impossible to create the new expression node, an invalid child node was provided."); 
     145  } 
     146 
     147  boost::shared_ptr<COutputPin> CFilterScalarScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     148  { 
     149    boost::shared_ptr<CScalarScalarFieldArithmeticFilter> filter(new CScalarScalarFieldArithmeticFilter(gc, opId, child1->reduce(),child2->reduce())); 
     150    child3->reduce(gc, thisField)->connectOutput(filter, 0); 
     151    return filter; 
     152  } 
     153 
     154 
     155  CFilterScalarFieldScalarOpExprNode::CFilterScalarFieldScalarOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3) 
     156    : child1(child1) 
     157    , opId(opId) 
     158    , child2(child2) 
     159    , child3(child3) 
     160  { 
     161    if (!child1 || !child2 || !child3) 
     162      ERROR("  CFilterScalarFieldScalarOpExprNode::CFilterScalarFieldScalarOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3)", 
     163            "Impossible to create the new expression node, an invalid child node was provided."); 
     164  } 
     165 
     166  boost::shared_ptr<COutputPin> CFilterScalarFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     167  { 
     168    boost::shared_ptr<CScalarFieldScalarArithmeticFilter> filter(new CScalarFieldScalarArithmeticFilter(gc, opId, child1->reduce(),child3->reduce())); 
     169    child2->reduce(gc, thisField)->connectOutput(filter, 0); 
     170    return filter; 
     171  } 
     172 
     173 
     174  CFilterScalarFieldFieldOpExprNode::CFilterScalarFieldFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3) 
     175    : child1(child1) 
     176    , opId(opId) 
     177    , child2(child2) 
     178    , child3(child3) 
     179  { 
     180    if (!child1 || !child2 || !child3) 
     181      ERROR("  CFilterScalarFieldFieldOpExprNode::CFilterScalarFieldFieldOpExprNode(IScalarExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3)", 
     182            "Impossible to create the new expression node, an invalid child node was provided."); 
     183  } 
     184 
     185  boost::shared_ptr<COutputPin> CFilterScalarFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     186  { 
     187    boost::shared_ptr<CScalarFieldFieldArithmeticFilter> filter(new CScalarFieldFieldArithmeticFilter(gc, opId, child1->reduce())); 
     188    child2->reduce(gc, thisField)->connectOutput(filter, 0); 
     189    child3->reduce(gc, thisField)->connectOutput(filter, 1); 
     190    return filter; 
     191  } 
     192 
     193 
     194 
     195  CFilterFieldScalarScalarOpExprNode::CFilterFieldScalarScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3) 
     196    : child1(child1) 
     197    , opId(opId) 
     198    , child2(child2) 
     199    , child3(child3) 
     200  { 
     201    if (!child1 || !child2 || !child3) 
     202      ERROR("  CFilterFieldScalarScalarOpExprNode::CFilterFieldScalarScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IScalarExprNode* child3)", 
     203            "Impossible to create the new expression node, an invalid child node was provided."); 
     204  } 
     205 
     206  boost::shared_ptr<COutputPin> CFilterFieldScalarScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     207  { 
     208    boost::shared_ptr<CFieldScalarScalarArithmeticFilter> filter(new CFieldScalarScalarArithmeticFilter(gc, opId, child2->reduce(),child3->reduce())); 
     209    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     210    return filter; 
     211  } 
     212 
     213 
     214 
     215  CFilterFieldScalarFieldOpExprNode::CFilterFieldScalarFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3) 
     216    : child1(child1) 
     217    , opId(opId) 
     218    , child2(child2) 
     219    , child3(child3) 
     220  { 
     221    if (!child1 || !child2 || !child3) 
     222      ERROR("  CFilterFieldScalarFieldOpExprNode::CFilterFieldScalarFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IScalarExprNode* child2, IFilterExprNode* child3)", 
     223            "Impossible to create the new expression node, an invalid child node was provided."); 
     224  } 
     225 
     226  boost::shared_ptr<COutputPin> CFilterFieldScalarFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     227  { 
     228    boost::shared_ptr<CFieldScalarFieldArithmeticFilter> filter(new CFieldScalarFieldArithmeticFilter(gc, opId, child2->reduce())); 
     229    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     230    child3->reduce(gc, thisField)->connectOutput(filter, 1); 
     231    return filter; 
     232  } 
     233 
     234 
     235 
     236  CFilterFieldFieldScalarOpExprNode::CFilterFieldFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3) 
     237    : child1(child1) 
     238    , opId(opId) 
     239    , child2(child2) 
     240    , child3(child3) 
     241  { 
     242    if (!child1 || !child2 || !child3) 
     243      ERROR("  CFilterFieldFieldScalarOpExprNode::CFilterFieldFieldScalarOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IScalarExprNode* child3)", 
     244            "Impossible to create the new expression node, an invalid child node was provided."); 
     245  } 
     246 
     247  boost::shared_ptr<COutputPin> CFilterFieldFieldScalarOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     248  { 
     249    boost::shared_ptr<CFieldFieldScalarArithmeticFilter> filter(new CFieldFieldScalarArithmeticFilter(gc, opId, child3->reduce())); 
     250    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     251    child2->reduce(gc, thisField)->connectOutput(filter, 1); 
     252    return filter; 
     253  } 
     254 
     255 
     256  CFilterFieldFieldFieldOpExprNode::CFilterFieldFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3) 
     257    : child1(child1) 
     258    , opId(opId) 
     259    , child2(child2) 
     260    , child3(child3) 
     261  { 
     262    if (!child1 || !child2 || !child3) 
     263      ERROR("  CFilterFieldFieldFieldOpExprNode::CFilterFieldFieldFieldOpExprNode(IFilterExprNode* child1, const std::string& opId, IFilterExprNode* child2, IFilterExprNode* child3)", 
     264            "Impossible to create the new expression node, an invalid child node was provided."); 
     265  } 
     266 
     267  boost::shared_ptr<COutputPin> CFilterFieldFieldFieldOpExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 
     268  { 
     269    boost::shared_ptr<CFieldFieldFieldArithmeticFilter> filter(new CFieldFieldFieldArithmeticFilter(gc, opId)); 
     270    child1->reduce(gc, thisField)->connectOutput(filter, 0); 
     271    child2->reduce(gc, thisField)->connectOutput(filter, 1); 
     272    child3->reduce(gc, thisField)->connectOutput(filter, 2); 
     273    return filter; 
     274  } 
     275   
    122276} 
Note: See TracChangeset for help on using the changeset viewer.