13
0

allow lua to access array at an offset

This commit is contained in:
Robin Gareus 2016-05-21 15:43:19 +02:00
parent 53c188beb3
commit 50d6f146f4
2 changed files with 14 additions and 1 deletions

View File

@ -969,6 +969,14 @@ struct CFunc
return 0; 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;
}
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
/** /**

View File

@ -1070,7 +1070,9 @@ private:
PRINTDOC ("Ext C Function", _name << "set_table", PRINTDOC ("Ext C Function", _name << "set_table",
std::string(""), "int (*)(lua_State*)") std::string(""), "int (*)(lua_State*)")
PRINTDOC("Member Function", _name << "sameinstance", 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; m_stackSize = parent->m_stackSize + 3;
parent->m_stackSize = 0; parent->m_stackSize = 0;
@ -1132,6 +1134,9 @@ private:
lua_pushcclosure (L, &CFunc::ClassEqualCheck <T>::f, 0); lua_pushcclosure (L, &CFunc::ClassEqualCheck <T>::f, 0);
rawsetfield (L, -3, "sameinstance"); rawsetfield (L, -3, "sameinstance");
lua_pushcclosure (L, &CFunc::offsetArray <T>, 0);
rawsetfield (L, -3, "offset"); // class table
} }
else else
{ {