summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/std/std_carray.swg
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/std/std_carray.swg')
-rw-r--r--share/swig/2.0.11/std/std_carray.swg64
1 files changed, 64 insertions, 0 deletions
diff --git a/share/swig/2.0.11/std/std_carray.swg b/share/swig/2.0.11/std/std_carray.swg
new file mode 100644
index 0000000..ebb20ce
--- /dev/null
+++ b/share/swig/2.0.11/std/std_carray.swg
@@ -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];
+ };
+}
+%}