aboutsummaryrefslogtreecommitdiff
path: root/Lib/java/std_array.i
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/java/std_array.i')
-rw-r--r--Lib/java/std_array.i20
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)