diff lib/swig/swigwin-2.0.11/Lib/std/std_carray.swg @ 1899:b3009adc0e2f

Adding swig, gitignore, hgignore
author Nomad
date Mon, 21 Oct 2013 10:42:27 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/swig/swigwin-2.0.11/Lib/std/std_carray.swg	Mon Oct 21 10:42:27 2013 +0200
@@ -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];
+  };
+}
+%}