Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #ifndef ORO_CARRAY_HPP_
00040 #define ORO_CARRAY_HPP_
00041
00042 #include <boost/serialization/array.hpp>
00043 #include <boost/array.hpp>
00044
00045 namespace RTT
00046 {
00047 namespace types {
00048
00068 template<class T>
00069 class carray
00070 {
00071 public:
00072 typedef T value_type;
00073
00080 carray(value_type* t, std::size_t s) :
00081 m_t( s ? t : 0),
00082 m_element_count(s)
00083 {}
00084
00091 carray() : m_t(0), m_element_count(0) {}
00092
00099 carray( boost::serialization::array<T> const& orig)
00100 : m_t( orig.address() ), m_element_count( orig.count() ) {
00101 if (m_element_count == 0)
00102 m_t = 0;
00103 }
00104
00111 template<std::size_t N>
00112 carray( boost::array<T,N> & orig)
00113 : m_t( orig.c_array() ), m_element_count( N ) {
00114 if (m_element_count == 0)
00115 m_t = 0;
00116 }
00117
00121 void init(value_type* t, std::size_t s) {
00122 m_t = s ? t : 0;
00123 m_element_count = s;
00124 }
00125
00130 value_type* address() const
00131 {
00132 return m_t;
00133 }
00134
00138 std::size_t count() const
00139 {
00140 return m_element_count;
00141 }
00142
00149 template <class OtherT>
00150 const carray<T>& operator=( const carray<OtherT>& orig ) {
00151 if (&orig != this)
00152 for(std::size_t i = 0; i != orig.count() && i != count(); ++i)
00153 m_t[i] = orig.address()[i];
00154 return *this;
00155 }
00156
00164 template <class OtherT>
00165 const carray<T>& operator=( boost::serialization::array<OtherT> const& orig ) {
00166 if (orig.address() != m_t)
00167 for(std::size_t i = 0; i != orig.count() && i != count(); ++i)
00168 m_t[i] = orig.address()[i];
00169 return *this;
00170 }
00171
00179 template <class OtherT, std::size_t OtherN>
00180 const carray<T>& operator=( const boost::array<OtherT,OtherN>& orig ) {
00181 if (orig.data() != m_t)
00182 for(std::size_t i = 0; i != orig.size() && i != count(); ++i)
00183 m_t[i] = orig[i];
00184 return *this;
00185 }
00186
00187 private:
00188 value_type* m_t;
00189 std::size_t m_element_count;
00190 };
00191 }
00192 }
00193
00194 #endif