32#include <boost/array.hpp>
33#include <boost/tuple/tuple.hpp>
42#ifdef ROBOTRACONTEUR_USE_SMALL_VECTOR
43#include <boost/container/small_vector.hpp>
46#include <boost/asio/buffer.hpp>
48#include <boost/utility/value_init.hpp>
49#include <boost/container/static_vector.hpp>
50#include <boost/foreach.hpp>
51#include <boost/range/adaptor/map.hpp>
52#include <boost/range/numeric.hpp>
54#include <boost/smart_ptr/intrusive_ref_counter.hpp>
56#include <boost/numeric/conversion/cast.hpp>
58#include <boost/lexical_cast.hpp>
60#include <boost/utility/string_ref.hpp>
62#include <boost/variant.hpp>
64#include <boost/date_time/posix_time/ptime.hpp>
65#include "boost/date_time/posix_time/posix_time_types.hpp"
69namespace RobotRaconteur
140ROBOTRACONTEUR_CORE_API
bool operator==(
const cdouble& c1,
const cdouble& c2);
141ROBOTRACONTEUR_CORE_API
bool operator!=(
const cdouble& c1,
const cdouble& c2);
142ROBOTRACONTEUR_CORE_API
bool operator==(
const cfloat& c1,
const cfloat& c2);
143ROBOTRACONTEUR_CORE_API
bool operator!=(
const cfloat& c1,
const cfloat& c2);
144ROBOTRACONTEUR_CORE_API
bool operator==(
const rr_bool& c1,
const rr_bool& c2);
145ROBOTRACONTEUR_CORE_API
bool operator!=(
const rr_bool& c1,
const rr_bool& c2);
147template <
typename T,
typename U>
151 static RR_SHARED_PTR<T> rr_cast(
const RR_SHARED_PTR<U>& objin)
154 return RR_SHARED_PTR<T>();
156 RR_SHARED_PTR<T> c = RR_DYNAMIC_POINTER_CAST<T>(objin);
165 static RR_INTRUSIVE_PTR<T> rr_cast(
const RR_INTRUSIVE_PTR<U>& objin)
168 return RR_INTRUSIVE_PTR<T>();
170 RR_INTRUSIVE_PTR<T> c = RR_DYNAMIC_POINTER_CAST<T>(objin);
181class rr_cast_support<T, T>
184 static const RR_SHARED_PTR<T>& rr_cast(
const RR_SHARED_PTR<T>& objin) {
return objin; }
186 static const RR_INTRUSIVE_PTR<T>& rr_cast(
const RR_INTRUSIVE_PTR<T>& objin) {
return objin; }
198template <
typename T,
typename U>
199static RR_SHARED_PTR<T>
rr_cast(
const RR_SHARED_PTR<U>& objin)
201 return rr_cast_support<T, U>::rr_cast(objin);
214template <
typename T,
typename U>
215static RR_INTRUSIVE_PTR<T>
rr_cast(
const RR_INTRUSIVE_PTR<U>& objin)
217 return rr_cast_support<T, U>::rr_cast(objin);
227class ROBOTRACONTEUR_CORE_API RRObject : boost::noncopyable
232 virtual ~RRObject() {}
251class ROBOTRACONTEUR_CORE_API RRValue :
public boost::intrusive_ref_counter<RRValue>, boost::noncopyable
256 virtual ~RRValue() {}
258 virtual std::string RRType() = 0;
263class ROBOTRACONTEUR_CORE_API MessageStringData
269class ROBOTRACONTEUR_CORE_API MessageStringData_string_ref
272 boost::string_ref ref;
273 MessageStringData_string_ref(
const boost::string_ref& r) : ref(r) {}
275class ROBOTRACONTEUR_CORE_API MessageStringData_static_string
278 boost::string_ref ref;
279 MessageStringData_static_string(
const boost::string_ref& r) : ref(r) {}
284class ROBOTRACONTEUR_CORE_API MessageStringRef;
286class ROBOTRACONTEUR_CORE_API MessageStringPtr
289 boost::variant<detail::MessageStringData, detail::MessageStringData_static_string> _str_ptr;
292 friend class MessageStringRef;
296 MessageStringPtr(
const std::string& str);
297 MessageStringPtr(boost::string_ref str,
bool is_static =
false);
298 MessageStringPtr(
const MessageStringPtr& str_ptr);
299 MessageStringPtr(
const MessageStringRef& str_ref);
300#ifndef ROBOTRACONTEUR_NO_CXX11
301 MessageStringPtr(std::string&& str);
305 inline MessageStringPtr(
const char (&str)[N])
307 init_literal(str, strlen(str));
310 boost::string_ref str()
const;
313 bool operator==(MessageStringRef b)
const;
314 bool operator!=(MessageStringRef b)
const;
315 bool operator<(MessageStringRef b)
const;
318 void init_literal(
const char* str,
size_t len);
321class ROBOTRACONTEUR_CORE_API MessageStringRef
324 boost::variant<
const detail::MessageStringData*, detail::MessageStringData_static_string,
325 detail::MessageStringData_string_ref>
329 friend class MessageStringPtr;
331 MessageStringRef(
const std::string& str);
332 MessageStringRef(boost::string_ref str,
bool is_static =
false);
333 MessageStringRef(
const MessageStringPtr& str_ptr);
334 MessageStringRef(
const MessageStringRef& str_ref);
338 inline MessageStringRef(
const char (&str)[N])
340 init_literal(str, strlen(str));
343 bool operator==(MessageStringRef b)
const;
344 bool operator!=(MessageStringRef b)
const;
346 boost::string_ref str()
const;
349 void init_literal(
const char* str,
size_t len);
352std::size_t hash_value(
const RobotRaconteur::MessageStringPtr& k);
354ROBOTRACONTEUR_CORE_API std::ostream& operator<<(std::ostream& out,
const MessageStringPtr& str);
355ROBOTRACONTEUR_CORE_API std::ostream& operator<<(std::ostream& out,
const MessageStringRef& str);
358inline boost::iterator_range<boost::string_ref::const_iterator> to_range(
const boost::string_ref& str)
360 return boost::iterator_range<boost::string_ref::const_iterator>(str.cbegin(), str.cend());
363inline std::string operator+(
const char* lhs, boost::string_ref rhs) {
return lhs + rhs.to_string(); }
365inline std::string operator+(
const std::string& lhs, boost::string_ref rhs) {
return lhs + rhs.to_string(); }
367inline std::string operator+(boost::string_ref lhs,
const char* rhs) {
return lhs.to_string() + rhs; }
376 virtual MessageStringPtr GetTypeString() = 0;
411ROBOTRACONTEUR_CORE_API RR_INTRUSIVE_PTR<RRArray<char> >
stringToRRArray(boost::string_ref str);
429 static RR_INTRUSIVE_PTR<T> PrePack(
const T& val) {
return val; }
431 template <
typename U>
432 static T PreUnpack(U& val)
434 return rr_cast<T>(val);
437 virtual ~RRPrimUtil(){};
439 typedef RR_INTRUSIVE_PTR<RRValue> BoxedType;
443class RRPrimUtil<RR_INTRUSIVE_PTR<T> >
447 static MessageStringPtr GetElementTypeString() {
return MessageStringPtr(
""); }
449 static boost::string_ref GetRRElementTypeString() {
return ""; }
451 static RR_INTRUSIVE_PTR<RRValue> PrePack(
const RR_INTRUSIVE_PTR<T>& val) {
return rr_cast<RRValue>(val); }
453 template <
typename U>
454 static RR_INTRUSIVE_PTR<T> PreUnpack(
const U& val)
456 return rr_cast<T>(val);
459 virtual ~RRPrimUtil(){};
461 typedef RR_INTRUSIVE_PTR<T> BoxedType;
465class RRPrimUtil<std::string>
469 static MessageStringPtr GetElementTypeString() {
return MessageStringPtr(
""); }
470 static boost::string_ref GetRRElementTypeString() {
return ""; }
471 static RR_INTRUSIVE_PTR<RRValue> PrePack(boost::string_ref val);
472 static std::string PreUnpack(
const RR_INTRUSIVE_PTR<RRValue>& val);
474 virtual ~RRPrimUtil(){};
476 typedef RR_INTRUSIVE_PTR<RRArray<char> > BoxedType;
479#define RRPrimUtilNumeric(x, code) \
481 class RRPrimUtil<x> \
484 static DataTypes GetTypeID() { return code; } \
485 static MessageStringPtr GetElementTypeString() { return MessageStringPtr(""); } \
486 static boost::string_ref GetRRElementTypeString() { return ""; } \
487 static RR_INTRUSIVE_PTR<RRArray<x> > PrePack(const x& val); \
488 template <typename U> \
489 static x PreUnpack(const U& val) \
491 return RRArrayToScalar(rr_cast<RRArray<x> >(val)); \
493 typedef RR_INTRUSIVE_PTR<RRArray<x> > BoxedType; \
512ROBOTRACONTEUR_CORE_API std::string GetRRDataTypeString(
DataTypes type);
513ROBOTRACONTEUR_CORE_API
bool IsTypeRRArray(
DataTypes type);
514ROBOTRACONTEUR_CORE_API
bool IsTypeNumeric(
DataTypes type);
527 RR_OVIRTUAL MessageStringPtr GetTypeString() RR_OVERRIDE
529 std::string type = GetRRDataTypeString(GetTypeID());
542 RR_OVIRTUAL std::string RRType() RR_OVERRIDE;
580 RR_OVIRTUAL
DataTypes GetTypeID() RR_OVERRIDE {
return RRPrimUtil<T>::GetTypeID(); }
582 RRArray(T*
data,
size_t length,
bool owned) : data_(
data), element_count(length), owned(owned) {}
584 RR_OVIRTUAL ~RRArray() RR_OVERRIDE
592 T* operator->()
const {
return data; }
594 RR_OVIRTUAL
size_t size() RR_OVERRIDE {
return element_count; }
596 RR_OVIRTUAL
size_t ElementSize() RR_OVERRIDE {
return sizeof(T); }
654 BOOST_ASSERT_MSG(i < element_count,
"out of range");
661 BOOST_ASSERT_MSG(i < element_count,
"out of range");
696 const T*
data()
const {
return data_; }
700 T* c_array() {
return data_; }
709 template <
typename T2>
731 void rangecheck(size_type i)
735 std::out_of_range e(
"array<>: index out of range");
736 boost::throw_exception(e);
742 size_t element_count;
748inline RR_INTRUSIVE_PTR<RRValue> RRPrimUtil<std::string>::PrePack(boost::string_ref val)
753inline std::string RRPrimUtil<std::string>::PreUnpack(
const RR_INTRUSIVE_PTR<RRValue>& val)
758#define RRPrimUtilNumericPrePack(x) \
759 inline RR_INTRUSIVE_PTR<RRArray<x> > RRPrimUtil<x>::PrePack(const x& val) { return ScalarToRRArray(val); }
761RRPrimUtilNumericPrePack(
double);
762RRPrimUtilNumericPrePack(
float);
763RRPrimUtilNumericPrePack(int8_t);
764RRPrimUtilNumericPrePack(uint8_t);
765RRPrimUtilNumericPrePack(int16_t);
766RRPrimUtilNumericPrePack(uint16_t);
767RRPrimUtilNumericPrePack(int32_t);
768RRPrimUtilNumericPrePack(uint32_t);
769RRPrimUtilNumericPrePack(int64_t);
770RRPrimUtilNumericPrePack(uint64_t);
771RRPrimUtilNumericPrePack(
char);
772RRPrimUtilNumericPrePack(cdouble);
773RRPrimUtilNumericPrePack(cfloat);
774RRPrimUtilNumericPrePack(rr_bool);
776#undef RRPrimUtilNumericPrePack
782 static boost::string_ref get()
784 BOOST_STATIC_ASSERT_MSG(
sizeof(T) == 0,
"Invalid key type for Robot Raconteur map");
785 throw DataTypeException(
"Unknown data type");
788 static std::string get_map_rrtype()
790 BOOST_STATIC_ASSERT_MSG(
sizeof(T) == 0,
"Invalid key type for Robot Raconteur map");
791 throw DataTypeException(
"Unknown data type");
796class RRMap_keytype<int32_t>
799 static boost::string_ref get() {
return "int32_t"; }
801 static std::string get_map_rrtype() {
return "RobotRaconteur.RRMap<int32_t>"; }
805class RRMap_keytype<std::string>
808 static boost::string_ref get() {
return "string"; }
810 static std::string get_map_rrtype() {
return "RobotRaconteur.RRMap<string>"; }
823template <
typename K,
typename T>
824class RRMap :
public RRValue
827 std::map<K, RR_INTRUSIVE_PTR<T> > map;
832 RRMap(
const std::map<K, RR_INTRUSIVE_PTR<T> >& mapin) : map(mapin) {}
834 RR_OVIRTUAL ~RRMap() RR_OVERRIDE {}
836 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return RRMap_keytype<K>::get_map_rrtype(); }
890 bool empty()
const {
return map.empty(); }
907 return map.insert(x);
910 template <
class InputIterator>
911 void insert(InputIterator first, InputIterator last)
913 map.insert(first, last);
950class RRList :
public RRValue
953 std::list<RR_INTRUSIVE_PTR<T> > list;
958 RRList(std::list<RR_INTRUSIVE_PTR<T> > listin) { list = listin; }
960 RR_OVIRTUAL ~RRList() RR_OVERRIDE {}
962 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return "RobotRaconteur.RRList"; }
1016 bool empty()
const {
return list.empty(); }
1030 void push_front(
const RR_INTRUSIVE_PTR<T>& x) { list.push_front(x); }
1032 void push_back(
const RR_INTRUSIVE_PTR<T>& x) { list.push_back(x); }
1046 void remove(
const RR_INTRUSIVE_PTR<T>& value) { list.remove(value); }
1087template <
typename T>
1090 return RR_INTRUSIVE_PTR<RRArray<T> >(
new RRArray<T>(
new T[length], length,
true));
1111template <
typename T>
1112static RR_INTRUSIVE_PTR<RRArray<T> >
AttachRRArray(T* data,
size_t length,
bool owned)
1114 return RR_INTRUSIVE_PTR<RRArray<T> >(
new RRArray<T>(data, length, owned));
1129template <
typename T>
1132 RR_INTRUSIVE_PTR<RRArray<T> > ret(
new RRArray<T>(
new T[length], length,
true));
1133 memcpy(ret->void_ptr(), data, length *
sizeof(T));
1170template <
typename T>
1176 memset(
static_cast<void*
>(o->data()), 0, length *
sizeof(T));
1203template <
typename T>
1216template <
typename T>
1224 if (value->size() == 0)
1243template <
typename Y,
typename U>
1248 std::vector<Y> out(in->size());
1249 for (
size_t i = 0; i < in->size(); i++)
1250 out[i] = boost::numeric_cast<Y>((*in)[i]);
1265template <
typename Y,
typename U>
1269 for (
size_t i = 0; i < in.size(); i++)
1270 (*out)[i] = boost::numeric_cast<Y>(in[i]);
1286template <
typename Y, std::
size_t N,
typename U>
1291 if (in->size() != N)
1293 boost::array<Y, N> out = {};
1294 for (
size_t i = 0; i < N; i++)
1295 out[i] = boost::numeric_cast<Y>((*in)[i]);
1310template <
typename Y, std::
size_t N,
typename U>
1315 if (in->size() != N)
1317 for (
size_t i = 0; i < N; i++)
1318 out[i] = boost::numeric_cast<Y>((*in)[i]);
1333template <
typename Y,
typename U, std::
size_t N>
1337 for (
size_t i = 0; i < N; i++)
1338 (*out)[i] = boost::numeric_cast<Y>(in[i]);
1356template <
typename Y, std::
size_t N,
typename U>
1363 boost::container::static_vector<Y, N> out(in->size());
1364 for (
size_t i = 0; i < in->size(); i++)
1365 out[i] = boost::numeric_cast<Y>((*in)[i]);
1383template <
typename Y, std::
size_t N,
typename U>
1390 out.resize(in->size());
1391 for (
size_t i = 0; i < in->size(); i++)
1392 out[i] = boost::numeric_cast<Y>((*in)[i]);
1409template <
typename Y,
typename U, std::
size_t N>
1413 for (
size_t i = 0; i < in.size(); i++)
1414 (*out)[i] = boost::numeric_cast<Y>(in[i]);
1427 const std::vector<std::string>& string_vector);
1451template <
typename T>
1474template <
typename T>
1495template <
typename T>
1518template <
typename T>
1519const RR_INTRUSIVE_PTR<T>&
rr_null_check(
const RR_INTRUSIVE_PTR<T>& ptr,
const char* msg)
1528#define RR_NULL_CHECK rr_null_check
1530template <
typename T>
1531static RR_INTRUSIVE_PTR<RRArray<T> > VerifyRRArrayLength(
const RR_INTRUSIVE_PTR<RRArray<T> >& a,
size_t len,
1535 throw NullValueException(
"Arrays must not be null");
1538 if (varlength && (a->size() > len))
1540 throw DataTypeException(
"Array dimension mismatch");
1542 if (!varlength && (a->size() != len))
1544 throw DataTypeException(
"Array dimension mismatch");
1550template <
typename T>
1551static RR_INTRUSIVE_PTR<RRList<T> > VerifyRRArrayLength(
const RR_INTRUSIVE_PTR<RRList<T> >& a,
size_t len,
1556 BOOST_FOREACH (RR_INTRUSIVE_PTR<T>& aa, (*a))
1558 VerifyRRArrayLength(aa, len, varlength);
1563template <
typename K,
typename T>
1564static RR_INTRUSIVE_PTR<RRMap<K, T> > VerifyRRArrayLength(
const RR_INTRUSIVE_PTR<RRMap<K, T> >& a,
size_t len,
1569 BOOST_FOREACH (
const RR_INTRUSIVE_PTR<T>& aa, *a | boost::adaptors::map_values)
1571 VerifyRRArrayLength(aa, len, varlength);
1588 virtual DataTypes GetElementTypeID() = 0;
1593ROBOTRACONTEUR_CORE_API
class MultiDimArray_CalculateCopyIndicesIter
1596 virtual bool Next(uint32_t& indexa, uint32_t& indexb, uint32_t& len) = 0;
1598 virtual ~MultiDimArray_CalculateCopyIndicesIter();
1602ROBOTRACONTEUR_CORE_API RR_SHARED_PTR<MultiDimArray_CalculateCopyIndicesIter>
1603MultiDimArray_CalculateCopyIndicesBeginIter(
const std::vector<uint32_t>& mema_dims,
1604 const std::vector<uint32_t>& mema_pos,
1605 const std::vector<uint32_t>& memb_dims,
1606 const std::vector<uint32_t>& memb_pos,
const std::vector<uint32_t>& count);
1629template <
typename T>
1633 RR_INTRUSIVE_PTR<RRArray<uint32_t> > Dims;
1635 RR_INTRUSIVE_PTR<RRArray<T> > Array;
1637 RRMultiDimArray(){};
1642 this->Array = Array;
1645 RR_OVIRTUAL ~RRMultiDimArray() RR_OVERRIDE {}
1647 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return "RobotRaconteur.RRMultiDimArray"; }
1649 RR_OVIRTUAL
DataTypes GetElementTypeID() RR_OVERRIDE {
return RRPrimUtil<T>::GetTypeID(); }
1660 const RR_INTRUSIVE_PTR<RRMultiDimArray<T> >& buffer,
1661 const std::vector<uint32_t>& bufferpos,
const std::vector<uint32_t>& count)
1666 RR_SHARED_PTR<detail::MultiDimArray_CalculateCopyIndicesIter> iter =
1667 detail::MultiDimArray_CalculateCopyIndicesBeginIter(mema_dims, memorypos, memb_dims, bufferpos, count);
1670 uint32_t indexa = 0;
1671 uint32_t indexb = 0;
1673 while (iter->Next(indexa, indexb, len))
1675 memcpy((buffer->Array->data() + indexb), (Array->data()) + indexa, len *
sizeof(T));
1688 const RR_INTRUSIVE_PTR<RRMultiDimArray<T> >& buffer,
1689 const std::vector<uint32_t>& bufferpos,
const std::vector<uint32_t>& count)
1694 RR_SHARED_PTR<detail::MultiDimArray_CalculateCopyIndicesIter> iter =
1695 detail::MultiDimArray_CalculateCopyIndicesBeginIter(mema_dims, memorypos, memb_dims, bufferpos, count);
1698 uint32_t indexa = 0;
1699 uint32_t indexb = 0;
1701 while (iter->Next(indexa, indexb, len))
1703 memcpy((Array->data() + indexa), (buffer->Array->data() + indexb), len *
sizeof(T));
1708template <
size_t Ndims,
typename T>
1709static RR_INTRUSIVE_PTR<RRMultiDimArray<T> > VerifyRRMultiDimArrayLength(
const RR_INTRUSIVE_PTR<RRMultiDimArray<T> >& a,
1711 const boost::array<uint32_t, Ndims>& dims)
1714 throw NullValueException(
"Arrays must not be null");
1716 if (a->Dims->size() != Ndims)
1718 throw DataTypeException(
"Array dimension mismatch");
1721 if (a->Array->size() != n_elems)
1723 throw DataTypeException(
"Array dimension mismatch");
1726 for (
size_t i = 0; i < Ndims; i++)
1728 if ((*a->Dims)[i] != dims[i])
1730 throw DataTypeException(
"Array dimension mismatch");
1737template <
size_t Ndims,
typename T>
1738static RR_INTRUSIVE_PTR<RRList<T> > VerifyRRMultiDimArrayLength(
const RR_INTRUSIVE_PTR<RRList<T> >& a,
size_t n_elems,
1739 const boost::array<uint32_t, Ndims>& dims)
1748 BOOST_FOREACH (
const RR_INTRUSIVE_PTR<T>& aa, (*a))
1750 VerifyRRMultiDimArrayLength<Ndims>(aa, n_elems, dims);
1756template <
size_t Ndims,
typename K,
typename T>
1757static RR_INTRUSIVE_PTR<RRMap<K, T> > VerifyRRMultiDimArrayLength(
const RR_INTRUSIVE_PTR<RRMap<K, T> >& a,
1759 const boost::array<uint32_t, Ndims>& dims)
1768 BOOST_FOREACH (
const RR_INTRUSIVE_PTR<T>& aa, *a | boost::adaptors::map_values)
1770 VerifyRRMultiDimArrayLength<Ndims>(aa, n_elems, dims);
1786template <
typename T>
1789 uint32_t n_elems = boost::accumulate(dims, 1, std::multiplies<uint32_t>());
1799template <
typename T>
1802 std::vector<uint32_t> length;
1803 length.push_back(0);
1817template <
typename T>
1830template <
typename T>
1844template <
typename T,
typename U>
1857template <
typename K,
typename T>
1872template <
typename K,
typename T,
typename U>
1899 virtual boost::string_ref RRElementTypeString() = 0;
1916template <
typename T>
1920 typename std::vector<T> pod_array;
1923 RRPodArray(
size_t n) { pod_array.resize(n); }
1925 RRPodArray(
typename std::vector<T>& array_in) : pod_array(array_in) {}
1927 RRPodArray(
const T& value_in) { pod_array.push_back(value_in); }
1929 RR_OVIRTUAL ~RRPodArray() RR_OVERRIDE {}
1931 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return "RobotRaconteur.RRPodArray"; }
1933 RR_OVIRTUAL boost::string_ref RRElementTypeString() RR_OVERRIDE {
return RRPrimUtil<T>::GetRRElementTypeString(); }
1983 bool empty()
const {
return pod_array.empty(); }
2005 T*
data() {
return pod_array.data(); }
2007 const T*
data()
const {
return pod_array.data(); }
2019#define RRPrimUtilPod(x, type_string) \
2021 class RRPrimUtil<x> \
2024 static DataTypes GetTypeID() { return DataTypes_pod_t; } \
2025 static MessageStringPtr GetElementTypeString() { return MessageStringPtr(type_string); } \
2026 static boost::string_ref GetRRElementTypeString() { return type_string; } \
2027 static RR_INTRUSIVE_PTR<RRPodArray<x> > PrePack(const x& val) { return ScalarToRRPodArray(val); } \
2028 template <typename U> \
2029 static x PreUnpack(const U& val) \
2031 return RRPodArrayToScalar(rr_cast<RRPodArray<x> >(val)); \
2033 typedef RR_INTRUSIVE_PTR<RRPodArray<x> > BoxedType; \
2046 RR_INTRUSIVE_PTR<RRArray<uint32_t> > Dims;
2047 virtual boost::string_ref RRElementTypeString() = 0;
2069template <
typename T>
2073 typename RR_INTRUSIVE_PTR<RRPodArray<T> > PodArray;
2075 RRPodMultiDimArray() {}
2083 RR_OVIRTUAL ~RRPodMultiDimArray() RR_OVERRIDE {}
2085 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return "RobotRaconteur.RRPodMultiDimArray"; }
2087 RR_OVIRTUAL boost::string_ref RRElementTypeString() RR_OVERRIDE {
return RRPrimUtil<T>::GetRRElementTypeString(); }
2098 const RR_INTRUSIVE_PTR<RRPodMultiDimArray<T> >& buffer,
2099 const std::vector<uint32_t>& bufferpos,
const std::vector<uint32_t>& count)
2104 RR_SHARED_PTR<detail::MultiDimArray_CalculateCopyIndicesIter> iter =
2105 detail::MultiDimArray_CalculateCopyIndicesBeginIter(mema_dims, memorypos, memb_dims, bufferpos, count);
2108 uint32_t indexa = 0;
2109 uint32_t indexb = 0;
2111 while (iter->Next(indexa, indexb, len))
2113 for (
size_t i = 0; i < len; i++)
2115 buffer->PodArray->at(indexb + i) = PodArray->at(indexa + i);
2129 const RR_INTRUSIVE_PTR<RRPodMultiDimArray<T> >& buffer,
2130 const std::vector<uint32_t>& bufferpos,
const std::vector<uint32_t>& count)
2135 RR_SHARED_PTR<detail::MultiDimArray_CalculateCopyIndicesIter> iter =
2136 detail::MultiDimArray_CalculateCopyIndicesBeginIter(mema_dims, memorypos, memb_dims, bufferpos, count);
2139 uint32_t indexa = 0;
2140 uint32_t indexb = 0;
2142 while (iter->Next(indexa, indexb, len))
2144 for (
size_t i = 0; i < len; i++)
2146 PodArray->at(indexa + i) = buffer->PodArray->at(indexb + i);
2159template <
typename T>
2172template <
typename T>
2180 if (value->size() == 0)
2183 return value->at(0);
2199template <
typename T>
2218template <
typename T>
2221 uint32_t n_elems = boost::accumulate(dims, 1, std::multiplies<uint32_t>());
2235template <
typename T>
2238 std::vector<uint32_t> length;
2239 length.push_back(0);
2243#define RRPrimUtilNamedArray(x, type_string, array_type) \
2245 class RRPrimUtil<x> \
2248 static DataTypes GetTypeID() { return DataTypes_pod_t; } \
2249 static MessageStringPtr GetElementTypeString() { return MessageStringPtr(type_string); } \
2250 static boost::string_ref GetRRElementTypeString() { return type_string; } \
2251 static RR_INTRUSIVE_PTR<RRNamedArray<x> > PrePack(const x& val) { return ScalarToRRNamedArray(val); } \
2252 template <typename U> \
2253 static x PreUnpack(const U& val) \
2255 return RRNamedArrayToScalar(rr_cast<RRNamedArray<x> >(val)); \
2257 typedef RR_INTRUSIVE_PTR<RRNamedArray<x> > BoxedType; \
2258 typedef array_type ElementArrayType; \
2259 static const size_t ElementArrayCount = sizeof(x) / sizeof(array_type); \
2260 static size_t GetElementArrayCount() { return ElementArrayCount; } \
2261 static DataTypes GetElementArrayTypeID() { return RRPrimUtil<array_type>::GetTypeID(); } \
2273 virtual DataTypes ElementArrayType() = 0;
2275 virtual size_t ElementSize() = 0;
2277 virtual size_t ElementArrayCount() = 0;
2279 virtual RR_INTRUSIVE_PTR<RRBaseArray> GetNumericBaseArray() = 0;
2281 virtual boost::string_ref RRElementTypeString() = 0;
2298template <
typename T>
2302 RR_INTRUSIVE_PTR<RRArray<typename RRPrimUtil<T>::ElementArrayType> > rr_array;
2321 this->rr_array = rr_array;
2324 virtual DataTypes GetTypeID() {
return RRPrimUtil<T>::GetTypeID(); }
2326 virtual size_t size()
const {
return rr_array->size() / (RRPrimUtil<T>::ElementArrayCount); }
2328 virtual size_t size() {
return rr_array->size() / (RRPrimUtil<T>::ElementArrayCount); }
2330 virtual void*
void_ptr() {
return rr_array->void_ptr(); }
2338 virtual RR_INTRUSIVE_PTR<RRArray<typename RRPrimUtil<T>::ElementArrayType> >
GetNumericArray() {
return rr_array; }
2342 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return "RobotRaconteur.RRNamedArray"; }
2344 RR_OVIRTUAL boost::string_ref RRElementTypeString() RR_OVERRIDE {
return RRPrimUtil<T>::GetRRElementTypeString(); }
2402 BOOST_ASSERT_MSG(i <
size(),
"out of range");
2403 return (
static_cast<T*
>(rr_array->void_ptr())[i]);
2409 BOOST_ASSERT_MSG(i <
size(),
"out of range");
2410 return (
static_cast<T*
>(rr_array->void_ptr())[i]);
2417 return (
static_cast<T*
>(rr_array->void_ptr())[i]);
2423 (
static_cast<T*
>(rr_array->void_ptr())[i]);
2437 bool empty() {
return rr_array->empty(); }
2441 void rangecheck(size_type i)
2445 std::out_of_range e(
"array<>: index out of range");
2446 boost::throw_exception(e);
2461 RR_INTRUSIVE_PTR<RRArray<uint32_t> > Dims;
2462 virtual boost::string_ref RRElementTypeString() = 0;
2484template <
typename T>
2488 typename RR_INTRUSIVE_PTR<RRNamedArray<T> > NamedArray;
2490 RRNamedMultiDimArray() {}
2495 this->NamedArray = a;
2498 RR_OVIRTUAL ~RRNamedMultiDimArray() RR_OVERRIDE {}
2500 RR_OVIRTUAL std::string RRType() RR_OVERRIDE {
return "RobotRaconteur.RRNamedMultiDimArray"; }
2502 RR_OVIRTUAL boost::string_ref RRElementTypeString() RR_OVERRIDE {
return RRPrimUtil<T>::GetRRElementTypeString(); }
2513 const RR_INTRUSIVE_PTR<RRNamedMultiDimArray<T> >& buffer,
2514 const std::vector<uint32_t>& bufferpos,
const std::vector<uint32_t>& count)
2519 RR_SHARED_PTR<detail::MultiDimArray_CalculateCopyIndicesIter> iter =
2520 detail::MultiDimArray_CalculateCopyIndicesBeginIter(mema_dims, memorypos, memb_dims, bufferpos, count);
2523 uint32_t indexa = 0;
2524 uint32_t indexb = 0;
2526 while (iter->Next(indexa, indexb, len))
2528 for (
size_t i = 0; i < len; i++)
2530 (*buffer->NamedArray)[(indexb + i)] = (*NamedArray)[(indexa + i)];
2544 const RR_INTRUSIVE_PTR<RRNamedMultiDimArray<T> >& buffer,
2545 const std::vector<uint32_t>& bufferpos,
const std::vector<uint32_t>& count)
2550 RR_SHARED_PTR<detail::MultiDimArray_CalculateCopyIndicesIter> iter =
2551 detail::MultiDimArray_CalculateCopyIndicesBeginIter(mema_dims, memorypos, memb_dims, bufferpos, count);
2554 uint32_t indexa = 0;
2555 uint32_t indexb = 0;
2557 while (iter->Next(indexa, indexb, len))
2559 for (
size_t i = 0; i < len; i++)
2561 (*NamedArray)[(indexa + i)] = (*buffer->NamedArray)[(indexb + i)];
2580template <
typename T>
2583 typedef typename RRPrimUtil<T>::ElementArrayType a_type;
2601template <
typename T>
2604 uint32_t n_elems = boost::accumulate(dims, 1, std::multiplies<uint32_t>());
2618template <
typename T>
2621 std::vector<uint32_t> length;
2622 length.push_back(0);
2636template <
typename T>
2654template <
typename T>
2662 if (value->size() == 0)
2668#define RRPrimUtilEnum(x) \
2670 class RRPrimUtil<x> \
2673 static DataTypes GetTypeID() { return DataTypes_enum_t; } \
2674 static MessageStringPtr GetElementTypeString() { return MessageStringPtr(""); } \
2675 static boost::string_ref GetRRElementTypeString() { return ""; } \
2676 static RR_INTRUSIVE_PTR<RRArray<int32_t> > PrePack(const x& val) { return ScalarToRRArray((int32_t)val); } \
2677 template <typename U> \
2678 static x PreUnpack(const U& val) \
2680 return (x)RRArrayToScalar(rr_cast<RRArray<int32_t> >(val)); \
2682 typedef RR_INTRUSIVE_PTR<RRArray<int32_t> > BoxedType; \
2685class ROBOTRACONTEUR_CORE_API RobotRaconteurNode;
2752#ifdef ROBOTRACONTEUR_USE_SMALL_VECTOR
2753typedef boost::container::small_vector<boost::asio::const_buffer, 4> const_buffers;
2754typedef boost::container::small_vector<boost::asio::mutable_buffer, 4> mutable_buffers;
2756typedef std::vector<boost::asio::const_buffer> const_buffers;
2757typedef std::vector<boost::asio::mutable_buffer> mutable_buffers;
2760template <
typename BufferSequence>
2761void buffers_consume(BufferSequence& b,
size_t count)
2763 typename BufferSequence::iterator e = b.begin();
2765 typename BufferSequence::iterator end = b.end();
2770 if (count > boost::asio::buffer_size(*e))
2772 count -= boost::asio::buffer_size(*e);
2789template <
typename BufferSequence>
2790BufferSequence buffers_consume_copy(BufferSequence& b,
size_t count)
2793 typename BufferSequence::iterator e = b.begin();
2795 typename BufferSequence::iterator end = b.end();
2796 for (; e != end; e++)
2800 if (count > boost::asio::buffer_size(*e))
2802 count -= boost::asio::buffer_size(*e);
2806 o.push_back(*e + count);
2819template <
typename BufferSequence>
2820BufferSequence buffers_consume_copy(
const BufferSequence& b,
size_t count)
2823 typename BufferSequence::const_iterator e = b.begin();
2825 typename BufferSequence::const_iterator end = b.end();
2826 for (; e != end; e++)
2830 if (count > boost::asio::buffer_size(*e))
2832 count -= boost::asio::buffer_size(*e);
2836 o.push_back(*e + count);
2849template <
typename BufferSequence>
2850BufferSequence buffers_truncate(BufferSequence& b,
size_t count)
2853 typename BufferSequence::iterator e = b.begin();
2855 typename BufferSequence::iterator end = b.end();
2857 for (; e != end; e++)
2859 if (p + boost::asio::buffer_size(*e) <= count)
2862 p += boost::asio::buffer_size(*e);
2866 o.push_back(boost::asio::buffer(*e, count - p));
2874template <
typename BufferSequence>
2875BufferSequence buffers_truncate(
const BufferSequence& b,
size_t count)
2878 typename BufferSequence::const_iterator e = b.begin();
2880 typename BufferSequence::const_iterator end = b.end();
2882 for (; e != end; e++)
2884 if (p + boost::asio::buffer_size(*e) <= count)
2887 p += boost::asio::buffer_size(*e);
2891 o.push_back(boost::asio::buffer(*e, count - p));
2902struct ROBOTRACONTEUR_CORE_API ServicePathSegment
2905 ServicePathSegment();
2907 ServicePathSegment(
const std::string& name,
2908 const boost::optional<std::string>& index = boost::optional<std::string>());
2913 boost::optional<std::string> index;
2916ROBOTRACONTEUR_CORE_API
bool operator==(
const ServicePathSegment& lhs,
const ServicePathSegment& rhs);
2918ROBOTRACONTEUR_CORE_API
bool operator!=(
const ServicePathSegment& lhs,
const ServicePathSegment& rhs);
2942ROBOTRACONTEUR_CORE_API std::vector<ServicePathSegment>
ParseServicePath(
const std::string& path);
2950ROBOTRACONTEUR_CORE_API std::string
BuildServicePath(
const std::vector<ServicePathSegment>& segments);
2983ROBOTRACONTEUR_CORE_API std::string encode_index(boost::string_ref index);
2985ROBOTRACONTEUR_CORE_API std::string decode_index(boost::string_ref index);
2987template <
typename T,
typename U>
2988bool try_convert_string_to_number(
const U& arg, T& result)
2990 if (boost::conversion::try_lexical_convert(arg, result))
2995 if (!boost::is_integral<T>::value)
3000 boost::regex hex_regex(
"^[+\\-]?0x[\\da-fA-F]+$");
3001 if (!boost::regex_match(arg.begin(), arg.end(), hex_regex))
3006 std::stringstream ss;
3007 ss << std::hex << arg;
3010 if (ss.fail() || !ss.eof())
3022#ifndef ROBOTRACONTEUR_NO_CXX11_TEMPLATE_ALIASES
3040template <
typename T>
3043template <
typename T>
3046template <
typename K,
typename T>
3049template <
typename K,
typename T>
3052template <
typename T>
3055template <
typename T>
3066template <
typename T>
3069template <
typename T>
3076template <
typename T>
3079template <
typename T>
3086template <
typename T>
3089template <
typename T>
3096template <
typename T>
3099template <
typename T>
3106template <
typename T>
3109template <
typename T>
boost::intrusive_ptr< RRMap< K, T > > AllocateEmptyRRMap()
Allocate an empty RRMap.
Definition DataTypes.h:1858
static T RRNamedArrayToScalar(const boost::intrusive_ptr< RRNamedArray< T > > &value)
Convert a namedarray array with one element into a namedarray.
Definition DataTypes.h:2655
boost::intrusive_ptr< RRArray< char > > stringToRRArray(boost::string_ref str)
Convert a string to an array of characters.
static boost::intrusive_ptr< RRPodArray< T > > AllocateEmptyRRPodArray(size_t length)
Allocate a pod array with the specified type and length and initialize to zero.
Definition DataTypes.h:2200
static boost::intrusive_ptr< RRArray< Y > > VectorToRRArray(const std::vector< U > &in)
Convert a std::vector to an RRArray<Y>.
Definition DataTypes.h:1266
boost::shared_ptr< const RRObject > RRObjectConstPtr
Convenience alias for RRObject const shared_ptr.
Definition DataTypes.h:3026
boost::intrusive_ptr< RRList< T > > RRListPtr
Convenience alias for RRList intrusive_ptr.
Definition DataTypes.h:3053
boost::intrusive_ptr< RRPodBaseMultiDimArray > RRPodBaseMultiDimArrayPtr
Convenience alias for RRPodBaseMultiDimArray intrusive_ptr.
Definition DataTypes.h:3082
boost::intrusive_ptr< T > & rr_null_check(boost::intrusive_ptr< T > &ptr)
Checks if a value RR_INTRUSIVE_PTR is null.
Definition DataTypes.h:1452
static boost::intrusive_ptr< RRArray< Y > > ArrayToRRArray(boost::array< U, N > in)
Convert a boost::array to an RRArray.
Definition DataTypes.h:1334
static T RRArrayToScalar(const boost::intrusive_ptr< RRArray< T > > &value)
Convert an array with one element into a scalar.
Definition DataTypes.h:1217
boost::intrusive_ptr< RRMap< K, T > > RRMapPtr
Convenience alias for RRMap intrusive_ptr.
Definition DataTypes.h:3047
static boost::intrusive_ptr< RRArray< T > > AttachRRArrayCopy(const T *data, const size_t length)
Allocates an array object and copies existing numeric.
Definition DataTypes.h:1130
boost::intrusive_ptr< const RRList< T > > RRListConstPtr
Convenience alias for RRList const intrusive_ptr.
Definition DataTypes.h:3056
boost::intrusive_ptr< RRPodBaseArray > RRPodBaseArrayPtr
Convenience alias for RRPodBaseArray intrusive_ptr.
Definition DataTypes.h:3072
static boost::shared_ptr< T > rr_cast(const boost::shared_ptr< U > &objin)
Dynamic cast a RR_SHARED_PTR type. Throws DataTypeMismatchException if cast is invalid instead of ret...
Definition DataTypes.h:199
boost::intrusive_ptr< RRPodArray< T > > RRPodArrayPtr
Convenience alias for RRPodArray intrusive_ptr.
Definition DataTypes.h:3077
size_t RRArrayElementSize(DataTypes type)
Get the number of bytes to store a numeric primitive scalar.
static boost::intrusive_ptr< RRPodMultiDimArray< T > > AllocateEmptyRRPodMultiDimArray(const std::vector< uint32_t > &dims)
Allocate an empty multidimensional pod array with the specified dimensions.
Definition DataTypes.h:2219
static boost::intrusive_ptr< RRArray< T > > ScalarToRRArray(T value)
Convert a scalar number into an array with one element.
Definition DataTypes.h:1204
boost::intrusive_ptr< const MessageElementData > MessageElementDataConstPtr
Convenience alias for MessageElementData const intrusive_ptr.
Definition DataTypes.h:3034
std::vector< ServicePathSegment > ParseServicePath(const std::string &path)
Parse a Robot Raconteur service path into segments.
boost::intrusive_ptr< const RRNamedBaseMultiDimArray > RRNamedBaseMultiDimBaseArrayConstPtr
Convenience alias for RRNamedBaseMultiDimArray const intrusive_ptr.
Definition DataTypes.h:3104
boost::intrusive_ptr< MessageElementData > MessageElementDataPtr
Convenience alias for MessageElementData intrusive_ptr.
Definition DataTypes.h:3032
bool IsStringIdentifier(boost::string_ref str)
Test if a string is a Robot Raconteur identifier.
boost::intrusive_ptr< RRValue > RRValuePtr
Convenience alias for RRValue intrusive_ptr.
Definition DataTypes.h:3028
boost::posix_time::ptime TimeSpecToPTime(const TimeSpec &ts)
Convert a TimeSpec into a boost::posix_time::ptime.
boost::intrusive_ptr< const RRPodMultiDimArray< T > > RRPodMultiDimArrayConstPtr
Convenience alias for RRPodMultiDimArray const intrusive_ptr.
Definition DataTypes.h:3090
static boost::intrusive_ptr< RRPodArray< T > > ScalarToRRPodArray(const T &value)
Convert a scalar pod into a pod array with one element.
Definition DataTypes.h:2160
boost::intrusive_ptr< RRList< T > > AllocateRRList(const U &c)
Allocate RRList with a value.
Definition DataTypes.h:1845
std::string RRArrayToString(const boost::intrusive_ptr< RRArray< char > > &arr)
Convert an array of characters into std::string.
TimeSpec ptimeToTimeSpec(const boost::posix_time::ptime &t)
Convert a boost::posix_time::ptime into a TimeSpec.
static T RRPodArrayToScalar(const boost::intrusive_ptr< RRPodArray< T > > &value)
Convert a pod array with one element into a scalar pod.
Definition DataTypes.h:2173
boost::intrusive_ptr< RRList< RRArray< char > > > stringVectorToRRList(const std::vector< std::string > &string_vector)
Convert a string vector to a RRList.
boost::intrusive_ptr< RRPodMultiDimArray< T > > RRPodMultiDimArrayPtr
Convenience alias for RRPodMultiDimArray intrusive_ptr.
Definition DataTypes.h:3087
boost::intrusive_ptr< const RRPodArray< T > > RRPodArrayConstPtr
Convenience alias for RRPodArray const intrusive_ptr.
Definition DataTypes.h:3080
boost::intrusive_ptr< const RRPodBaseMultiDimArray > RRPodBaseMultiDimBaseArrayConstPtr
Convenience alias for RRPodBaseMultiDimArray const intrusive_ptr.
Definition DataTypes.h:3084
boost::intrusive_ptr< const RRNamedBaseArray > RRNamedBaseArrayConstPtr
Convenience alias for RRNamedBaseArray const intrusive_ptr.
Definition DataTypes.h:3094
static boost::intrusive_ptr< RRArray< T > > AllocateEmptyRRArray(size_t length)
Allocate a numeric primitive or character array with the specified type and length and initialize to ...
Definition DataTypes.h:1171
boost::shared_ptr< RRObject > RRObjectPtr
Convenience alias for RRObject shared_ptr.
Definition DataTypes.h:3024
boost::intrusive_ptr< RRNamedArray< T > > RRNamedArrayPtr
Convenience alias for RRNamedArray intrusive_ptr.
Definition DataTypes.h:3097
boost::intrusive_ptr< const RRMultiDimArray< T > > RRMultiDimArrayConstPtr
Convenience alias for RRMultiDimArray const intrusive_ptr.
Definition DataTypes.h:3070
static boost::intrusive_ptr< RRNamedArray< T > > AllocateEmptyRRNamedArray(size_t length)
Allocate a namedarray array with the specified type and length and initialize to zero.
Definition DataTypes.h:2581
std::vector< std::string > RRListToStringVector(const boost::intrusive_ptr< RRList< RRArray< char > > > &list)
Convert a RRList containing strings to a string vector.
boost::intrusive_ptr< RRMultiDimBaseArray > RRMultiDimBaseArrayPtr
Convenience alias for RRMultiDimBaseArray intrusive_ptr.
Definition DataTypes.h:3062
static boost::intrusive_ptr< RRArray< T > > AllocateRRArray(size_t length)
Allocate a numeric primitive or character array with the specified type and length.
Definition DataTypes.h:1088
boost::intrusive_ptr< RRNamedBaseMultiDimArray > RRNamedBaseMultiDimArrayPtr
Convenience alias for RRNamedBaseMultiDimArray intrusive_ptr.
Definition DataTypes.h:3102
boost::intrusive_ptr< const RRArray< T > > RRArrayConstPtr
Convenience alias for RRArray const intrusive_ptr.
Definition DataTypes.h:3044
boost::intrusive_ptr< RRNamedMultiDimArray< T > > RRNamedMultiDimArrayPtr
Convenience alias for RRNamedMultiDimArray intrusive_ptr.
Definition DataTypes.h:3107
boost::intrusive_ptr< RRBaseArray > AllocateRRArrayByType(DataTypes type, size_t length)
Allocate an RRBaseArray by type code.
boost::intrusive_ptr< const RRMultiDimBaseArray > RRMultiDimBaseArrayConstPtr
Convenience alias for RRMultiDimBaseArray const intrusive_ptr.
Definition DataTypes.h:3064
boost::intrusive_ptr< RRArray< T > > RRArrayPtr
Convenience alias for RRArray intrusive_ptr.
Definition DataTypes.h:3041
boost::intrusive_ptr< RRStructure > RRStructurePtr
Convenience alias for RRStructure intrusive_ptr.
Definition DataTypes.h:3058
bool IsStringUUID(boost::string_ref str)
Test if a string is a UUID.
static boost::intrusive_ptr< RRMultiDimArray< T > > AllocateRRMultiDimArray(const boost::intrusive_ptr< RRArray< uint32_t > > &dims, const boost::intrusive_ptr< RRArray< T > > &array_)
Allocate a multidimensional using existing dimensions and data array.
Definition DataTypes.h:1818
static boost::intrusive_ptr< RRNamedArray< T > > ScalarToRRNamedArray(const T &value)
Convert a scalar namedarray into a namedarray array with one element.
Definition DataTypes.h:2637
bool IsStringName(boost::string_ref str)
Test if a string is a valid Robot Raconteur name.
boost::intrusive_ptr< const RRBaseArray > RRBaseArrayConstPtr
Convenience alias for RRBaseArray const intrusive_ptr.
Definition DataTypes.h:3038
boost::intrusive_ptr< RRBaseArray > RRBaseArrayPtr
Convenience alias for RRBaseArray intrusive_ptr.
Definition DataTypes.h:3036
static boost::intrusive_ptr< RRArray< T > > AttachRRArray(T *data, size_t length, bool owned)
Allocates an array object and attaches to existing numeric primitive or character array pointer.
Definition DataTypes.h:1112
boost::intrusive_ptr< RRMap< K, T > > AllocateRRMap(const U &c)
Allocate RRMap with value.
Definition DataTypes.h:1873
boost::intrusive_ptr< RRMultiDimArray< T > > RRMultiDimArrayPtr
Convenience alias for RRMultiDimArray intrusive_ptr.
Definition DataTypes.h:3067
boost::intrusive_ptr< const RRPodBaseArray > RRPodBaseArrayConstPtr
Convenience alias for RRPodBaseArray const intrusive_ptr.
Definition DataTypes.h:3074
boost::intrusive_ptr< const RRStructure > RRStructureConstPtr
Convenience alias for RRStructure const intrusive_ptr.
Definition DataTypes.h:3060
boost::intrusive_ptr< const RRValue > RRValueConstPtr
Convenience alias for RRValue const intrusive_ptr.
Definition DataTypes.h:3030
boost::intrusive_ptr< const RRMap< K, T > > RRMapConstPtr
Convenience alias for RRMap const intrusive_ptr.
Definition DataTypes.h:3050
boost::intrusive_ptr< const RRNamedMultiDimArray< T > > RRNamedMultiDimArrayConstPtr
Convenience alias for RRNamedMultiDimArray const intrusive_ptr.
Definition DataTypes.h:3110
std::string BuildServicePath(const std::vector< ServicePathSegment > &segments)
Build a Robot Raconteur service path from segments.
bool IsStringScopedName(boost::string_ref str)
Test if a string is a valid Robot Raconteur scoped name.
boost::intrusive_ptr< const RRNamedArray< T > > RRNamedArrayConstPtr
Convenience alias for RRNamedArray const intrusive_ptr.
Definition DataTypes.h:3100
boost::intrusive_ptr< RRList< T > > AllocateEmptyRRList()
Allocate an empty RRList.
Definition DataTypes.h:1831
static boost::container::static_vector< Y, N > RRArrayToStaticVector(const boost::intrusive_ptr< RRArray< U > > &in)
Convert an RRArray to a boost::static_vector.
Definition DataTypes.h:1357
static boost::intrusive_ptr< RRNamedMultiDimArray< T > > AllocateEmptyRRNamedMultiDimArray(const std::vector< uint32_t > &dims)
Allocate an empty multidimensional namedarray array with the specified dimensions.
Definition DataTypes.h:2602
std::string EncodeServicePathIndex(const std::string &index)
Encode a service path index for use in a Robot Raconteur service path.
static std::vector< Y > RRArrayToVector(const boost::intrusive_ptr< RRArray< U > > &in)
Convert an RRArray<U> to a std::vector<Y>.
Definition DataTypes.h:1244
static boost::array< Y, N > RRArrayToArray(const boost::intrusive_ptr< RRArray< U > > &in)
Convert an RRArray to a boost::array.
Definition DataTypes.h:1287
boost::intrusive_ptr< RRNamedBaseArray > RRNamedBaseArrayPtr
Convenience alias for RRNamedBaseArray intrusive_ptr.
Definition DataTypes.h:3092
static boost::intrusive_ptr< RRArray< Y > > StaticVectorToRRArray(boost::container::static_vector< U, N > in)
Convert a boost::container::static_vector to an RRArray.
Definition DataTypes.h:1410
std::string DecodeServicePathIndex(const std::string &index)
Decode a service path index from a Robot Raconteur service path.
static boost::intrusive_ptr< RRMultiDimArray< T > > AllocateEmptyRRMultiDimArray(const std::vector< uint32_t > &dims)
Allocate an empty multidimensional array with the specified dimensions.
Definition DataTypes.h:1787
DataTypes
Type codes for types supported by Robot Raconteur.
Definition RobotRaconteurConstants.h:41
@ DataTypes_single_t
IEEE-754 32-bit floating point number.
Definition RobotRaconteurConstants.h:47
@ DataTypes_uint8_t
8-bit unsigned integer
Definition RobotRaconteurConstants.h:51
@ DataTypes_int16_t
16-bit signed integer
Definition RobotRaconteurConstants.h:53
@ DataTypes_uint32_t
32-bit unsigned integer
Definition RobotRaconteurConstants.h:59
@ DataTypes_uint16_t
16-bit unsigned integer
Definition RobotRaconteurConstants.h:55
@ DataTypes_int8_t
8-bit signed integer
Definition RobotRaconteurConstants.h:49
@ DataTypes_uint64_t
64-bit unsigned integer
Definition RobotRaconteurConstants.h:63
@ DataTypes_double_t
IEEE-754 64-bit floating point number.
Definition RobotRaconteurConstants.h:45
@ DataTypes_int64_t
64-bit signed integer
Definition RobotRaconteurConstants.h:61
@ DataTypes_string_t
UTF-8 string.
Definition RobotRaconteurConstants.h:65
@ DataTypes_int32_t
32-bit signed integer
Definition RobotRaconteurConstants.h:57
@ DataTypes_void_t
void or null type
Definition RobotRaconteurConstants.h:43
@ DataTypes_bool_t
8-bit boolean
Definition RobotRaconteurConstants.h:71
@ DataTypes_cdouble_t
128-bit complex double (real,imag)
Definition RobotRaconteurConstants.h:67
@ DataTypes_csingle_t
64-bit complex float (real,imag)
Definition RobotRaconteurConstants.h:69
DataTypeMismatchException(const std::string &message, std::string sub_name="", const boost::intrusive_ptr< RRValue > ¶m_=boost::intrusive_ptr< RRValue >())
Construct a DataTypeMismatchException.
Base class for types that can be stored in MessageElement.
Definition DataTypes.h:374
Exception thrown for an unexpected null value.
Definition Error.h:669
Exception thrown when an attempt to access an array or container index is out of range.
Definition Error.h:875
Numeric primitive or character array value type.
Definition DataTypes.h:578
std::ptrdiff_t difference_type
Definition DataTypes.h:614
RRArray< T > & operator=(const RRArray< T2 > &rhs)
assignment with type conversion
Definition DataTypes.h:710
T value_type
Definition DataTypes.h:602
reference operator[](size_type i)
access specified element
Definition DataTypes.h:652
reference back()
access the last element
Definition DataTypes.h:685
RR_OVIRTUAL size_t size() RR_OVERRIDE
Get the number of elements in the array.
Definition DataTypes.h:594
const_reverse_iterator rend() const
returns a reverse iterator to the end
Definition DataTypes.h:647
const_iterator cend() const
returns a const iterator to the end
Definition DataTypes.h:630
bool empty()
checks whether the container is empty
Definition DataTypes.h:691
const T & const_reference
Definition DataTypes.h:610
std::size_t size_type
Definition DataTypes.h:612
void fill(const T &value)
Fill array with value.
Definition DataTypes.h:729
const_reference at(size_type i) const
access specified element with bounds checking
Definition DataTypes.h:672
iterator begin()
returns an iterator to the beginning
Definition DataTypes.h:619
const_reverse_iterator crend() const
returns a reverse iterator to the end
Definition DataTypes.h:649
reverse_iterator rend()
returns a reverse iterator to the end
Definition DataTypes.h:645
iterator end()
returns an iterator to the end
Definition DataTypes.h:626
const_reference operator[](size_type i) const
access specified element
Definition DataTypes.h:659
size_type max_size()
returns the maximum possible number of elements
Definition DataTypes.h:693
reverse_iterator rbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:638
boost::reverse_iterator< const_iterator > const_reverse_iterator
Definition DataTypes.h:635
boost::reverse_iterator< iterator > reverse_iterator
Definition DataTypes.h:633
const_iterator end() const
returns an iterator to the end
Definition DataTypes.h:628
const_reverse_iterator rbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:640
T * data()
direct access to the underlying array
Definition DataTypes.h:698
const_reference back() const
access the last element
Definition DataTypes.h:688
reference front()
access the first element
Definition DataTypes.h:679
const T * const_iterator
Definition DataTypes.h:606
RR_OVIRTUAL void * void_ptr() RR_OVERRIDE
Get a void pointer to the contained array.
Definition DataTypes.h:590
T * iterator
Definition DataTypes.h:604
T & reference
Definition DataTypes.h:608
const_iterator cbegin() const
returns a const iterator to the beginning
Definition DataTypes.h:623
const_reverse_iterator crbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:642
const_reference front() const
access the first element
Definition DataTypes.h:682
const_iterator begin() const
returns an iterator to the beginning
Definition DataTypes.h:621
void assign(const T &value)
Assign one value to all elements.
Definition DataTypes.h:723
reference at(size_type i)
access specified element with bounds checking
Definition DataTypes.h:666
const T * data() const
direct access to the underlying array
Definition DataTypes.h:696
RR_OVIRTUAL size_t ElementSize() RR_OVERRIDE
Get the number of bytes per element of the array.
Definition DataTypes.h:596
Base class for numeric and character array value types.
Definition DataTypes.h:525
virtual size_t size()=0
Get the number of elements in the array.
virtual size_t ElementSize()=0
Get the number of bytes per element of the array.
virtual void * void_ptr()=0
Get a void pointer to the contained array.
List container value type.
Definition DataTypes.h:951
const_iterator begin() const
returns an iterator to the beginning
Definition DataTypes.h:992
std::list< boost::intrusive_ptr< T > >::const_iterator const_iterator
Definition DataTypes.h:983
std::list< boost::intrusive_ptr< T > > & GetStorageContainer()
Get the underlying storage container.
Definition DataTypes.h:1055
void pop_back()
removes the last element
Definition DataTypes.h:1036
std::list< boost::intrusive_ptr< T > >::reference reference
Definition DataTypes.h:973
std::list< boost::intrusive_ptr< T > >::iterator iterator
Definition DataTypes.h:981
std::list< boost::intrusive_ptr< T > >::reverse_iterator reverse_iterator
Definition DataTypes.h:985
std::list< boost::intrusive_ptr< T > >::const_pointer const_pointer
Definition DataTypes.h:971
iterator erase(const_iterator first, const_iterator last)
erases element
Definition DataTypes.h:1042
std::list< boost::intrusive_ptr< T > >::const_reverse_iterator const_reverse_iterator
Definition DataTypes.h:987
const_reverse_iterator const crend()
returns a reverse iterator to the end
Definition DataTypes.h:1014
reference front()
access the first element
Definition DataTypes.h:1022
std::list< boost::intrusive_ptr< T > >::size_type size_type
Definition DataTypes.h:977
void clear()
clears the contents
Definition DataTypes.h:1044
size_type max_size() const
returns the maximum possible number of elements
Definition DataTypes.h:1020
const_reverse_iterator crend() const
returns a reverse iterator to the end
Definition DataTypes.h:1004
iterator insert(const_iterator p, const boost::intrusive_ptr< T > &x)
inserts element
Definition DataTypes.h:1038
std::list< boost::intrusive_ptr< T > >::pointer pointer
Definition DataTypes.h:969
const_reference back() const
access the last element
Definition DataTypes.h:1028
std::list< boost::intrusive_ptr< T > >::difference_type difference_type
Definition DataTypes.h:979
const_reference front() const
access the first element
Definition DataTypes.h:1024
void push_front(const boost::intrusive_ptr< T > &x)
inserts an element at the beginning
Definition DataTypes.h:1030
reference back()
access the last element
Definition DataTypes.h:1026
void remove(const boost::intrusive_ptr< T > &value)
removes elements equal to value
Definition DataTypes.h:1046
reverse_iterator rbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:998
void push_back(const boost::intrusive_ptr< T > &x)
adds an element to the end
Definition DataTypes.h:1032
const_iterator cend() const
returns an iterator to the end
Definition DataTypes.h:1010
const_reverse_iterator const crbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:1012
iterator begin()
returns an iterator to the beginning
Definition DataTypes.h:990
const_reverse_iterator rend() const
returns a reverse iterator to the end
Definition DataTypes.h:1006
bool empty() const
checks whether the container is empty
Definition DataTypes.h:1016
boost::intrusive_ptr< T > value_type
Definition DataTypes.h:967
void pop_front()
removes the first element
Definition DataTypes.h:1034
virtual size_type size() const
returns the number of elements
Definition DataTypes.h:1018
const_iterator end() const
returns an iterator to the end
Definition DataTypes.h:996
const_reverse_iterator rbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:1000
std::list< boost::intrusive_ptr< T > >::const_reference const_reference
Definition DataTypes.h:975
const_iterator cbegin() const
returns an iterator to the beginning
Definition DataTypes.h:1008
reverse_iterator rend()
returns a reverse iterator to the end
Definition DataTypes.h:1002
iterator erase(const_iterator p)
erases element
Definition DataTypes.h:1040
iterator end()
returns an iterator to the end
Definition DataTypes.h:994
Map container value type.
Definition DataTypes.h:825
void erase(iterator p)
erases element
Definition DataTypes.h:916
std::pair< iterator, bool > insert(const value_type &x)
inserts elements
Definition DataTypes.h:902
iterator end()
returns an iterator to the end
Definition DataTypes.h:872
std::map< K, boost::intrusive_ptr< T > >::value_type value_type
Definition DataTypes.h:845
std::map< K, boost::intrusive_ptr< T > >::key_type key_type
Definition DataTypes.h:841
const_reverse_iterator rbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:882
const_iterator begin() const
returns an iterator to the beginning
Definition DataTypes.h:870
const_reverse_iterator crbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:880
mapped_type & operator[](const key_type &k)
access or insert the specified element
Definition DataTypes.h:896
std::map< K, boost::intrusive_ptr< T > > & GetStorageContainer()
Get the underlying storage container.
Definition DataTypes.h:937
std::map< K, boost::intrusive_ptr< T > >::const_iterator const_iterator
Definition DataTypes.h:859
const_reverse_iterator crend() const
returns a reverse iterator to the end
Definition DataTypes.h:886
size_type size() const
returns the number of elements
Definition DataTypes.h:892
const_iterator find(const key_type &x) const
finds element with the specified key
Definition DataTypes.h:926
bool empty() const
checks whether the container is empty
Definition DataTypes.h:890
iterator find(const key_type &x)
finds element with the specified key
Definition DataTypes.h:924
void erase(iterator first, iterator last)
erases element
Definition DataTypes.h:920
std::map< K, boost::intrusive_ptr< T > >::const_reverse_iterator const_reverse_iterator
Definition DataTypes.h:863
const mapped_type & at(const key_type &k) const
access specified element with bounds checking
Definition DataTypes.h:900
std::map< K, boost::intrusive_ptr< T > >::pointer pointer
Definition DataTypes.h:847
size_type count(const key_type &x) const
returns the number of elemnts matching the specified key
Definition DataTypes.h:928
reverse_iterator rend()
returns a reverse iterator to the end
Definition DataTypes.h:884
std::map< K, boost::intrusive_ptr< T > >::iterator iterator
Definition DataTypes.h:857
mapped_type & at(const key_type &k)
access specified element with bounds checking
Definition DataTypes.h:898
const_iterator end() const
returns an iterator to the end
Definition DataTypes.h:876
void clear()
clears the contents
Definition DataTypes.h:922
std::map< K, boost::intrusive_ptr< T > >::reverse_iterator reverse_iterator
Definition DataTypes.h:861
std::map< K, boost::intrusive_ptr< T > >::mapped_type mapped_type
Definition DataTypes.h:843
std::map< K, boost::intrusive_ptr< T > >::reference reference
Definition DataTypes.h:851
const_iterator cend() const
returns an iterator to the end
Definition DataTypes.h:874
size_type max_size() const
returns the maximum possible number of elements
Definition DataTypes.h:894
std::map< K, boost::intrusive_ptr< T > >::const_reference const_reference
Definition DataTypes.h:853
iterator begin()
returns an iterator to the beginning
Definition DataTypes.h:866
iterator insert(const_iterator p, const value_type &x)
inserts elements
Definition DataTypes.h:904
const_reverse_iterator rend() const
returns a reverse iterator to the end
Definition DataTypes.h:888
const_iterator cbegin() const
returns an iterator to the beginning
Definition DataTypes.h:868
std::map< K, boost::intrusive_ptr< T > >::const_pointer const_pointer
Definition DataTypes.h:849
std::map< K, boost::intrusive_ptr< T > >::size_type size_type
Definition DataTypes.h:855
size_type erase(const key_type &x)
erases element
Definition DataTypes.h:918
void insert(InputIterator first, InputIterator last)
inserts elements
Definition DataTypes.h:911
reverse_iterator rbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:878
Numeric primitive multidimensional array value type.
Definition DataTypes.h:1631
virtual void AssignSubArray(const std::vector< uint32_t > &memorypos, const boost::intrusive_ptr< RRMultiDimArray< T > > &buffer, const std::vector< uint32_t > &bufferpos, const std::vector< uint32_t > &count)
Assign a subset of an array.
Definition DataTypes.h:1687
virtual void RetrieveSubArray(const std::vector< uint32_t > &memorypos, const boost::intrusive_ptr< RRMultiDimArray< T > > &buffer, const std::vector< uint32_t > &bufferpos, const std::vector< uint32_t > &count)
Retrieve a subset of an array.
Definition DataTypes.h:1659
Base class for numeric multidimensional arrays.
Definition DataTypes.h:1584
namedarray array value type
Definition DataTypes.h:2300
iterator end()
returns an iterator to the end
Definition DataTypes.h:2374
T & reference
Definition DataTypes.h:2356
const_iterator end() const
returns an iterator to the end
Definition DataTypes.h:2376
const_reverse_iterator crend() const
returns a reverse iterator to the end
Definition DataTypes.h:2397
reverse_iterator rbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:2386
virtual size_t size() const
returns the number of elements (namedarray elements)
Definition DataTypes.h:2326
RR_OVIRTUAL boost::intrusive_ptr< RRBaseArray > GetNumericBaseArray() RR_OVERRIDE
get the underlying numeric array as an RRBaseArray
Definition DataTypes.h:2340
const_reference front() const
access the first element
Definition DataTypes.h:2429
bool empty()
checks whether the container is empty
Definition DataTypes.h:2437
virtual size_t size()
returns the number of elements (namedarray elements)
Definition DataTypes.h:2328
const_reference at(size_type i) const
access specified namedarray element with bounds checking
Definition DataTypes.h:2420
const_iterator cbegin() const
returns an iterator to the beginning
Definition DataTypes.h:2371
reference back()
access the last element
Definition DataTypes.h:2432
std::size_t size_type
Definition DataTypes.h:2360
const T & const_reference
Definition DataTypes.h:2358
RR_OVIRTUAL DataTypes ElementArrayType() RR_OVERRIDE
get the type of the underlying numeric array
Definition DataTypes.h:2334
const_reference operator[](size_type i) const
access specified namedarray element
Definition DataTypes.h:2407
iterator begin()
returns an iterator to the beginning
Definition DataTypes.h:2367
std::ptrdiff_t difference_type
Definition DataTypes.h:2362
reference front()
access the first element
Definition DataTypes.h:2427
RR_OVIRTUAL size_t ElementSize() RR_OVERRIDE
get the number of bytes per namedarray element of the array
Definition DataTypes.h:2332
const_reverse_iterator rbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:2388
const_iterator begin() const
returns an iterator to the beginning
Definition DataTypes.h:2369
RR_OVIRTUAL size_t ElementArrayCount() RR_OVERRIDE
get the total number of elements in the underlying numeric array
Definition DataTypes.h:2336
RRNamedArray(const boost::intrusive_ptr< RRArray< typename RRPrimUtil< T >::ElementArrayType > > &rr_array)
Construct a RRNamedArray object.
Definition DataTypes.h:2317
const_reverse_iterator crbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:2390
const_reference back() const
access the last element
Definition DataTypes.h:2434
virtual boost::intrusive_ptr< RRArray< typename RRPrimUtil< T >::ElementArrayType > > GetNumericArray()
get the underlying numeric RRArray
Definition DataTypes.h:2338
reverse_iterator rend()
returns a reverse iterator to the end
Definition DataTypes.h:2393
size_type max_size()
returns the maximum possible number of elements
Definition DataTypes.h:2439
reference operator[](size_type i)
access specified namedarray element
Definition DataTypes.h:2400
const_reverse_iterator rend() const
returns a reverse iterator to the end
Definition DataTypes.h:2395
T * iterator
Definition DataTypes.h:2352
T value_type
Definition DataTypes.h:2350
boost::reverse_iterator< const_iterator > const_reverse_iterator
Definition DataTypes.h:2383
const_iterator cend() const
returns an iterator to the end
Definition DataTypes.h:2378
const T * const_iterator
Definition DataTypes.h:2354
reference at(size_type i)
access specified namedarray element with bounds checking
Definition DataTypes.h:2414
boost::reverse_iterator< iterator > reverse_iterator
Definition DataTypes.h:2381
virtual void * void_ptr()
get a void pointer to the underlying numeric array
Definition DataTypes.h:2330
Base class for namedarray array value types.
Definition DataTypes.h:2271
Base class for namedarray multidimensional arrays.
Definition DataTypes.h:2459
namedarray multidimensional array value type
Definition DataTypes.h:2486
virtual void AssignSubArray(const std::vector< uint32_t > &memorypos, const boost::intrusive_ptr< RRNamedMultiDimArray< T > > &buffer, const std::vector< uint32_t > &bufferpos, const std::vector< uint32_t > &count)
Assign a subset of an array.
Definition DataTypes.h:2543
virtual void RetrieveSubArray(const std::vector< uint32_t > &memorypos, const boost::intrusive_ptr< RRNamedMultiDimArray< T > > &buffer, const std::vector< uint32_t > &bufferpos, const std::vector< uint32_t > &count)
Retrieve a subset of an array.
Definition DataTypes.h:2512
virtual std::string RRType()=0
Gets the type of the object as a string. This string is in C++ format, using two colons to separate n...
pod array value type
Definition DataTypes.h:1918
std::vector< T >::iterator iterator
Definition DataTypes.h:1950
size_type max_size() const
returns the maximum possible number of elements
Definition DataTypes.h:1987
reference front()
access the first element
Definition DataTypes.h:1989
const_reverse_iterator rbegin() const
returns a reverse iterator to the beginning
Definition DataTypes.h:1969
T * data()
direct access to the underlying array
Definition DataTypes.h:2005
const_reference at(size_type i) const
access the specified element with bounds checking
Definition DataTypes.h:2003
std::vector< T >::const_reverse_iterator const_reverse_iterator
Definition DataTypes.h:1956
std::vector< T >::const_reference const_reference
Definition DataTypes.h:1946
reference operator[](size_type i)
access the specified element
Definition DataTypes.h:1997
const_iterator cend() const
returns an iterator to the end
Definition DataTypes.h:1977
const_reference operator[](size_type i) const
access the specified element
Definition DataTypes.h:1999
const_reverse_iterator const crend()
returns a reverse iterator to the end
Definition DataTypes.h:1981
const_reverse_iterator const crbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:1979
T value_type
Definition DataTypes.h:1938
iterator begin()
returns an iterator to the beginning
Definition DataTypes.h:1959
const_reference back() const
access the last element
Definition DataTypes.h:1995
std::vector< T > & GetStorageContainer()
Get the underlying storage container.
Definition DataTypes.h:2016
reverse_iterator rend()
returns a reverse iterator to the end
Definition DataTypes.h:1971
const_iterator cbegin() const
returns an iterator to the beginning
Definition DataTypes.h:1975
const_iterator end() const
returns an iterator to the end
Definition DataTypes.h:1965
std::vector< T >::reference reference
Definition DataTypes.h:1944
reference back()
access the last element
Definition DataTypes.h:1993
std::vector< T >::const_iterator const_iterator
Definition DataTypes.h:1952
const T * data() const
direct access to the underlying array
Definition DataTypes.h:2007
const_reference front() const
access the first element
Definition DataTypes.h:1991
std::vector< T >::size_type size_type
Definition DataTypes.h:1948
virtual size_type size() const
returns the number of elements
Definition DataTypes.h:1985
iterator end()
returns an iterator to the end
Definition DataTypes.h:1963
reference at(size_type i)
access the specified element with bounds checking
Definition DataTypes.h:2001
const_iterator begin() const
retuns an iterator to the beginning
Definition DataTypes.h:1961
reverse_iterator rbegin()
returns a reverse iterator to the beginning
Definition DataTypes.h:1967
bool empty() const
checks whether the container is empty
Definition DataTypes.h:1983
std::vector< T >::pointer pointer
Definition DataTypes.h:1940
std::vector< T >::reverse_iterator reverse_iterator
Definition DataTypes.h:1954
const_reverse_iterator rend() const
returns a reverse iterator to the end
Definition DataTypes.h:1973
std::vector< T >::const_pointer const_pointer
Definition DataTypes.h:1942
Base class for pod array value types.
Definition DataTypes.h:1897
Base class for pod multidimensional arrays.
Definition DataTypes.h:2044
Base class for user defined pod value types.
Definition DataTypes.h:1886
pod multidimensional array value type
Definition DataTypes.h:2071
virtual void AssignSubArray(const std::vector< uint32_t > &memorypos, const boost::intrusive_ptr< RRPodMultiDimArray< T > > &buffer, const std::vector< uint32_t > &bufferpos, const std::vector< uint32_t > &count)
Assign a subset of an array.
Definition DataTypes.h:2128
virtual void RetrieveSubArray(const std::vector< uint32_t > &memorypos, const boost::intrusive_ptr< RRPodMultiDimArray< T > > &buffer, const std::vector< uint32_t > &bufferpos, const std::vector< uint32_t > &count)
Retrieve a subset of an array.
Definition DataTypes.h:2097
Base class for user defined structure value types.
Definition DataTypes.h:1067
Represents. a point in time. Used by wire members to timestamp packets.
Definition DataTypes.h:2697
bool operator==(const TimeSpec &t2) const
equality comparison
int64_t seconds
Seconds since epoch.
Definition DataTypes.h:2700
bool operator<=(const TimeSpec &t2) const
less-than-or-equal comparison
TimeSpec operator-(const TimeSpec &t2) const
subtraction operator
void cleanup_nanosecs()
normalize nanoseconds to be within 0 and 1e9-1
bool operator>=(const TimeSpec &t2) const
greater-than-or-equal comparison
TimeSpec(int64_t seconds, int32_t nanoseconds)
Construct timespec with specified time.
bool operator!=(const TimeSpec &t2) const
inequality comparison
bool operator<(const TimeSpec &t2) const
less-then comparison
TimeSpec operator+(const TimeSpec &t2) const
addition operator
bool operator>(const TimeSpec &t2) const
greater-than comparison
int32_t nanoseconds
Nanoseconds from epoch. Normalized to be between 0 and 1e9-1.
Definition DataTypes.h:2702
TimeSpec()
Construct empty timespec.
Complex double precision floating point number.
Definition DataTypes.h:77
double real
real component
Definition DataTypes.h:79
cdouble(double r, double i)
Construct a new cdouble.
Definition DataTypes.h:90
cdouble()
Construct a new cdouble with 0.0 real and imag.
Definition DataTypes.h:83
double imag
imaginary component
Definition DataTypes.h:81
Complex single precision floating point number.
Definition DataTypes.h:99
cfloat()
Construct a new csingle with 0.0 real and imag.
Definition DataTypes.h:105
float real
real component
Definition DataTypes.h:101
float imag
imaginary component
Definition DataTypes.h:103
cfloat(float r, float i)
Construct a new cfloat.
Definition DataTypes.h:112
Logical boolean represented using 8 bits.
Definition DataTypes.h:122
rr_bool()
Construct a new false rr_bool.
Definition DataTypes.h:131
uint8_t value
The value of the boolean.
Definition DataTypes.h:128
rr_bool(uint8_t b)
Construct a new rr_bool object.
Definition DataTypes.h:137