5 #include <cxx/type_traits>
10 * Simple encapsulation for a dynamically allocated array.
12 * The main purppose of this class is to support C++11 range for
13 * for simple dynamically allocated array with static size.
15 template<typename T, typename IDX = unsigned>
19 template<typename X, typename IDX2> friend class static_vector;
25 typedef IDX index_type;
27 static_vector() = default;
28 static_vector(value_type *v, index_type length) : _v(v), _l(length) {}
30 /// Conversion from compatible arrays
32 typename = typename enable_if<is_convertible<X, T>::value>::type>
33 static_vector(static_vector<X, IDX> const &o) : _v(o._v), _l(o._l) {}
35 index_type size() const { return _l; }
36 bool empty() const { return _l == 0; }
38 value_type &operator [] (index_type idx) { return _v[idx]; }
39 value_type const &operator [] (index_type idx) const { return _v[idx]; }
41 value_type *begin() { return _v; }
42 value_type *end() { return _v + _l; }
43 value_type const *begin() const { return _v; }
44 value_type const *end() const { return _v + _l; }
45 value_type const *cbegin() const { return _v; }
46 value_type const *cend() const { return _v + _l; }
48 /// Get the index of the given element of the array
49 index_type index(value_type const *o) const { return o - _v; }
50 index_type index(value_type const &o) const { return &o - _v; }