move iterator classes to pyiterator and add/test std_carray.i class
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8010 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
c873fc6207
commit
984ecc3d4f
7 changed files with 529 additions and 333 deletions
64
Lib/std/std_carray.swg
Normal file
64
Lib/std/std_carray.swg
Normal file
|
|
@ -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];
|
||||
};
|
||||
}
|
||||
%}
|
||||
Loading…
Add table
Add a link
Reference in a new issue