Replace lua_newtable() with lua_createtable()
Lua can preallocate space in table for array or non-array elements type. This should improve performance when setting table, so when we can we use lua_createtable() since this is just a gain. Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
e8de7a4605
commit
dc29720ef7
8
client.c
8
client.c
|
@ -1598,7 +1598,7 @@ luaA_client_geometry(lua_State *L)
|
||||||
static inline int
|
static inline int
|
||||||
luaA_pushstruts(lua_State *L, strut_t struts)
|
luaA_pushstruts(lua_State *L, strut_t struts)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, 4, 0);
|
||||||
lua_pushnumber(L, struts.left);
|
lua_pushnumber(L, struts.left);
|
||||||
lua_setfield(L, -2, "left");
|
lua_setfield(L, -2, "left");
|
||||||
lua_pushnumber(L, struts.right);
|
lua_pushnumber(L, struts.right);
|
||||||
|
@ -1980,7 +1980,7 @@ luaA_client_index(lua_State *L)
|
||||||
{
|
{
|
||||||
const char *u_or_p = NULL;
|
const char *u_or_p = NULL;
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 1);
|
||||||
|
|
||||||
if(c->size_hints.flags & XCB_SIZE_HINT_US_POSITION)
|
if(c->size_hints.flags & XCB_SIZE_HINT_US_POSITION)
|
||||||
u_or_p = "user_position";
|
u_or_p = "user_position";
|
||||||
|
@ -1989,7 +1989,7 @@ luaA_client_index(lua_State *L)
|
||||||
|
|
||||||
if(u_or_p)
|
if(u_or_p)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 2);
|
||||||
lua_pushnumber(L, c->size_hints.x);
|
lua_pushnumber(L, c->size_hints.x);
|
||||||
lua_setfield(L, -2, "x");
|
lua_setfield(L, -2, "x");
|
||||||
lua_pushnumber(L, c->size_hints.y);
|
lua_pushnumber(L, c->size_hints.y);
|
||||||
|
@ -2005,7 +2005,7 @@ luaA_client_index(lua_State *L)
|
||||||
|
|
||||||
if(u_or_p)
|
if(u_or_p)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 2);
|
||||||
lua_pushnumber(L, c->size_hints.width);
|
lua_pushnumber(L, c->size_hints.width);
|
||||||
lua_setfield(L, -2, "width");
|
lua_setfield(L, -2, "width");
|
||||||
lua_pushnumber(L, c->size_hints.height);
|
lua_pushnumber(L, c->size_hints.height);
|
||||||
|
|
35
dbus.c
35
dbus.c
|
@ -72,15 +72,17 @@ a_dbus_message_iter(DBusMessageIter *iter)
|
||||||
break;
|
break;
|
||||||
case DBUS_TYPE_STRUCT:
|
case DBUS_TYPE_STRUCT:
|
||||||
{
|
{
|
||||||
/* create a new table to store all the value */
|
|
||||||
lua_newtable(globalconf.L);
|
|
||||||
|
|
||||||
DBusMessageIter subiter;
|
DBusMessageIter subiter;
|
||||||
/* initialize a sub iterator */
|
/* initialize a sub iterator */
|
||||||
dbus_message_iter_recurse(iter, &subiter);
|
dbus_message_iter_recurse(iter, &subiter);
|
||||||
/* create a new table to store the dict */
|
|
||||||
int n = a_dbus_message_iter(&subiter);
|
int n = a_dbus_message_iter(&subiter);
|
||||||
|
|
||||||
|
/* create a new table to store all the value */
|
||||||
|
lua_createtable(globalconf.L, n, 0);
|
||||||
|
/* move the table before array elements */
|
||||||
|
lua_insert(globalconf.L, - n - 1);
|
||||||
|
|
||||||
for(int i = n; i > 0; i--)
|
for(int i = n; i > 0; i--)
|
||||||
lua_rawseti(globalconf.L, - i - 1, i);
|
lua_rawseti(globalconf.L, - i - 1, i);
|
||||||
}
|
}
|
||||||
|
@ -102,8 +104,8 @@ a_dbus_message_iter(DBusMessageIter *iter)
|
||||||
case dbustype: \
|
case dbustype: \
|
||||||
{ \
|
{ \
|
||||||
const type *data; \
|
const type *data; \
|
||||||
lua_newtable(globalconf.L); \
|
|
||||||
dbus_message_iter_get_fixed_array(&sub, &data, &datalen); \
|
dbus_message_iter_get_fixed_array(&sub, &data, &datalen); \
|
||||||
|
lua_createtable(globalconf.L, datalen, 0); \
|
||||||
for(int i = 0; i < datalen; i++) \
|
for(int i = 0; i < datalen; i++) \
|
||||||
{ \
|
{ \
|
||||||
lua_pushnumber(globalconf.L, data[i]); \
|
lua_pushnumber(globalconf.L, data[i]); \
|
||||||
|
@ -129,8 +131,8 @@ a_dbus_message_iter(DBusMessageIter *iter)
|
||||||
case DBUS_TYPE_BOOLEAN:
|
case DBUS_TYPE_BOOLEAN:
|
||||||
{
|
{
|
||||||
const bool *b;
|
const bool *b;
|
||||||
lua_newtable(globalconf.L);
|
|
||||||
dbus_message_iter_get_fixed_array(&sub, &b, &datalen);
|
dbus_message_iter_get_fixed_array(&sub, &b, &datalen);
|
||||||
|
lua_createtable(globalconf.L, datalen, 0);
|
||||||
for(int i = 0; i < datalen; i++)
|
for(int i = 0; i < datalen; i++)
|
||||||
{
|
{
|
||||||
lua_pushboolean(globalconf.L, b[i]);
|
lua_pushboolean(globalconf.L, b[i]);
|
||||||
|
@ -143,30 +145,35 @@ a_dbus_message_iter(DBusMessageIter *iter)
|
||||||
else if(array_type == DBUS_TYPE_DICT_ENTRY)
|
else if(array_type == DBUS_TYPE_DICT_ENTRY)
|
||||||
{
|
{
|
||||||
DBusMessageIter subiter;
|
DBusMessageIter subiter;
|
||||||
|
|
||||||
lua_newtable(globalconf.L);
|
|
||||||
|
|
||||||
/* initialize a sub iterator */
|
/* initialize a sub iterator */
|
||||||
dbus_message_iter_recurse(iter, &subiter);
|
dbus_message_iter_recurse(iter, &subiter);
|
||||||
|
|
||||||
/* get the keys and the values
|
/* get the keys and the values
|
||||||
* n is the number of entry in * dict */
|
* n is the number of entry in dict */
|
||||||
int n = a_dbus_message_iter(&subiter);
|
int n = a_dbus_message_iter(&subiter);
|
||||||
|
|
||||||
|
/* create a new table to store all the value */
|
||||||
|
lua_createtable(globalconf.L, n, 0);
|
||||||
|
/* move the table before array elements */
|
||||||
|
lua_insert(globalconf.L, - (n * 2) - 1);
|
||||||
|
|
||||||
for(int i = 0; i < n; i ++)
|
for(int i = 0; i < n; i ++)
|
||||||
lua_rawset(globalconf.L, - (n * 2) - 1 + i * 2);
|
lua_rawset(globalconf.L, - (n * 2) - 1 + i * 2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBusMessageIter subiter;
|
DBusMessageIter subiter;
|
||||||
|
|
||||||
lua_newtable(globalconf.L);
|
|
||||||
|
|
||||||
/* prepare to dig into the array*/
|
/* prepare to dig into the array*/
|
||||||
dbus_message_iter_recurse(iter, &subiter);
|
dbus_message_iter_recurse(iter, &subiter);
|
||||||
|
|
||||||
/* now iterate over every element of the array */
|
/* now iterate over every element of the array */
|
||||||
int n = a_dbus_message_iter(&subiter);
|
int n = a_dbus_message_iter(&subiter);
|
||||||
|
|
||||||
|
/* create a new table to store all the value */
|
||||||
|
lua_createtable(globalconf.L, n, 0);
|
||||||
|
/* move the table before array elements */
|
||||||
|
lua_insert(globalconf.L, - n - 1);
|
||||||
|
|
||||||
for(int i = n; i > 0; i--)
|
for(int i = n; i > 0; i--)
|
||||||
lua_rawseti(globalconf.L, - i - 1, i);
|
lua_rawseti(globalconf.L, - i - 1, i);
|
||||||
}
|
}
|
||||||
|
@ -225,7 +232,7 @@ a_dbus_process_request(DBusConnection *dbus_connection, DBusMessage *msg)
|
||||||
if(globalconf.hooks.dbus == LUA_REFNIL)
|
if(globalconf.hooks.dbus == LUA_REFNIL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
lua_newtable(globalconf.L);
|
lua_createtable(globalconf.L, 0, 5);
|
||||||
|
|
||||||
switch(dbus_message_get_type(msg))
|
switch(dbus_message_get_type(msg))
|
||||||
{
|
{
|
||||||
|
|
|
@ -692,7 +692,7 @@ keygrabber_handlekpress(lua_State *L, xcb_key_press_event_t *e)
|
||||||
if(!key_press_lookup_string(e, buf, countof(buf), &ksym))
|
if(!key_press_lookup_string(e, buf, countof(buf), &ksym))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 8);
|
||||||
|
|
||||||
lua_pushboolean(L, e->state & XCB_MOD_MASK_CONTROL);
|
lua_pushboolean(L, e->state & XCB_MOD_MASK_CONTROL);
|
||||||
lua_setfield(L, -2, "Control");
|
lua_setfield(L, -2, "Control");
|
||||||
|
|
2
luaa.c
2
luaa.c
|
@ -418,7 +418,7 @@ luaA_table2wtable(lua_State *L)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
lua_newtable(L); /* create *real* content table */
|
lua_newtable(L); /* create *real* content table */
|
||||||
lua_newtable(L); /* metatable */
|
lua_createtable(L, 0, 5); /* metatable */
|
||||||
lua_pushvalue(L, -2); /* copy content table */
|
lua_pushvalue(L, -2); /* copy content table */
|
||||||
lua_pushcfunction(L, luaA_ipairs_aux); /* push ipairs aux */
|
lua_pushcfunction(L, luaA_ipairs_aux); /* push ipairs aux */
|
||||||
lua_pushcclosure(L, luaA_wtable_ipairs, 2);
|
lua_pushcclosure(L, luaA_wtable_ipairs, 2);
|
||||||
|
|
4
luaa.h
4
luaa.h
|
@ -173,7 +173,7 @@ luaA_getopt_boolean(lua_State *L, int idx, const char *name, bool def)
|
||||||
static inline int
|
static inline int
|
||||||
luaA_pusharea(lua_State *L, area_t geometry)
|
luaA_pusharea(lua_State *L, area_t geometry)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 4);
|
||||||
lua_pushnumber(L, geometry.x);
|
lua_pushnumber(L, geometry.x);
|
||||||
lua_setfield(L, -2, "x");
|
lua_setfield(L, -2, "x");
|
||||||
lua_pushnumber(L, geometry.y);
|
lua_pushnumber(L, geometry.y);
|
||||||
|
@ -316,7 +316,7 @@ luaA_getopt_padding(lua_State *L, int idx, padding_t *dpadding)
|
||||||
static inline int
|
static inline int
|
||||||
luaA_pushpadding(lua_State *L, padding_t *padding)
|
luaA_pushpadding(lua_State *L, padding_t *padding)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 4);
|
||||||
lua_pushnumber(L, padding->right);
|
lua_pushnumber(L, padding->right);
|
||||||
lua_setfield(L, -2, "right");
|
lua_setfield(L, -2, "right");
|
||||||
lua_pushnumber(L, padding->left);
|
lua_pushnumber(L, padding->left);
|
||||||
|
|
4
mouse.c
4
mouse.c
|
@ -393,13 +393,13 @@ luaA_mouse_newindex(lua_State *L)
|
||||||
int
|
int
|
||||||
luaA_mouse_pushstatus(lua_State *L, int x, int y, uint16_t mask)
|
luaA_mouse_pushstatus(lua_State *L, int x, int y, uint16_t mask)
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, 0, 2);
|
||||||
lua_pushnumber(L, x);
|
lua_pushnumber(L, x);
|
||||||
lua_setfield(L, -2, "x");
|
lua_setfield(L, -2, "x");
|
||||||
lua_pushnumber(L, y);
|
lua_pushnumber(L, y);
|
||||||
lua_setfield(L, -2, "y");
|
lua_setfield(L, -2, "y");
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_createtable(L, 5, 0);
|
||||||
|
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
|
||||||
|
|
2
screen.c
2
screen.c
|
@ -431,7 +431,7 @@ luaA_screen_tags(lua_State *L)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lua_newtable(L);
|
lua_createtable(L, s->tags.len, 0);
|
||||||
for(i = 0; i < s->tags.len; i++)
|
for(i = 0; i < s->tags.len; i++)
|
||||||
{
|
{
|
||||||
tag_push(L, s->tags.tab[i]);
|
tag_push(L, s->tags.tab[i]);
|
||||||
|
|
2
spawn.c
2
spawn.c
|
@ -77,7 +77,7 @@ spawn_monitor_event(SnMonitorEvent *event, void *data)
|
||||||
SnStartupSequence *sequence = sn_monitor_event_get_startup_sequence(event);
|
SnStartupSequence *sequence = sn_monitor_event_get_startup_sequence(event);
|
||||||
SnMonitorEventType event_type = sn_monitor_event_get_type(event);
|
SnMonitorEventType event_type = sn_monitor_event_get_type(event);
|
||||||
|
|
||||||
lua_newtable(globalconf.L);
|
lua_createtable(globalconf.L, 0, 2);
|
||||||
lua_pushstring(globalconf.L, sn_startup_sequence_get_id(sequence));
|
lua_pushstring(globalconf.L, sn_startup_sequence_get_id(sequence));
|
||||||
lua_setfield(globalconf.L, -2, "id");
|
lua_setfield(globalconf.L, -2, "id");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue