diff --git a/Examples/test-suite/li_std_vector_extra.i b/Examples/test-suite/li_std_vector_extra.i index 114de3f11..103242b24 100644 --- a/Examples/test-suite/li_std_vector_extra.i +++ b/Examples/test-suite/li_std_vector_extra.i @@ -129,6 +129,7 @@ std::vector vecStr(std::vector v) { double *makeDoublePtr(double v) { return new double(v); } int extractInt(int *p) { return *p; } short extractConstShort(const short *p) { return *p; } + short extractConstShort2(std::vector::value_type p) { return *p; } %} %template(pyvector) std::vector; diff --git a/Examples/test-suite/li_std_vector_ptr.i b/Examples/test-suite/li_std_vector_ptr.i index 8c3b71e65..dcf1128e0 100644 --- a/Examples/test-suite/li_std_vector_ptr.i +++ b/Examples/test-suite/li_std_vector_ptr.i @@ -15,6 +15,19 @@ using namespace std; int* makeIntPtr(int v) { return new int(v); } +std::vector::value_type makeIntPtr2(int v) { + return new int(v); +} +int getIntValue(int *p) { + return *p; +} +int getIntValue2(std::vector::const_reference p) { + return *p; +} +int getIntValue3(std::vector::reference p) { + return *p; +} + double* makeDoublePtr(double v) { return new double(v); } diff --git a/Examples/test-suite/python/li_std_vector_extra_runme.py b/Examples/test-suite/python/li_std_vector_extra_runme.py index d541de6db..88105ea85 100644 --- a/Examples/test-suite/python/li_std_vector_extra_runme.py +++ b/Examples/test-suite/python/li_std_vector_extra_runme.py @@ -173,3 +173,11 @@ if extractConstShort(vcs[0]) != 111: if extractConstShort(vcs[1]) != 222: raise RuntimeError + +for p in vcs[0:1]: + if extractConstShort2(p) != 111: + raise RuntimeError + +for p in vcs[1:2]: + if extractConstShort2(p) != 222: + raise RuntimeError diff --git a/Examples/test-suite/python/li_std_vector_ptr_runme.py b/Examples/test-suite/python/li_std_vector_ptr_runme.py index baa92cfee..875d1c9c9 100644 --- a/Examples/test-suite/python/li_std_vector_ptr_runme.py +++ b/Examples/test-suite/python/li_std_vector_ptr_runme.py @@ -4,12 +4,20 @@ def check(val1, val2): if val1 != val2: raise RuntimeError("Values are not the same %s %s" % (val1, val2)) ip1 = makeIntPtr(11) -ip2 = makeIntPtr(22) +ip2 = makeIntPtr2(22) vi = IntPtrVector((ip1, ip2)) check(getValueFromVector(vi, 0), 11) check(getValueFromVector(vi, 1), 22) +check(getIntValue(vi[0]), 11) +check(getIntValue(vi[1]), 22) +check(getIntValue2(vi[0]), 11) +check(getIntValue2(vi[1]), 22) + +ipp = makeIntPtrPtr(vi[0]) +check(getIntValue3(ipp), 11) # Note: getIntValue3 takes int** + vA = APtrVector([makeA(33), makeA(34)]) check(getVectorValueA(vA, 0), 33) diff --git a/Lib/csharp/std_vector.i b/Lib/csharp/std_vector.i index a69cb63ed..fa60a061d 100644 --- a/Lib/csharp/std_vector.i +++ b/Lib/csharp/std_vector.i @@ -201,8 +201,13 @@ public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef CTYPE value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef CONST_REFERENCE const_reference; + %rename(Clear) clear; void clear(); %rename(Add) push_back; diff --git a/Lib/d/std_vector.i b/Lib/d/std_vector.i index c67057180..cba3cd4a6 100644 --- a/Lib/d/std_vector.i +++ b/Lib/d/std_vector.i @@ -104,8 +104,13 @@ public void capacity(size_t value) { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef CTYPE value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef CONST_REFERENCE const_reference; + void clear(); void push_back(CTYPE const& x); size_type size() const; @@ -442,8 +447,13 @@ int opApply(int delegate(ref size_t index, ref $typemap(dtype, CTYPE) value) dg) public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef CTYPE value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef CONST_REFERENCE const_reference; + bool empty() const; void clear(); void push_back(CTYPE const& x); diff --git a/Lib/go/std_vector.i b/Lib/go/std_vector.i index 29bcd1391..708e5ee38 100644 --- a/Lib/go/std_vector.i +++ b/Lib/go/std_vector.i @@ -12,8 +12,13 @@ namespace std { template class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(); vector(size_type n); size_type size() const; @@ -46,8 +51,13 @@ namespace std { template<> class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef bool value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef bool const_reference; + vector(); vector(size_type n); size_type size() const; diff --git a/Lib/guile/std_vector.i b/Lib/guile/std_vector.i index c144f879c..4f7538317 100644 --- a/Lib/guile/std_vector.i +++ b/Lib/guile/std_vector.i @@ -187,6 +187,14 @@ namespace std { } } public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector& other); @@ -351,6 +359,14 @@ namespace std { } } public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector& other); diff --git a/Lib/java/std_vector.i b/Lib/java/std_vector.i index cb1752c69..6a66ec10a 100644 --- a/Lib/java/std_vector.i +++ b/Lib/java/std_vector.i @@ -23,7 +23,7 @@ SWIGINTERN jint SWIG_VectorSize(size_t size) { } } -%define SWIG_STD_VECTOR_MINIMUM_INTERNAL(CTYPE, CREF_TYPE) +%define SWIG_STD_VECTOR_MINIMUM_INTERNAL(CTYPE, CONST_REFERENCE) %typemap(javabase) std::vector< CTYPE > "java.util.AbstractList<$typemap(jboxtype, CTYPE)>" %typemap(javainterfaces) std::vector< CTYPE > "java.util.RandomAccess" %proxycode %{ @@ -79,10 +79,10 @@ SWIGINTERN jint SWIG_VectorSize(size_t size) { typedef size_t size_type; typedef ptrdiff_t difference_type; typedef CTYPE value_type; - typedef CTYPE &reference; - typedef CREF_TYPE const_reference; typedef CTYPE *pointer; typedef CTYPE const *const_pointer; + typedef CTYPE &reference; + typedef CONST_REFERENCE const_reference; vector(); vector(const vector &other); @@ -133,7 +133,7 @@ SWIGINTERN jint SWIG_VectorSize(size_t size) { } } - CREF_TYPE doGet(jint index) throw (std::out_of_range) { + CONST_REFERENCE doGet(jint index) throw (std::out_of_range) { jint size = static_cast(self->size()); if (index >= 0 && index < size) return (*self)[index]; diff --git a/Lib/javascript/jsc/std_vector.i b/Lib/javascript/jsc/std_vector.i index 971b426a1..34e21a821 100644 --- a/Lib/javascript/jsc/std_vector.i +++ b/Lib/javascript/jsc/std_vector.i @@ -14,8 +14,13 @@ namespace std { template class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(); vector(size_type n); size_type size() const; @@ -48,8 +53,14 @@ namespace std { template<> class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef bool value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef bool const_reference; + + vector(); vector(size_type n); size_type size() const; diff --git a/Lib/javascript/v8/std_vector.i b/Lib/javascript/v8/std_vector.i index 971b426a1..eef0f65ee 100644 --- a/Lib/javascript/v8/std_vector.i +++ b/Lib/javascript/v8/std_vector.i @@ -14,8 +14,13 @@ namespace std { template class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(); vector(size_type n); size_type size() const; @@ -48,8 +53,13 @@ namespace std { template<> class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef bool value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef bool const_reference; + vector(); vector(size_type n); size_type size() const; diff --git a/Lib/lua/std_vector.i b/Lib/lua/std_vector.i index 3199a9dab..695862d66 100644 --- a/Lib/lua/std_vector.i +++ b/Lib/lua/std_vector.i @@ -25,6 +25,14 @@ namespace std { template class vector { public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(); vector(unsigned int); vector(const vector& other); diff --git a/Lib/mzscheme/std_vector.i b/Lib/mzscheme/std_vector.i index 9fa2d5497..012c32d32 100644 --- a/Lib/mzscheme/std_vector.i +++ b/Lib/mzscheme/std_vector.i @@ -189,6 +189,14 @@ namespace std { } } public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector& other); @@ -365,6 +373,14 @@ namespace std { } } public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector& other); diff --git a/Lib/ocaml/std_vector.i b/Lib/ocaml/std_vector.i index 053b645f0..f15b26c66 100644 --- a/Lib/ocaml/std_vector.i +++ b/Lib/ocaml/std_vector.i @@ -41,6 +41,14 @@ namespace std { template class vector { public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector& other); diff --git a/Lib/perl5/std_vector.i b/Lib/perl5/std_vector.i index adfe95df6..a0c26192e 100644 --- a/Lib/perl5/std_vector.i +++ b/Lib/perl5/std_vector.i @@ -181,8 +181,13 @@ namespace std { } public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector& other); @@ -353,8 +358,13 @@ namespace std { } public: typedef size_t size_type; - typedef T value_type; + typedef ptrdiff_t difference_type; + typedef T* value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, T *value); vector(const vector& other); @@ -524,8 +534,13 @@ namespace std { } public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, T value); vector(const vector& other); diff --git a/Lib/php/std_vector.i b/Lib/php/std_vector.i index 9cc1486ef..fe2b8d07d 100644 --- a/Lib/php/std_vector.i +++ b/Lib/php/std_vector.i @@ -14,8 +14,13 @@ namespace std { template class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef const value_type& const_reference; + vector(); vector(size_type n); size_type size() const; @@ -56,8 +61,13 @@ namespace std { template<> class vector { public: typedef size_t size_type; + typedef ptrdiff_t difference_type; typedef bool value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; typedef bool const_reference; + vector(); vector(size_type n); size_type size() const; diff --git a/Lib/std/std_vector.i b/Lib/std/std_vector.i index fae759a36..b35f03bea 100644 --- a/Lib/std/std_vector.i +++ b/Lib/std/std_vector.i @@ -64,8 +64,8 @@ namespace std { typedef _Tp value_type; typedef value_type* pointer; typedef const value_type* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; + typedef value_type& reference; + typedef const value_type& const_reference; typedef _Alloc allocator_type; %traits_swigtype(_Tp); @@ -101,13 +101,13 @@ namespace std { template class vector< _Tp*, _Alloc > { public: - typedef size_t size_type; + typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp* value_type; typedef value_type* pointer; typedef const value_type* const_pointer; - typedef value_type reference; - typedef value_type const_reference; + typedef value_type& reference; + typedef const value_type& const_reference; typedef _Alloc allocator_type; %traits_swigtype(_Tp); @@ -141,13 +141,13 @@ namespace std { template class vector< _Tp const *, _Alloc > { public: - typedef size_t size_type; + typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp const * value_type; typedef value_type* pointer; typedef const value_type* const_pointer; - typedef value_type reference; - typedef value_type const_reference; + typedef value_type& reference; + typedef const value_type& const_reference; typedef _Alloc allocator_type; %traits_swigtype(_Tp); @@ -182,13 +182,13 @@ namespace std { template class vector { public: - typedef size_t size_type; + typedef size_t size_type; typedef ptrdiff_t difference_type; typedef bool value_type; typedef value_type* pointer; typedef const value_type* const_pointer; - typedef value_type reference; - typedef value_type const_reference; + typedef value_type& reference; + typedef bool const_reference; typedef _Alloc allocator_type; %traits_swigtype(bool); diff --git a/Lib/tcl/std_vector.i b/Lib/tcl/std_vector.i index 71913f389..bb227cf3d 100644 --- a/Lib/tcl/std_vector.i +++ b/Lib/tcl/std_vector.i @@ -208,6 +208,14 @@ namespace std { } public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector< T >& other); @@ -359,6 +367,14 @@ namespace std { } public: + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T value_type; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type& reference; + typedef const value_type& const_reference; + vector(unsigned int size = 0); vector(unsigned int size, const T& value); vector(const vector< T >& other);