| Index: swig/Lib/std/std_carray.swg
|
| ===================================================================
|
| --- swig/Lib/std/std_carray.swg (revision 0)
|
| +++ swig/Lib/std/std_carray.swg (revision 0)
|
| @@ -0,0 +1,64 @@
|
| +%{
|
| +#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];
|
| + };
|
| +}
|
| +%}
|
|
|