[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: SWIG and 0/1 based arrays
- From: Joey Mukherjee <joey@...>
- Date: Thu, 7 Aug 2008 09:41:39 -0500
On Aug 7, 2008, at 1:12 AM, Mark Gossage wrote:
I have recently had to go back to programming VB.Net and I have
been discovering that VB.Net is 0 based where VB6 was 1 based, its
a pain I agree.
VB? Ooo, sorry to hear that! :-)
I certainly need to add some extra documentation on this matter,
but here is my thoughts on the matter.
I wanted to keep wrappered vectors & wrappered C-arrays to follow
the same convertion that C does(0+), rather than convert to the Lua
convention (1+), as the underlying information is still C, not Lua.
However if you convert from C-arrays to Lua tables, it makes more
sense for them to be numbered as Lua(1+).
With my code, I have a lot of gets and sets which operate on arrays
(actually C++ vectors). I would like a way to say within my .i file:
"ok, everytime you (lua) access this array, subtract 1 from it before
you call the C routine". Basically, I want SWIG to generate these
arg2-1's for me.
That said, I can see why someone might want a more natural C way,
rather than Lua way, of accessing arrays.
Is there a way to make it an option in SWIG to do the -1's for me for
every array access, or do I have write %luacode's for all my
routines? That would not be pleasant! :-)
One more thing, is there a way to have SWIG/Lua do type-checking on
bound data? Here is what I am doing:
I have code that binds my C++ object to Lua which is as follows:
lua_pushlightuserdata ((lua_State *) _LState, const_cast <void
*> (ptr));
lua_setglobal ((lua_State *) _LState, name);
Within my SWIG .i file, I have:
%typemap (in, checkfn="lua_islightuserdata") BOXLIST_P
%{
$1 = ($type) lua_touserdata (L, $input);
%}
%typemap (in, checkfn="lua_islightuserdata") BOX_P
%{
$1 = ($type) lua_touserdata (L, $input);
%}
%apply BOXLIST_P {QList <BoxPlots *> *};
%apply BOX_P {BoxPlots *};
In theory, I can send BOX_P and BOXLIST_P to each others function and
cause my program to core. Is there a way I can check that the Lua
programmer sent the right type of variable to my wrapped function?
Thanks for all your hard work on the Lua module for SWIG! I really
enjoy having a nice alternative to C/C++ when messing with our data!
Cheers,
Joey