From bc291713c56a2bc27ec10cef52dd3a52a0579c7d Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Mon, 30 Jan 2012 18:35:54 +0100 Subject: Fixed some lua_newtable/createtable usage When creating a Lua table, it is possible to specify in advance how many array elements and how many non-array elements this table will contain, to avoid dynamic reallocations while filling the table. This wasn't used optimally by the pushSTLContainer helper methods and some other cases. Reviewed-by: Erik Schilling Reviewed-by: Yohann Ferreira --- src/scripting/lua.cpp | 4 ++-- src/scripting/luautil.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/scripting') diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index eb50f16..c7053b3 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -386,7 +386,7 @@ static int chr_get_inventory(lua_State *s) lua_pushinteger(s, tableIndex); // Create the sub-table (value of the main one) - lua_newtable(s); + lua_createtable(s, 0, 4); int subTableStackPosition = lua_gettop(s); // Stores the item info in it. lua_pushstring(s, "slot"); @@ -458,7 +458,7 @@ static int chr_get_equipment(lua_State *s) lua_pushinteger(s, tableIndex); // Create the sub-table (value of the main one) - lua_newtable(s); + lua_createtable(s, 0, 3); int subTableStackPosition = lua_gettop(s); // Stores the item info in it. lua_pushstring(s, "slot"); diff --git a/src/scripting/luautil.h b/src/scripting/luautil.h index 82bb78c..ee3f114 100644 --- a/src/scripting/luautil.h +++ b/src/scripting/luautil.h @@ -63,7 +63,7 @@ void push(lua_State *s, MapObject *val); template void pushSTLContainer(lua_State *s, const std::list &container) { int len = container.size(); - lua_newtable(s); + lua_createtable(s, len, 0); int table = lua_gettop(s); typename std::list::const_iterator i; i = container.begin(); @@ -81,7 +81,7 @@ template void pushSTLContainer(lua_State *s, const std::list &co template void pushSTLContainer(lua_State *s, const std::vector &container) { int len = container.size(); - lua_createtable(s, 0, len); + lua_createtable(s, len, 0); int table = lua_gettop(s); for (int key = 0; key < len; key++) @@ -114,7 +114,7 @@ template void pushSTLContainer(lua_State *s, cons template void pushSTLContainer(lua_State *s, const std::set &container) { int len = container.size(); - lua_newtable(s); + lua_createtable(s, len, 0); int table = lua_gettop(s); typename std::set::const_iterator i; i = container.begin(); -- cgit