Changeset 1158 for XIOS/dev/dev_olga/src/parse_expr/filter_expr_node.cpp
- Timestamp:
- 06/06/17 17:58:16 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/parse_expr/filter_expr_node.cpp
r643 r1158 2 2 #include "unary_arithmetic_filter.hpp" 3 3 #include "binary_arithmetic_filter.hpp" 4 #include "ternary_arithmetic_filter.hpp" 4 5 #include "field.hpp" 5 6 … … 40 41 boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const 41 42 { 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 43 59 ERROR("boost::shared_ptr<COutputPin> CFilterTemporalFieldExprNode::reduce(CGarbageCollector& gc, CField& thisField) const", 44 60 << "The field " << fieldId << " does not exist."); 45 61 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; 53 63 } 54 64 … … 120 130 return filter; 121 131 } 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 122 276 }
Note: See TracChangeset
for help on using the changeset viewer.