source: XIOS/trunk/src/filter/binary_arithmetic_filter.cpp @ 804

Last change on this file since 804 was 804, checked in by aclsce, 8 years ago
  • Fixed bug in binary filter (pb with aruthmetic operations between 2 fields)
  • Added POINCARE machine as target machine
File size: 2.0 KB
Line 
1#include "binary_arithmetic_filter.hpp"
2
3namespace xios
4{
5  CScalarFieldArithmeticFilter::CScalarFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value)
6    : CFilter(gc, 1, this)
7    , op(operatorExpr.getOpScalarField(op))
8    , value(value)
9  { /* Nothing to do */ };
10
11  CDataPacketPtr CScalarFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
12  {
13    CDataPacketPtr packet(new CDataPacket);
14    packet->date = data[0]->date;
15    packet->timestamp = data[0]->timestamp;
16    packet->status = data[0]->status;
17
18    if (packet->status == CDataPacket::NO_ERROR)
19      packet->data.reference(op(value, data[0]->data));
20
21    return packet;
22  }
23
24  CFieldScalarArithmeticFilter::CFieldScalarArithmeticFilter(CGarbageCollector& gc, const std::string& op, double value)
25    : CFilter(gc, 1, this)
26    , op(operatorExpr.getOpFieldScalar(op))
27    , value(value)
28  { /* Nothing to do */ };
29
30  CDataPacketPtr CFieldScalarArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
31  {
32    CDataPacketPtr packet(new CDataPacket);
33    packet->date = data[0]->date;
34    packet->timestamp = data[0]->timestamp;
35    packet->status = data[0]->status;
36
37    if (packet->status == CDataPacket::NO_ERROR)
38      packet->data.reference(op(data[0]->data, value));
39
40    return packet;
41  }
42
43  CFieldFieldArithmeticFilter::CFieldFieldArithmeticFilter(CGarbageCollector& gc, const std::string& op)
44    : CFilter(gc, 2, this)
45    , op(operatorExpr.getOpFieldField(op))
46  { /* Nothing to do */ };
47
48  CDataPacketPtr CFieldFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data)
49  {
50    CDataPacketPtr packet(new CDataPacket);
51    packet->date = data[0]->date;
52    packet->timestamp = data[0]->timestamp;
53
54    if (data[0]->status != CDataPacket::NO_ERROR)
55      packet->status = data[0]->status;
56    else if (data[1]->status != CDataPacket::NO_ERROR)
57      packet->status = data[1]->status;
58    else
59    {
60      packet->status = CDataPacket::NO_ERROR;
61      packet->data.reference(op(data[0]->data, data[1]->data));
62    }
63
64    return packet;
65  }
66} // namespace xios
Note: See TracBrowser for help on using the repository browser.