plotdata.h
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 
7 #ifndef PJ_PLOTDATA_H
8 #define PJ_PLOTDATA_H
9 
10 #include "plotdatabase.h"
11 #include "timeseries.h"
12 #include "stringseries.h"
13 
14 namespace PJ
15 {
19 
25 // obsolate. For back compatibility only
26 // using PlotDataMap = std::unordered_map<std::string, PlotData>;
27 
28 using TimeseriesMap = std::unordered_map<std::string, PlotData>;
29 using ScatterXYMap = std::unordered_map<std::string, PlotDataXY>;
30 using AnySeriesMap = std::unordered_map<std::string, PlotDataAny>;
31 using StringSeriesMap = std::unordered_map<std::string, StringSeries>;
32 
34 {
36 
39 
43 
46 
51  std::unordered_map<std::string, PlotGroup::Ptr> groups;
52 
53  ScatterXYMap::iterator addScatterXY(const std::string& name, PlotGroup::Ptr group = {});
54 
55  TimeseriesMap::iterator addNumeric(const std::string& name, PlotGroup::Ptr group = {});
56 
57  AnySeriesMap::iterator addUserDefined(const std::string& name,
58  PlotGroup::Ptr group = {});
59 
60  StringSeriesMap::iterator addStringSeries(const std::string& name,
61  PlotGroup::Ptr group = {});
62 
63  PlotDataXY& getOrCreateScatterXY(const std::string& name, PlotGroup::Ptr group = {});
64 
65  PlotData& getOrCreateNumeric(const std::string& name, PlotGroup::Ptr group = {});
66 
67  StringSeries& getOrCreateStringSeries(const std::string& name,
68  PlotGroup::Ptr group = {});
69 
70  PlotDataAny& getOrCreateUserDefined(const std::string& name, PlotGroup::Ptr group = {});
71 
72  PlotGroup::Ptr getOrCreateGroup(const std::string& name);
73 
74  std::unordered_set<std::string> getAllNames() const;
75 
76  void clear();
77 
78  void setMaximumRangeX(double range);
79 
80  bool erase(const std::string& name);
81 };
82 
83 template <typename Value>
84 inline void AddPrefixToPlotData(const std::string& prefix,
85  std::unordered_map<std::string, Value>& data)
86 {
87  if (prefix.empty())
88  {
89  return;
90  }
91 
92  std::vector<std::string> temp_key;
93  temp_key.reserve(data.size());
94  std::vector<Value> temp_value;
95  temp_value.reserve(data.size());
96 
97  for (auto& it : data)
98  {
99  std::string key;
100  key.reserve(prefix.size() + 2 + it.first.size());
101  key = (it.first.front() == '/') ? (prefix + it.first) : (prefix + "/" + it.first);
102 
103  temp_key.emplace_back(key);
104  temp_value.emplace_back(std::move(it.second));
105  }
106 
107  data.clear();
108 
109  for (size_t i = 0; i < temp_key.size(); i++)
110  {
111  const std::string& key = temp_key[i];
112 
113  auto it = data.emplace(std::piecewise_construct, std::forward_as_tuple(key),
114  std::forward_as_tuple(key, PlotGroup::Ptr()))
115  .first;
116 
117  it->second = std::move(temp_value[i]);
118  }
119 }
120 
121 } // namespace PJ
122 
123 #endif // PJ_PLOTDATA_H
ScatterXYMap::iterator addScatterXY(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:45
PlotData & getOrCreateNumeric(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:75
PlotDataAny & getOrCreateUserDefined(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:87
std::unordered_map< std::string, PlotData > TimeseriesMap
The PlotDataMapRef is the main data structure used to store all the timeseries in a single place...
Definition: plotdata.h:28
std::unordered_map< std::string, StringSeries > StringSeriesMap
Definition: plotdata.h:31
std::shared_ptr< PlotGroup > Ptr
Definition: plotdatabase.h:82
std::unordered_map< std::string, PlotDataXY > ScatterXYMap
Definition: plotdata.h:29
std::unordered_set< std::string > getAllNames() const
Definition: plotdata.cpp:107
bool erase(const std::string &name)
Definition: plotdata.cpp:148
void setMaximumRangeX(double range)
Definition: plotdata.cpp:132
TimeseriesMap numeric
Numerical timeseries.
Definition: plotdata.h:38
StringSeries & getOrCreateStringSeries(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:81
PlotDataXY & getOrCreateScatterXY(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:69
StringSeriesMap strings
Series of strings.
Definition: plotdata.h:45
TimeseriesMap::iterator addNumeric(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:51
AnySeriesMap::iterator addUserDefined(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:57
StringSeriesMap::iterator addStringSeries(const std::string &name, PlotGroup::Ptr group={})
Definition: plotdata.cpp:63
const T & move(const T &v)
Definition: backward.hpp:394
ScatterXYMap scatter_xy
Definition: plotdata.h:35
PlotGroup::Ptr getOrCreateGroup(const std::string &name)
Definition: plotdata.cpp:93
std::unordered_map< std::string, PlotDataAny > AnySeriesMap
Definition: plotdata.h:30
std::unordered_map< std::string, PlotGroup::Ptr > groups
Each series can have (optionally) a group. Groups can have their own properties.
Definition: plotdata.h:51
void AddPrefixToPlotData(const std::string &prefix, std::unordered_map< std::string, Value > &data)
Definition: plotdata.h:84
AnySeriesMap user_defined
Definition: plotdata.h:42
Definition: format.h:895


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Jun 19 2023 03:01:38