12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- %{
- #include <algorithm>
- %}
- //
- // std::carray - is really an extension to the 'std' namespace.
- //
- // A simple fix C array wrapper, more or less as presented in
- //
- // "The C++ Standarf Library", by Nicolai M. Josuttis
- //
- // which is also derived from the example in
- //
- // "The C++ Programming Language", by Bjarne Stroustup.
- //
- %inline %{
- namespace std {
- template <class _Type, size_t _Size>
- class carray
- {
- public:
- typedef _Type value_type;
- typedef size_t size_type;
-
- typedef _Type * iterator;
- typedef const _Type * const_iterator;
-
- carray() { }
-
- carray(const carray& c) {
- std::copy(c.v, c.v + size(), v);
- }
-
- template <class _Iterator>
- carray(_Iterator first, _Iterator last) {
- assign(first, last);
- }
- iterator begin() { return v; }
- iterator end() { return v + _Size; }
- const_iterator begin() const { return v; }
- const_iterator end() const { return v + _Size; }
-
- _Type& operator[](size_t i) { return v[i]; }
- const _Type& operator[](size_t i) const { return v[i]; }
- static size_t size() { return _Size; }
- template <class _Iterator>
- void assign(_Iterator first, _Iterator last) {
- if (std::distance(first,last) == size()) {
- std::copy(first, last, v);
- } else {
- throw std::length_error("bad range length");
- }
- }
-
- private:
- _Type v[_Size];
- };
- }
- %}
|