Make std::vector<> wrappers conform to List interface in Java

Derive the class wrapping std::vector<> in Java from java.util.AbstractList<>.
This makes it possible to use it with various algorithms working with Java
collections and, maybe even more importantly, makes it possible to iterate
over the wrapped vectors using for-each loops.

This commit is based on the original patch by Volker Diels-Grabsch from
https://sourceforge.net/p/swig/patches/278/
This commit is contained in:
Vadim Zeitlin 2016-11-28 22:38:38 +01:00
commit c79dd9d420
4 changed files with 126 additions and 7 deletions

View file

@ -19,6 +19,9 @@ public class li_std_vector_runme {
v1.add(123);
if (v1.get(0) != 123) throw new RuntimeException("v1 test failed");
for (int n : v1) {
if (n != 123) throw new RuntimeException("v1 loop test failed");
}
StructVector v4 = li_std_vector.vecstruct(new StructVector());
StructPtrVector v5 = li_std_vector.vecstructptr(new StructPtrVector());
@ -28,9 +31,18 @@ public class li_std_vector_runme {
v5.add(new Struct(34));
v6.add(new Struct(56));
Struct s = null;
if (v4.get(0).getNum() != 12) throw new RuntimeException("v4 test failed");
if (v5.get(0).getNum() != 34) throw new RuntimeException("v5 test failed");
if (v6.get(0).getNum() != 56) throw new RuntimeException("v6 test failed");
for (Struct s : v4) {
if (s.getNum() != 12) throw new RuntimeException("v4 loop test failed");
}
for (Struct s : v5) {
if (s.getNum() != 34) throw new RuntimeException("v5 loop test failed");
}
for (Struct s : v6) {
if (s.getNum() != 56) throw new RuntimeException("v6 loop test failed");
}
}
}