26 #include <type_traits>
30 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
55 using clock_t = std::chrono::high_resolution_clock;
57 using entry_t = RobotUnitDataStreaming::DataEntry;
72 void set(
const RobotUnitDataStreaming::DataEntry& k);
73 T get(
const RobotUnitDataStreaming::TimeStep& t)
const;
74 T operator()(
const RobotUnitDataStreaming::TimeStep& t)
const;
77 RobotUnitDataStreaming::DataEntry _key;
82 const RobotUnitDataStreaming::Config& cfg);
106 detail::RobotUnitDataStreamingReceiver::ReceiverPtr _receiver;
107 RobotUnitDataStreaming::ReceiverPrx _proxy;
108 RobotUnitDataStreaming::DataStreamingDescription _description;
109 std::map<std::uint64_t, RobotUnitDataStreaming::TimeStepSeq> _tmp_data_buffer;
110 std::uint64_t _tmp_data_buffer_seq_id = 0;
111 std::deque<RobotUnitDataStreaming::TimeStep> _data_buffer;
112 long _last_iteration_id = -1;
121 const RobotUnitDataStreaming::DataEntry& k)
129 const RobotUnitDataStreaming::DataEntry& k)
131 ARMARX_CHECK_EQUAL(RobotUnitDataStreamingReceiver::ExpectedDataEntryType<T>(), k.type)
132 <<
"the key references a value of the wrong type!";
139 const RobotUnitDataStreaming::DataEntry& k)
148 const RobotUnitDataStreaming::TimeStep& t)
const
150 return RobotUnitDataStreamingReceiver::GetAs<T>(t, _key);
156 const RobotUnitDataStreaming::TimeStep& t)
const
164 const std::string& name)
const
166 e = _description.entries.at(name);
181 using enum_t = RobotUnitDataStreaming::DataEntryType;
185 case enum_t::NodeTypeBool:
186 f(st.bools.at(e.index));
188 case enum_t::NodeTypeByte:
189 f(st.bytes.at(e.index));
191 case enum_t::NodeTypeShort:
192 f(st.shorts.at(e.index));
194 case enum_t::NodeTypeInt:
195 f(st.ints.at(e.index));
197 case enum_t::NodeTypeLong:
198 f(st.longs.at(e.index));
200 case enum_t::NodeTypeFloat:
201 f(st.floats.at(e.index));
203 case enum_t::NodeTypeDouble:
204 f(st.doubles.at(e.index));
214 using enum_t = RobotUnitDataStreaming::DataEntryType;
215 if constexpr (std::is_same_v<bool, T>)
218 return st.bools.at(e.index);
220 else if constexpr (std::is_same_v<Ice::Byte, T>)
223 return st.bytes.at(e.index);
225 else if constexpr (std::is_same_v<Ice::Short, T>)
228 return st.shorts.at(e.index);
230 else if constexpr (std::is_same_v<Ice::Int, T>)
233 return st.ints.at(e.index);
235 else if constexpr (std::is_same_v<Ice::Long, T>)
238 return st.longs.at(e.index);
240 else if constexpr (std::is_same_v<Ice::Float, T>)
243 return st.floats.at(e.index);
245 else if constexpr (std::is_same_v<Ice::Double, T>)
248 return st.doubles.at(e.index);
252 static_assert(!std::is_same_v<T, T>,
"Type not supported!");
257 inline RobotUnitDataStreaming::DataEntryType
260 using enum_t = RobotUnitDataStreaming::DataEntryType;
261 if constexpr (std::is_same_v<bool, T>)
263 return enum_t::NodeTypeBool;
265 else if constexpr (std::is_same_v<Ice::Byte, T>)
267 return enum_t::NodeTypeByte;
269 else if constexpr (std::is_same_v<Ice::Short, T>)
271 return enum_t::NodeTypeShort;
273 else if constexpr (std::is_same_v<Ice::Int, T>)
275 return enum_t::NodeTypeInt;
277 else if constexpr (std::is_same_v<Ice::Long, T>)
279 return enum_t::NodeTypeLong;
281 else if constexpr (std::is_same_v<Ice::Float, T>)
283 return enum_t::NodeTypeFloat;
285 else if constexpr (std::is_same_v<Ice::Double, T>)
287 return enum_t::NodeTypeDouble;
291 static_assert(!std::is_same_v<T, T>,
"Type not supported!");