Re: patch for direct access to STL containers from lua

Wolfmanfx <[email protected]>
Newsgroups gmane.comp.lang.lua.bind.user
Message-ID <[email protected]>
Is it possible to iterate through maps and vectors?
Can you make an example where you iterate/insert/delete items from
map/vector?
Also do we always need to pass map/vector instances as pointer? Is it
possible to copy the content into a lua table (there is something here like
copy:table)?

Christophe Juniet wrote:
> 
> Hi Thomas and thanks for your time!
> 
>> Off the top of my head from your points:
>> - Speed wise, vector and map should be fine, std::lists however are more
>> problematic.
> 
> True. I chose to use lists where I needed to be able to remove many
> elements.
> Otherwise, I used mostly vector and map so it should be OK.
> 
>> - Removing an element by assigning nil.  I'll have to refresh my memory
>> but
>> I'm not sure that is possible. I would recommend that you use shared
>> pointers in your container to simulate this (and check for null on the
>> C++
>> side).
> 
> Actually, I modified stl_container__newindex to call
> container->erase(key) when value in nil.
> Of course, the element is lost here and in the case of a pointer type,
> you won't be able to delete it on the C++ side unless it's a smart
> pointer or you keep another copy. Is it also what you meant?
> 
>> - What method are you using to create your multiple states?
> 
> I must create multiple instances of a class which has its own private
> lua_State.
> In the constructor of this class, I create a new state with
> luaL_newstate() and initialize it with luaL_openlib(),
> luabind::open(), luabind::module(), luaL_dofile(), etc.
> To make it works, I had to remove the use of static references.
> 
> Specifically, in stl_weak_registry_create(), I replaced:
> 
>         static int s_stl_weak_registry = LUA_REFNIL;
>         ...
>         s_stl_weak_registry = luaL_ref(L, LUA_REGISTRYINDEX);
> 
> with:
> 
>         static const char * container_reg_tag = "__luabind_stl_reg";
>         ...
>         lua_setfield(L, LUA_REGISTRYINDEX, container_reg_tag);
> 
> And in container_create_metatable(), I replaced:
> 
>        template<class Container_tt>
>        int stl_adapter<Container_tt>::ref_stl_adapter = LUA_REFNIL;
>        ...
>        ref_stl_adapter = luaL_ref(L, LUA_REGISTRYINDEX);
> 
> with:
> 
>        template<class Container_tt>
>        const std::string stl_adapter<Container_tt>::container_type_tag
> = std::string("__luabind_stl_") + typeid(Container_tt).name();
>        ...
>        lua_setfield(L, LUA_REGISTRYINDEX, container_type_tag.c_str());
> 
> This way, I keep all the references on the registry in the states
> themselves with (relatively) unique keys.
> 
> I'm attaching a sample to better illustrate my intended use of your work.
> I've compiled it with GCC 4.4, boost 1.43, luabind 0.9 and my version
> of your patch (the same as in my previous attachment).
> 
> 
> Best Regards,
> Christophe
> 
>  
> ------------------------------------------------------------------------------
> ThinkGeek and WIRED's GeekDad team up for the Ultimate 
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
> lucky parental unit.  See the prize list and enter to win: 
> http://p.sf.net/sfu/thinkgeek-promo
> _______________________________________________
> luabind-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/luabind-user
> 
> 

-- 
View this message in context: http://old.nabble.com/Re%3A-patch-for-direct-access-to-STL-containers-from-lua-tp28890816p29102944.html
Sent from the Lua C++ Bind mailing list archive at Nabble.com.


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
luabind-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/luabind-user
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.