[2007] | 1 | #include "temporal_transform_filter.hpp" |
---|
| 2 | |
---|
| 3 | namespace xios |
---|
| 4 | { |
---|
| 5 | |
---|
[2011] | 6 | CTemporalTransformFilter::CTemporalTransformFilter(CGarbageCollector& gc, int slots, CGridAlgorithm* algo, int nrecords, bool detectMissingValues, double defaultValue) |
---|
| 7 | : CTransformFilter(gc, slots, algo, detectMissingValues, defaultValue), nrecords_(nrecords) |
---|
[2007] | 8 | { |
---|
| 9 | |
---|
| 10 | } |
---|
| 11 | |
---|
| 12 | CDataPacketPtr CTemporalTransformFilter::apply(std::vector<CDataPacketPtr> data) |
---|
| 13 | { |
---|
| 14 | if (data[0]->status == CDataPacket::NO_ERROR) |
---|
| 15 | { |
---|
| 16 | if (record_==0) tmpData_.resize(nrecords_) ; |
---|
| 17 | algorithm_->apply(data[0]->data, tmpData_[record_]); |
---|
| 18 | record_++ ; |
---|
| 19 | if (record_==nrecords_) |
---|
| 20 | { |
---|
| 21 | size_t size=0 ; |
---|
| 22 | for(auto& it : tmpData_) size += it.numElements() ; |
---|
| 23 | // for now, no auxilliairy field |
---|
| 24 | CDataPacketPtr packet(new CDataPacket); |
---|
| 25 | packet->date = data[0]->date; |
---|
| 26 | packet->timestamp = data[0]->timestamp; |
---|
| 27 | packet->status = data[0]->status; |
---|
| 28 | packet->data.resize(size) ; |
---|
| 29 | double* out = packet->data.dataFirst() ; |
---|
| 30 | for(auto& it : tmpData_) |
---|
| 31 | { |
---|
| 32 | size = it.numElements() ; |
---|
| 33 | double* tmp = it.dataFirst() ; |
---|
| 34 | for(size_t i=0 ; i<size ; i++, out++, tmp++) *out=*tmp ; |
---|
| 35 | } |
---|
| 36 | tmpData_.clear() ; |
---|
| 37 | record_=0 ; |
---|
| 38 | return packet ; |
---|
| 39 | } |
---|
| 40 | else return nullptr ; |
---|
| 41 | } |
---|
| 42 | else // error |
---|
| 43 | { |
---|
| 44 | CDataPacketPtr packet(new CDataPacket); |
---|
| 45 | packet->date = data[0]->date; |
---|
| 46 | packet->timestamp = data[0]->timestamp; |
---|
| 47 | packet->status = data[0]->status; |
---|
| 48 | return packet ; |
---|
| 49 | } |
---|
| 50 | } |
---|
| 51 | } |
---|