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