OLD | NEW |
(Empty) | |
| 1 %{ |
| 2 #include <algorithm> |
| 3 %} |
| 4 |
| 5 // |
| 6 // std::carray - is really an extension to the 'std' namespace. |
| 7 // |
| 8 // A simple fix C array wrapper, more or less as presented in |
| 9 // |
| 10 // "The C++ Standarf Library", by Nicolai M. Josuttis |
| 11 // |
| 12 // which is also derived from the example in |
| 13 // |
| 14 // "The C++ Programming Language", by Bjarne Stroustup. |
| 15 // |
| 16 |
| 17 %inline %{ |
| 18 namespace std { |
| 19 template <class _Type, size_t _Size> |
| 20 class carray |
| 21 { |
| 22 public: |
| 23 typedef _Type value_type; |
| 24 typedef size_t size_type; |
| 25 |
| 26 typedef _Type * iterator; |
| 27 typedef const _Type * const_iterator; |
| 28 |
| 29 carray() { } |
| 30 |
| 31 carray(const carray& c) { |
| 32 std::copy(c.v, c.v + size(), v); |
| 33 } |
| 34 |
| 35 template <class _Iterator> |
| 36 carray(_Iterator first, _Iterator last) { |
| 37 assign(first, last); |
| 38 } |
| 39 |
| 40 iterator begin() { return v; } |
| 41 iterator end() { return v + _Size; } |
| 42 |
| 43 const_iterator begin() const { return v; } |
| 44 const_iterator end() const { return v + _Size; } |
| 45 |
| 46 _Type& operator[](size_t i) { return v[i]; } |
| 47 const _Type& operator[](size_t i) const { return v[i]; } |
| 48 |
| 49 static size_t size() { return _Size; } |
| 50 |
| 51 template <class _Iterator> |
| 52 void assign(_Iterator first, _Iterator last) { |
| 53 if (std::distance(first,last) == size()) { |
| 54 std::copy(first, last, v); |
| 55 } else { |
| 56 throw std::length_error("bad range length"); |
| 57 } |
| 58 } |
| 59 |
| 60 private: |
| 61 _Type v[_Size]; |
| 62 }; |
| 63 } |
| 64 %} |
OLD | NEW |