Java std::vector tweaks

- Replace javacode typemap with %proxycode to make this typemap available to users
- Make doSize private.
This commit is contained in:
William S Fulton 2017-05-26 21:48:40 +01:00
commit b51f32a915

View file

@ -33,7 +33,7 @@ int size_as_int(std::size_t sz) {
%define SWIG_STD_VECTOR_MINIMUM_INTERNAL(CTYPE, CREF_TYPE) %define SWIG_STD_VECTOR_MINIMUM_INTERNAL(CTYPE, CREF_TYPE)
%typemap(javabase) std::vector< CTYPE > "java.util.AbstractList<$typemap(jboxtype, CTYPE)>" %typemap(javabase) std::vector< CTYPE > "java.util.AbstractList<$typemap(jboxtype, CTYPE)>"
%typemap(javainterfaces) std::vector< CTYPE > "java.util.RandomAccess" %typemap(javainterfaces) std::vector< CTYPE > "java.util.RandomAccess"
%typemap(javacode) std::vector< CTYPE > %{ %proxycode %{
public $javaclassname($typemap(jstype, CTYPE)[] initialElements) { public $javaclassname($typemap(jstype, CTYPE)[] initialElements) {
this(); this();
for ($typemap(jstype, CTYPE) element : initialElements) { for ($typemap(jstype, CTYPE) element : initialElements) {
@ -110,6 +110,7 @@ int size_as_int(std::size_t sz) {
throw std::out_of_range("vector index out of range"); throw std::out_of_range("vector index out of range");
} }
} }
value_type doRemove(int index) throw (std::out_of_range) { value_type doRemove(int index) throw (std::out_of_range) {
const int size = size_as_int(self->size()); const int size = size_as_int(self->size());
if (0 <= index && index < size) { if (0 <= index && index < size) {
@ -120,6 +121,7 @@ int size_as_int(std::size_t sz) {
throw std::out_of_range("vector index out of range"); throw std::out_of_range("vector index out of range");
} }
} }
CREF_TYPE doGet(int i) throw (std::out_of_range) { CREF_TYPE doGet(int i) throw (std::out_of_range) {
const int size = size_as_int(self->size()); const int size = size_as_int(self->size());
if (i>=0 && i<size) if (i>=0 && i<size)
@ -127,6 +129,7 @@ int size_as_int(std::size_t sz) {
else else
throw std::out_of_range("vector index out of range"); throw std::out_of_range("vector index out of range");
} }
value_type doSet(int i, const value_type& val) throw (std::out_of_range) { value_type doSet(int i, const value_type& val) throw (std::out_of_range) {
const int size = size_as_int(self->size()); const int size = size_as_int(self->size());
if (i>=0 && i<size) { if (i>=0 && i<size) {
@ -137,6 +140,7 @@ int size_as_int(std::size_t sz) {
else else
throw std::out_of_range("vector index out of range"); throw std::out_of_range("vector index out of range");
} }
void doRemoveRange(int fromIndex, int toIndex) throw (std::out_of_range) { void doRemoveRange(int fromIndex, int toIndex) throw (std::out_of_range) {
const int size = size_as_int(self->size()); const int size = size_as_int(self->size());
if (0 <= fromIndex && fromIndex <= toIndex && toIndex <= size) { if (0 <= fromIndex && fromIndex <= toIndex && toIndex <= size) {
@ -148,6 +152,7 @@ int size_as_int(std::size_t sz) {
} }
%enddef %enddef
%javamethodmodifiers std::vector::doSize "private";
%javamethodmodifiers std::vector::doAdd "private"; %javamethodmodifiers std::vector::doAdd "private";
%javamethodmodifiers std::vector::doGet "private"; %javamethodmodifiers std::vector::doGet "private";
%javamethodmodifiers std::vector::doSet "private"; %javamethodmodifiers std::vector::doSet "private";