diff options
Diffstat (limited to 'libs/lua/LuaBridge/detail')
-rw-r--r-- | libs/lua/LuaBridge/detail/CFunctions.h | 14 | ||||
-rw-r--r-- | libs/lua/LuaBridge/detail/Namespace.h | 2 |
2 files changed, 15 insertions, 1 deletions
diff --git a/libs/lua/LuaBridge/detail/CFunctions.h b/libs/lua/LuaBridge/detail/CFunctions.h index 7300e9cb70..22dc115a6a 100644 --- a/libs/lua/LuaBridge/detail/CFunctions.h +++ b/libs/lua/LuaBridge/detail/CFunctions.h @@ -1234,6 +1234,20 @@ struct CFunc } //-------------------------------------------------------------------------- + // push back a C-pointer to a std::list<T*> + + template <class T, class C> + static int pushbackptr (lua_State *L) + { + C * const c = Userdata::get <C> (L, 1, false); + if (!c) { return luaL_error (L, "invalid pointer to std::list<>"); } + T * const v = Userdata::get <T> (L, 2, true); + if (!v) { return luaL_error (L, "invalid pointer to std::list<>::value_type"); } + c->push_back (v); + return 0; + } + + //-------------------------------------------------------------------------- // generate std::map from table template <class K, class V> diff --git a/libs/lua/LuaBridge/detail/Namespace.h b/libs/lua/LuaBridge/detail/Namespace.h index 5ea139ee22..76474aa703 100644 --- a/libs/lua/LuaBridge/detail/Namespace.h +++ b/libs/lua/LuaBridge/detail/Namespace.h @@ -1911,7 +1911,7 @@ public: typedef std::list<TP> LT; return beginConstStdCPtrList<T> (name) .addFunction ("unique", (void (LT::*)())<::unique) - .addFunction ("push_back", (void (LT::*)(const TP&))<::push_back); + .addExtCFunction ("push_back", &CFunc::pushbackptr<T, LT>); } |