From: William S F. <ws...@fu...> - 2009-06-05 23:08:02
|
prince0 wrote: > Hi, > > How can I request swig to declare local variables on the same line then > when necessary? > > I tried “–small” command line option but it doesn’t work like I expect. > > > > e.g. swig generates the following C++ wrapper: > > > > SWIGEXPORT void * SWIGSTDCALL CSharp_CBACnetDriver_GetCache(void * jarg1) { > > void * jresult ; > > CBACnetDriver *arg1 = (CBACnetDriver *) 0 ; > > CCache result; > > > > arg1 = (CBACnetDriver *)jarg1; > > result = (arg1)->GetCache(); > > jresult = new CCache((const CCache &)result); > > return jresult; > > } > > > > I would like it to generate the following code instead: > > > > SWIGEXPORT void * SWIGSTDCALL CSharp_CBACnetDriver_GetCache(void * jarg1) { > > CBACnetDriver * arg1 = (CBACnetDriver *)jarg1; > > CCache result = (arg1)->GetCache(); > > void * jresult = new CCache((const CCache &)result); > > return jresult; > > } > > > > This second code will go faster because the constructor of the CCache > class will be called only one. > > Moreover it would work better since I won’t have memory leaks. The fact > is the constructor of my class CCache allocates memory via the new > operator but does not have a copy constructor. > Read about the optimal attribute in the out typemap: http://www.swig.org/Doc1.3/Typemaps.html#Typemaps_optimal You might also want to look at the valuewrapper feature: http://www.swig.org/Doc1.3/SWIGPlus.html#SWIGPlus_nn19 William |