transform_function.cpp
Go to the documentation of this file.
1 /*
2  * This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
5  */
6 
8 
9 namespace PJ
10 {
12 {
13  static unsigned order = 0;
14  _order = order++;
15 }
16 
17 std::vector<const PlotData*>& TransformFunction::dataSources()
18 {
19  return _src_vector;
20 }
21 
23  const std::vector<const PlotData*>& src_vect,
24  std::vector<PlotData*>& dst_vect)
25 {
26  if (numInputs() >= 0 && src_vect.size() != numInputs())
27  {
28  throw std::runtime_error("Wrong number of input data sources "
29  "in setDataSource");
30  }
31  if (numOutputs() >= 0 && dst_vect.size() != numOutputs())
32  {
33  throw std::runtime_error("Wrong number of output data destinations");
34  }
35  _data = data;
36  _src_vector = src_vect;
37  _dst_vector = dst_vect;
38 }
39 
41 {
42  _last_timestamp = std::numeric_limits<double>::lowest();
43 }
44 
46 {
47  const PlotData* src_data = _src_vector.front();
48  PlotData* dst_data = _dst_vector.front();
49  if (src_data->size() == 0)
50  {
51  return;
52  }
53  dst_data->setMaximumRangeX(src_data->maximumRangeX());
54  if (dst_data->size() != 0)
55  {
56  _last_timestamp = dst_data->back().x;
57  }
58 
59  int pos = src_data->getIndexFromX(_last_timestamp);
60  size_t index = pos < 0 ? 0 : static_cast<size_t>(pos);
61 
62  while (index < src_data->size())
63  {
64  const auto& in_point = src_data->at(index);
65 
66  if (in_point.x >= _last_timestamp)
67  {
68  auto out_point = calculateNextPoint(index);
69  if (out_point)
70  {
71  dst_data->pushBack(std::move(out_point.value()));
72  }
73  _last_timestamp = in_point.x;
74  }
75  index++;
76  }
77 }
78 
80 {
81  auto it = instance()->creators_.find(name);
82  if (it == instance()->creators_.end())
83  {
84  return {};
85  }
86  return it->second();
87 }
88 
90 {
91  static TransformFactory* _ptr(nullptr);
92  if (!qApp->property("TransformFactory").isValid() && !_ptr)
93  {
94  _ptr = _transform_factory_ptr_from_macro;
95  qApp->setProperty("TransformFactory", QVariant::fromValue(_ptr));
96  }
97  else if (!_ptr)
98  {
99  _ptr = qvariant_cast<TransformFactory*>(qApp->property("TransformFactory"));
100  }
101  else if (!qApp->property("TransformFactory").isValid())
102  {
103  qApp->setProperty("TransformFactory", QVariant::fromValue(_ptr));
104  }
105  return _ptr;
106 }
107 
108 const std::set<std::string>& TransformFactory::registeredTransforms()
109 {
110  return instance()->names_;
111 }
112 
114 {
115  if (_src_vector.empty())
116  {
117  return nullptr;
118  }
119  return _src_vector.front();
120 }
121 
122 } // namespace PJ
std::vector< const PlotData * > & dataSources()
unsigned order() const
#define nullptr
Definition: backward.hpp:386
static TransformFactory * instance()
virtual int numOutputs() const =0
int getIndexFromX(double x) const
Definition: timeseries.h:107
static TransformFunction::Ptr create(const std::string &name)
virtual size_t size() const
Definition: plotdatabase.h:182
---— The factory to create instances of a SeriesTransform ----------—
std::vector< const PlotData * > _src_vector
void setMaximumRangeX(double max_range)
Definition: timeseries.h:42
static const std::set< std::string > & registeredTransforms()
PlotDataMapRef * _data
virtual void setData(PlotDataMapRef *data, const std::vector< const PlotData *> &src_vect, std::vector< PlotData *> &dst_vect)
virtual const char * name() const =0
Name of the plugin type, NOT the particular instance.
const T & move(const T &v)
Definition: backward.hpp:394
void pushBack(const Point &p) override
Definition: timeseries.h:61
const Point & at(size_t index) const
Definition: plotdatabase.h:192
std::vector< PlotData * > _dst_vector
const PlotData * dataSource() const
const Point & back() const
Definition: plotdatabase.h:249
span_constexpr std::size_t size(span< T, Extent > const &spn)
Definition: span.hpp:1485
dictionary data
Definition: mqtt_test.py:22
double maximumRangeX() const
Definition: timeseries.h:48
Definition: format.h:895
virtual int numInputs() const =0
std::shared_ptr< TransformFunction > Ptr


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Jun 19 2023 03:12:53