[642] | 1 | #include "binary_arithmetic_filter.hpp" |
---|
| 2 | |
---|
| 3 | namespace 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); |
---|
[643] | 14 | packet->date = data[0]->date; |
---|
[642] | 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); |
---|
[643] | 33 | packet->date = data[0]->date; |
---|
[642] | 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) |
---|
[804] | 44 | : CFilter(gc, 2, this) |
---|
[642] | 45 | , op(operatorExpr.getOpFieldField(op)) |
---|
| 46 | { /* Nothing to do */ }; |
---|
| 47 | |
---|
| 48 | CDataPacketPtr CFieldFieldArithmeticFilter::apply(std::vector<CDataPacketPtr> data) |
---|
| 49 | { |
---|
| 50 | CDataPacketPtr packet(new CDataPacket); |
---|
[643] | 51 | packet->date = data[0]->date; |
---|
[642] | 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 |
---|