10 #define _MRPT_CArray_H 54 template <
typename T, std::
size_t N>
72 inline iterator
end() {
return elems+N; }
73 inline const_iterator
end()
const {
return elems+N; }
76 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) 79 #elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310) 92 const_reverse_iterator
rbegin()
const {
96 const_reverse_iterator
rend()
const {
101 inline reference
operator[](size_type i) {
return elems[i]; }
102 inline const_reference
operator[](size_type i)
const {
return elems[i]; }
106 const_reference
at(size_type i)
const {
rangecheck(i);
return elems[i]; }
109 reference
front() {
return elems[0]; }
110 const_reference
front()
const {
return elems[0]; }
111 reference
back() {
return elems[N-1]; }
112 const_reference
back()
const {
return elems[N-1]; }
115 static inline size_type
size() {
return N; }
116 static bool empty() {
return false; }
121 inline void resize(
const size_t nElements) {
123 throw std::logic_error(
format(
"Try to change the size of a %u-CArray to %u.",static_cast<unsigned>(N),static_cast<unsigned>(nElements)));
138 template <
typename T2>
147 for (
size_t i=0;i<N;i++) elems[i]=value;
150 void assign (
const size_t n,
const T& value)
153 if (N!=n)
throw std::out_of_range(
"CArray<>: assign() of incorrect length");
155 for (
size_t i=0;i<N;i++) elems[i]=value;
159 template<
typename I>
void assign(I b,
const I &e) {
161 if (
std::distance(b,e)!=N)
throw std::out_of_range(
"CArray<>: assign() of incorrect length");
163 for (iterator i=
begin();i<
end();++i) *i=*(b++);
170 throw std::out_of_range(
"CArray<>: index out of range");
177 template <
typename T>
193 iterator
begin() {
return reinterpret_cast< iterator
>( &c ); }
194 const_iterator
begin()
const {
return reinterpret_cast< const_iterator
>( &c ); }
195 iterator
end() {
return reinterpret_cast< iterator
>( &c ); }
196 const_iterator
end()
const {
return reinterpret_cast< const_iterator
>( &c ); }
199 #if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) 202 #elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310) 219 const_reverse_iterator
rend()
const {
224 reference
at(size_type i) {
226 throw std::out_of_range(
"CArray<0>: index out of range");
228 const_reference
at(size_type i)
const {
230 throw std::out_of_range(
"<0>: index out of range");
234 static size_type
size() {
return 0; }
235 static bool empty() {
return true; }
246 const T*
data()
const {
return NULL; }
250 template <
typename T2 >
259 inline reference
operator[](size_type ) { makes_no_sense();
static T dumm=0;
return dumm; }
260 inline const_reference
operator[](size_type )
const { makes_no_sense();
static T dumm=0;
return dumm; }
263 reference
front() { makes_no_sense(); }
264 const_reference
front()
const { makes_no_sense(); }
265 reference
back() { makes_no_sense(); }
266 const_reference
back()
const { makes_no_sense(); }
273 throw std::out_of_range(
"CArray<0>: index out of range");
278 template<
class T, std::
size_t N>
282 template<
class T, std::
size_t N>
284 return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
286 template<
class T, std::
size_t N>
290 template<
class T, std::
size_t N>
294 template<
class T, std::
size_t N>
298 template<
class T, std::
size_t N>
315 inline operator size_t(
void)
const {
return 2; }
bool operator!=(const CArray< T, N > &x, const CArray< T, N > &y)
const_reference back() const
const_reference operator[](size_type i) const
const_reference at(size_type i) const
std::reverse_iterator< const_iterator > const_reverse_iterator
std::ptrdiff_t difference_type
std::reverse_iterator< iterator > reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
std::string BASE_IMPEXP format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
Auxiliary class used in CMatrixTemplate:size(), CMatrixTemplate::resize(), CMatrixFixedNumeric::size(...
bool operator!=(const CMatrixTemplateSize &o) const
static void makes_no_sense()
bool operator>(const CArray< T, N > &x, const CArray< T, N > &y)
void swap(CArray< T, N > &y)
bool operator>=(const CArray< T, N > &x, const CArray< T, N > &y)
void swap(CArray< T, 0 > &y)
const T & const_reference
void assign(const size_t n, const T &value)
reference at(size_type i)
const_iterator end() const
static size_type max_size()
const_reference operator[](size_type) const
reverse_iterator rbegin()
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
reference at(size_type i)
const_reference front() const
std::ptrdiff_t difference_type
bool operator==(const CArray< T, N > &x, const CArray< T, N > &y)
const_reference at(size_type i) const
static size_type max_size()
void assign(I b, const I &e)
const_reference back() const
CMatrixTemplateSize mrpt_autotype
const_reference front() const
reference operator[](size_type)
const_iterator end() const
void assign(const T &value)
const_iterator begin() const
std::reverse_iterator< const_iterator > const_reverse_iterator
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
CArray< T, N > & operator=(const CArray< T2, N > &rhs)
A STL container (as wrapper) for arrays of constant size defined at compile time - Users will most li...
const_reverse_iterator rend() const
reference operator[](size_type i)
void resize(const size_t nElements)
This method has no effects in this class, but raises an exception if the expected size does not match...
const_reverse_iterator rend() const
const_reverse_iterator rbegin() const
reverse_iterator rbegin()
const_iterator begin() const
bool operator==(const CMatrixTemplateSize &o) const
static void rangecheck(size_type i)
CMatrixTemplateSize(const size_t *d)
const_reverse_iterator rbegin() const
const T & const_reference
double BASE_IMPEXP distance(const TPoint2D &p1, const TPoint2D &p2)
Gets the distance between two points in a 2D space.