From: William S F. <ws...@fu...> - 2011-01-10 07:56:35
|
On 04/01/11 16:19, Volker Grabsch wrote: > William S Fulton schrieb: >>> >>> I improved the Java wrapper for std::vector to provide a >>> more "native feeling". [...] >> >> Looks like you need to use the approaches taken in the >> csharp/std_vector.i implementation. Note the template specialization and >> the SWIG_STD_VECTOR_ENHANCED macro used for the primitive types. Also >> note the $typemap(cstype, CTYPE) special variable macro... you'd need >> $typemap(jstype, CTYPE) for Java. > > Thanks for your advice! I had a look at csharp/std_vector.i > and simplified my implementation accordingly. > > Note that I can't always use "$typemap(jstype, CTYPE)" because > this only returns a primitive type (like "int"), where in some > places I need the wrapper class (like "Integer"). So I added > a new typemap for that purpose: > > $typemap(jclasstype, CTYPE) > > I hope the name "jclasstype" is okay, otherwise feel free to > rename it. :-) > > Using that new "jclasstype" typemap I was able to simplify > my java/std_vector implementation, and to make it look more > similar to csharp/std_vector. > > I also added another typemap: > > (char *STRING, size_t LENGTH) > > That handy typemap is available for almost all languages, but > it was missing for Java. > > It would be great if you could review my patch and include > it in SWIG. The introduction of a new typemap requires good justification for something that is lacking in the code generation. Here you have used a typemap where you could just use a macro instead. I suggest you use the approach used in arrays_java.i and change your macro to take an additional parameter like this: %define·SWIG_STD_VECTOR_ENHANCED(CTYPE, JAVATYPE) and use it like this: SWIG_STD_VECTOR_ENHANCED(bool, Boolean) I think the char *STRING, size_t LENGTH typemaps belong in java.swg as they look to be globally available in the other languages. William |