diff options
author | Vince Harron <vharron@google.com> | 2015-06-02 18:58:48 -0700 |
---|---|---|
committer | Vince Harron <vharron@google.com> | 2015-06-02 18:58:48 -0700 |
commit | b46a6ee1ee38582dd3af57ebe1b6d5e4158c34e0 (patch) | |
tree | b342a62eea47f607a7c0846c731bf151c1503359 /share/swig/2.0.11/std/std_carray.swg | |
parent | 6c85ed3bdac5c6dd65ad8cef83fc4fc7ef99a6c9 (diff) | |
download | linux-x86-studio-1.4-dev.tar.gz |
Adding binaries for 2.0.11HEADstudio-master-dev_before_27917934studio-master-dev_before_26911779studio-3.1.2studio-2.3studio-2.0-rc1studio-2.0studio-1.5studio-1.4gradle_3.1.2gradle_2.3.0gradle_2.0.0studio-master-releasestudio-1.4-releasestudio-1.4-devstudio-1.3-releasestudio-1.3-devmastermain
Diffstat (limited to 'share/swig/2.0.11/std/std_carray.swg')
-rw-r--r-- | share/swig/2.0.11/std/std_carray.swg | 64 |
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]; + }; +} +%} |