diff options
author | Robin Gareus <robin@gareus.org> | 2016-05-21 15:43:19 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-05-21 15:55:14 +0200 |
commit | 50d6f146f4cd24b7ea4532ec70fae348056acc32 (patch) | |
tree | 4275f27401266678465b66893d85be03d279a217 /libs/lua/LuaBridge | |
parent | 53c188beb3de47f903482ac3c7812d756e94508f (diff) |
allow lua to access array at an offset
Diffstat (limited to 'libs/lua/LuaBridge')
-rw-r--r-- | libs/lua/LuaBridge/detail/CFunctions.h | 8 | ||||
-rw-r--r-- | libs/lua/LuaBridge/detail/Namespace.h | 7 |
2 files changed, 14 insertions, 1 deletions
diff --git a/libs/lua/LuaBridge/detail/CFunctions.h b/libs/lua/LuaBridge/detail/CFunctions.h index 6f43919216..15bc7022b3 100644 --- a/libs/lua/LuaBridge/detail/CFunctions.h +++ b/libs/lua/LuaBridge/detail/CFunctions.h @@ -969,6 +969,14 @@ struct CFunc return 0; } + // return same array at an offset + template <typename T> + static int offsetArray (lua_State* L) { + T *v = luabridge::Stack<T*>::get (L, 1); + const unsigned int i = luabridge::Stack<unsigned int>::get (L, 2); + Stack <T*>::push (L, &v[i]); + return 1; + } //-------------------------------------------------------------------------- /** diff --git a/libs/lua/LuaBridge/detail/Namespace.h b/libs/lua/LuaBridge/detail/Namespace.h index c859d8d151..590f25be4a 100644 --- a/libs/lua/LuaBridge/detail/Namespace.h +++ b/libs/lua/LuaBridge/detail/Namespace.h @@ -1070,7 +1070,9 @@ private: PRINTDOC ("Ext C Function", _name << "set_table", std::string(""), "int (*)(lua_State*)") PRINTDOC("Member Function", _name << "sameinstance", - std::string("bool"), std::string("void (*)(" + type_name <T>() + "*)")) + std::string("bool"), std::string("bool (*)(" + type_name <T>() + "*)")) + PRINTDOC("Member Function", _name << "offset", + std::string(type_name <T>() + "*"), std::string(type_name <T>() + "* (*)(unsigned int)")) m_stackSize = parent->m_stackSize + 3; parent->m_stackSize = 0; @@ -1132,6 +1134,9 @@ private: lua_pushcclosure (L, &CFunc::ClassEqualCheck <T>::f, 0); rawsetfield (L, -3, "sameinstance"); + lua_pushcclosure (L, &CFunc::offsetArray <T>, 0); + rawsetfield (L, -3, "offset"); // class table + } else { |