diff options
Diffstat (limited to 'Lib/java/std_array.i')
-rw-r--r-- | Lib/java/std_array.i | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/Lib/java/std_array.i b/Lib/java/std_array.i index d3436cc66..b5012dee0 100644 --- a/Lib/java/std_array.i +++ b/Lib/java/std_array.i @@ -4,6 +4,19 @@ %include <std_common.i> +%fragment("SWIG_ArraySize", "header", fragment="SWIG_JavaIntFromSize_t") { + SWIGINTERN jint SWIG_ArraySize(size_t size) { + jint sz = SWIG_JavaIntFromSize_t(size); + if (sz == -1) { + throw std::out_of_range("array size is too large to fit into a Java int"); + } + + return sz; + } +} + +%javamethodmodifiers std::array::sizeImpl "private"; + namespace std { template<class T, size_t N> class array { @@ -19,11 +32,16 @@ namespace std { array(); array(const array& other); - size_type size() const; %rename(isEmpty) empty; bool empty() const; void fill(const T& u); %extend { + %fragment("SWIG_ArraySize"); + + jint size() const throw (std::out_of_range) { + return SWIG_ArraySize(self->size()); + } + const_reference get(int i) throw (std::out_of_range) { int size = int(self->size()); if (i>=0 && i<size) |