%{ #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]; }; } %}