From: Jesper E. <je...@es...> - 2007-02-26 12:07:37
|
Hi! I've got a C++ method which returns an object, like this: class Bar { Foo GetFoo(); } The Foo class has a operator defined like this: operator const void *(); to allow users to write Foo foo = GetFoo(); if (foo) { ... } to check for the "validity" of foo. In Java, the corresponding solution would have GetFoo() return null whenever foo isn't valid. So, my question is simply: how to I make the wrapped version of GetFoo() return null instead of foo? I suppose I want to inject a "if (foo) return true; else return false;" in the wrapper for GetFoo(), but how do I do that? -- /Jesper |
From: pzack <the...@ho...> - 2007-02-26 21:02:27
|
%typemap(javaout) will let you modify the java generated code. -use the variable $jnicall to make the call to the JNI code. %typemap(jstype) will let you change the return type of the java method (if you want to return a boolean here) Jesper Eskilson wrote: > > Hi! > > I've got a C++ method which returns an object, like this: > > class Bar { > > Foo GetFoo(); > > } > > The Foo class has a operator defined like this: > > operator const void *(); > > to allow users to write > > Foo foo = GetFoo(); > if (foo) { ... } > > to check for the "validity" of foo. In Java, the corresponding > solution would have GetFoo() return null whenever foo isn't valid. > > So, my question is simply: how to I make the wrapped version of > GetFoo() return null instead of foo? I suppose I want to inject a "if > (foo) return true; else return false;" in the wrapper for GetFoo(), > but how do I do that? > > -- > /Jesper > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user > > -- View this message in context: http://www.nabble.com/need-help-with-typemaps-%28Java--C%2B%2B%29-tf3292451.html#a9169084 Sent from the swig-user mailing list archive at Nabble.com. |
From: William S F. <ws...@fu...> - 2007-02-27 23:10:50
|
You could modify your c++ interface to be more accurate for the intended usage by using an operator bool() instead as then the default mapping works exactly as you want in Java (and C++ of course). Alternatively you can use %extend to add in a method to check the validity: %extend Foo { bool isValid() { return *$self ? true : false; } } and just %ignore the original operator void*. If this design pattern occurs over and over again, it would be worth putting the effort into writing the typemaps instead though. William pzack wrote: > %typemap(javaout) will let you modify the java generated code. > -use the variable $jnicall to make the call to the JNI code. > > > %typemap(jstype) will let you change the return type of the java method (if > you want to return a boolean here) > > > > > > > Jesper Eskilson wrote: >> Hi! >> >> I've got a C++ method which returns an object, like this: >> >> class Bar { >> >> Foo GetFoo(); >> >> } >> >> The Foo class has a operator defined like this: >> >> operator const void *(); >> >> to allow users to write >> >> Foo foo = GetFoo(); >> if (foo) { ... } >> >> to check for the "validity" of foo. In Java, the corresponding >> solution would have GetFoo() return null whenever foo isn't valid. >> >> So, my question is simply: how to I make the wrapped version of >> GetFoo() return null instead of foo? I suppose I want to inject a "if >> (foo) return true; else return false;" in the wrapper for GetFoo(), >> but how do I do that? >> >> -- >> /Jesper >> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share >> your >> opinions on IT & business topics through brief surveys-and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Swig-user mailing list >> Swi...@li... >> https://lists.sourceforge.net/lists/listinfo/swig-user >> >> > |
From: Jesper E. <je...@es...> - 2007-03-05 10:23:01
|
2007/2/28, William S Fulton <ws...@fu...>: > You could modify your c++ interface to be more accurate for the intended > usage by using an operator bool() instead as then the default mapping > works exactly as you want in Java (and C++ of course). Alternatively you > can use %extend to add in a method to check the validity: > > %extend Foo { > bool isValid() { return *$self ? true : false; } > } > > and just %ignore the original operator void*. > > If this design pattern occurs over and over again, it would be worth > putting the effort into writing the typemaps instead though. Ok, thanks for the advice. -- /Jesper |