From: Riccardo M. <ric...@ic...> - 2006-01-19 11:27:10
|
[William S Fulton, Mon, Jan 09, 2006 at 09:18:15PM +0000] > Riccardo Murri wrote: > >Hello, > > > >I tried the following simple interface code:: > > > > %module x > > > > %include "std_vector.i" > > %template(intVector) std::vector<int>; > > > > int foo(const std::vector<int> &bar); > > > >with swig-1.3.21, this creates a Java "intVector" class which mirrors > >the C++ vector, and a Java wrapper "foo(intVector)". > > > >Is it possible to have SWIG generate a "foo(int[])" instead? > > > >Unfortunately, I'm stuck with 1.3.21 but I can use .swg or .i files > >from later versions, if necessary. > > > This is quite possible even with 1.3.21. You'd need to take one of the > set of typemaps in arrays_java.i and modify slightly (might be easier to > understand this file by running this file through the preprocessor using > swig -E). You wouldn't need to change a lot, just create a vector and > use push_back instead of creating the C array. You might need to add in > %template as well: > > %template() std::vector<int>; > Thank you very much: I've done exactly as you suggested, and I was able to pass std::vector by value to and from Java arrays. I attach the modified arrays_java.i and the very minimal example code I've used to test the functionality, in case someone else on the ML has the same needs. I've tried the code on Debian sarge (swig 1.3.24, gcc 3.3.5) and Scientific Linux CERN 3.0.6 (swig 1.3.21, gcc 3.2.3). Riccardo -- Riccardo Murri EGRID Project The Abdus Salam ICTP Strada Costiera, 11 34016 Trieste Italy email: ric...@ic... phone: +39 040-2240-542 fax: +39 040-224531 |