summaryrefslogtreecommitdiff
path: root/libs/lua
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-05-21 15:43:19 +0200
committerRobin Gareus <robin@gareus.org>2016-05-21 15:55:14 +0200
commit50d6f146f4cd24b7ea4532ec70fae348056acc32 (patch)
tree4275f27401266678465b66893d85be03d279a217 /libs/lua
parent53c188beb3de47f903482ac3c7812d756e94508f (diff)
allow lua to access array at an offset
Diffstat (limited to 'libs/lua')
-rw-r--r--libs/lua/LuaBridge/detail/CFunctions.h8
-rw-r--r--libs/lua/LuaBridge/detail/Namespace.h7
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
{