John Labenski wrote:
On Sat, Oct 25, 2008 at 1:05 PM, klaas.holwerda <[EMAIL PROTECTED]> wrote:
Hi John,
%operator a2dCanvasObjectListIter& operator--(int)
If you change it to generate this, down here, it will work:
*returns = ((*self).operator++(arg1));
I don't think that post-incrementing makes much sense for Lua.
I would be very happy if you could still change it to become like the above,
since else i can't get it compiled for STL lists. Its iterator does not accept
the pre-incr only, or the other way around.
I try to explain how i do it now, and it works, if i do the needed modification
to the generated C++ wrapping, in order to fit the STL operators, which i can
not change.
First i already have a subclassed list based on STL and smart pointers.
The members lbegin and lend i had to add to satisfy lua, it does not like
function called end(). All the rest of the STL list functions and iterator
functions, i do add in lua.
class A2DCANVASDLLEXP a2dCanvasObjectList: public
a2dSmrtPtrList<a2dCanvasObject>
{
public:
a2dCanvasObjectList();
~a2dCanvasObjectList();
iterator lbegin();
iterator lend();
.... all other members ...
}
Next i make a typedef for this list its iterator in order to have a non template
iterator for wxLua. Understand that i do not subclass the iterator, and that
this would make the trick impossible. The iterator above is a fixed subclass of
the STL template list class, and i can not modify it or use another subclass of
this iterator. That is why i need to use the operators of the base STL iterator,
and i need to use them from wxLua directly also, or at least the code generated
in C++ by the wrapper, must fit the STL iterator class directly.
typedef a2dCanvasObjectList::iterator a2dCanvasObjectListIter;
Now this is how the list is wrapped, notice the extra functions, which are not
part of a2dCanvasObjectList directly, only of the lowest STL list base class.
%include "canvas/include/objlist.h"
%class %noclassinfo a2dCanvasObjectList, a2dSmrtPtrList
a2dCanvasObjectList()
a2dCanvasObjectListIter lbegin()
a2dCanvasObjectListIter lend()
bool empty()
size_t size()
a2dCanvasObject* front()
a2dCanvasObject* back()
void push_front( a2dCanvasObject* obj )
void pop_front()
void push_back( a2dCanvasObject* obj )
void pop_back()
%operator a2dCanvasObjectList& operator=( const a2dCanvasObjectList& other )
// REST here
%endclass
And now the wrapping code for the iterator. In principle i just add all function
of STL list it's iterator. But first only the operator ones, because the are the
key factor to succeed.
%class %encapsulate %noclassinfo a2dCanvasObjectListIter
a2dCanvasObjectListIter()
%operator a2dCanvasObjectPtr operator*() const
%operator a2dCanvasObjectListIter& operator=(const
a2dCanvasObjectListIter& other)
%operator bool operator ==( const a2dCanvasObjectListIter& iter ) const
%operator bool operator !=( const a2dCanvasObjectListIter& iter ) const
%operator a2dCanvasObjectListIter& operator++()
%operator a2dCanvasObjectListIter& operator++( int )
%operator a2dCanvasObjectListIter& operator--()
%operator a2dCanvasObjectListIter& operator--(int)
%endclass
And at last a working wxLua script with the above.
iter3 = childs:lbegin()
iter4 = childs:lend()
if iter3:op_eq(iter4) then
cmdh:Message("list is empty"..tostring(iter3)..tostring(iter4) )
else
cmdh:Message("list has "..childs:size().." elements" )
end
nameOfobj = ""
iter3 = childs:lbegin()
for i=1,childs:size() do
obj = iter3:op_mul()
nameOfobj = nameOfobj.."\n"..obj:Get():GetName()
iter3:op_inc()
end
cmdh:Message("names are:\n"..nameOfobj)
The only thing i do not like in this script is the name op_mul() to get a
reference to the object in the list. A name like op_deref() would be much better.
If we can get the operators to work (generate working code) for STL, in think
that it is a nice way to use STL lists in lua. And the effort is very reasonable.
But i need you to make it happen, because i can't make bananas of genwxbind.lua
:-)
Thanks,
Klaas
--
Unclassified
------------------------------------------------------------------------------------------------------------
Disclaimer:
If you are not the intended recipient of this email, please notify the sender and delete it.
Any unauthorized copying, disclosure or distribution of this email or its attachment(s) is forbidden.
Thales Nederland BV will not accept liability for any damage caused by this email or its attachment(s).
Thales Nederland BV is seated in Hengelo and is registered at the Chamber of Commerce under number 06061578.
------------------------------------------------------------------------------------------------------------
begin:vcard
fn:Klaas Holwerda
n:Holwerda;Klaas
note:Unclassified
version:2.1
end:vcard
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
wxlua-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wxlua-users