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)
132 <<
"the key references a value of the wrong type!";
139 const RobotUnitDataStreaming::DataEntry& k)
148 const RobotUnitDataStreaming::TimeStep& t)
const
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!");
#define TYPEDEF_PTRS_SHARED(T)
#define TYPEDEF_PTRS_HANDLE(T)
Brief description of class RobotUnitDataStreamingReceiver.
static RobotUnitDataStreaming::DataEntryType ExpectedDataEntryType()
const RobotUnitDataStreaming::DataStreamingDescription & getDataDescription() const
RobotUnitDataStreaming::TimeStep timestep_t
static void VisitEntries(auto &&f, const timestep_t &st, const auto &cont)
std::chrono::high_resolution_clock clock_t
RobotUnitDataStreamingReceiver(const ManagedIceObjectPtr &obj, const RobotUnitInterfacePrx &ru, const RobotUnitDataStreaming::Config &cfg)
std::deque< timestep_t > & getDataBuffer()
std::string getDataDescriptionString() const
RobotUnitDataStreaming::DataEntry entry_t
~RobotUnitDataStreamingReceiver()
static void VisitEntry(auto &&f, const timestep_t &st, const entry_t &e)
DataEntryReader< T > getDataEntryReader(const std::string &name) const
static T GetAs(const timestep_t &st, const entry_t &e)
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
This file offers overloads of toIce() and fromIce() functions for STL container types.
::IceInternal::ProxyHandle<::IceProxy::armarx::RobotUnitInterface > RobotUnitInterfacePrx
IceInternal::Handle< ManagedIceObject > ManagedIceObjectPtr
DataEntryReader & operator=(DataEntryReader &&)=default
DataEntryReader(const DataEntryReader &)=default
void set(const RobotUnitDataStreaming::DataEntry &k)
DataEntryReader(DataEntryReader &&)=default
DataEntryReader & operator=(const DataEntryReader &)=default
T get(const RobotUnitDataStreaming::TimeStep &t) const
T operator()(const RobotUnitDataStreaming::TimeStep &t) const
DataEntryReader()=default