util-src/table.c
author Kim Alvefur <zash@zash.se>
Mon, 17 Oct 2022 15:20:06 +0200
changeset 12779 1dd468c63a3d
parent 12595 494577d883ff
child 12980 a187600ec7d6
permissions -rw-r--r--
mod_blocklist: Add option 'migrate_legacy_blocking' to disable migration from mod_privacy Tiny performance improvement for new users by skipping this check. Most servers should have gone trough the migration for all active users long ago. As a suitable first step of phasing out this code, we make it possible to disable it first. Later it can be disabled by default, before finally the code is deleted.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6613
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
#include <lua.h>
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
#include <lauxlib.h>
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
12406
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
     4
#ifndef LUA_MAXINTEGER
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
     5
#include <stdint.h>
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
     6
#define LUA_MAXINTEGER PTRDIFF_MAX
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
     7
#endif
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
     8
7892
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7838
diff changeset
     9
static int Lcreate_table(lua_State *L) {
6613
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
	lua_createtable(L, luaL_checkinteger(L, 1), luaL_checkinteger(L, 2));
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
	return 1;
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
}
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
12595
494577d883ff util.table: Fix inaccurate comment
Kim Alvefur <zash@zash.se>
parents: 12579
diff changeset
    14
/* COMPAT: w/ Lua pre-5.2 */
7892
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7838
diff changeset
    15
static int Lpack(lua_State *L) {
7522
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    16
	unsigned int n_args = lua_gettop(L);
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    17
	lua_createtable(L, n_args, 1);
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    18
	lua_insert(L, 1);
7892
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7838
diff changeset
    19
7939
582bfb39337f Backed out changeset a3a4ed0d34f4 C99 is ok
Kim Alvefur <zash@zash.se>
parents: 7892
diff changeset
    20
	for(int arg = n_args; arg >= 1; arg--) {
7522
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    21
		lua_rawseti(L, 1, arg);
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    22
	}
7892
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7838
diff changeset
    23
7522
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    24
	lua_pushinteger(L, n_args);
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    25
	lua_setfield(L, -2, "n");
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    26
	return 1;
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    27
}
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    28
12406
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    29
/* COMPAT: w/ Lua pre-5.4 */
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    30
static int Lmove (lua_State *L) {
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    31
	lua_Integer f = luaL_checkinteger(L, 2);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    32
	lua_Integer e = luaL_checkinteger(L, 3);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    33
	lua_Integer t = luaL_checkinteger(L, 4);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    34
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    35
	int tt = !lua_isnoneornil(L, 5) ? 5 : 1;  /* destination table */
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    36
	luaL_checktype(L, 1, LUA_TTABLE);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    37
	luaL_checktype(L, tt, LUA_TTABLE);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    38
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    39
	if (e >= f) {  /* otherwise, nothing to move */
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    40
		lua_Integer n, i;
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    41
		luaL_argcheck(L, f > 0 || e < LUA_MAXINTEGER + f, 3,
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    42
		  "too many elements to move");
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    43
		n = e - f + 1;  /* number of elements to move */
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    44
		luaL_argcheck(L, t <= LUA_MAXINTEGER - n + 1, 4,
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    45
		"destination wrap around");
12579
1f6f05a98fcd util-src: Remove Lua 5.1 compat macros
Kim Alvefur <zash@zash.se>
parents: 12409
diff changeset
    46
		if (t > e || t <= f || (tt != 1 && !lua_compare(L, 1, tt, LUA_OPEQ))) {
12406
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    47
			for (i = 0; i < n; i++) {
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    48
				lua_rawgeti(L, 1, f + i);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    49
				lua_rawseti(L, tt, t + i);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    50
			}
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    51
		} else {
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    52
			for (i = n - 1; i >= 0; i--) {
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    53
				lua_rawgeti(L, 1, f + i);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    54
				lua_rawseti(L, tt, t + i);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    55
			}
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    56
		}
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    57
	}
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    58
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    59
	lua_pushvalue(L, tt);  /* return destination table */
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    60
	return 1;
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    61
}
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    62
7892
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7838
diff changeset
    63
int luaopen_util_table(lua_State *L) {
7821
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 7541
diff changeset
    64
	luaL_checkversion(L);
7972
1c6a07606309 util-src: Specify size of various tables to be allocated
Kim Alvefur <zash@zash.se>
parents: 7939
diff changeset
    65
	lua_createtable(L, 0, 2);
6613
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    66
	lua_pushcfunction(L, Lcreate_table);
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    67
	lua_setfield(L, -2, "create");
7522
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    68
	lua_pushcfunction(L, Lpack);
d278a770eddc util.table: Add pack() function (this is already available in Lua 5.2+)
Matthew Wild <mwild1@gmail.com>
parents: 6618
diff changeset
    69
	lua_setfield(L, -2, "pack");
12406
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    70
	lua_pushcfunction(L, Lmove);
8deb401a21f6 util.table: Backport table.move() from Lua 5.4
Matthew Wild <mwild1@gmail.com>
parents: 7972
diff changeset
    71
	lua_setfield(L, -2, "move");
6613
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
	return 1;
7c4cf87f4dff util.table, Makefile: New C module that allows pre-allocation of tables to improve performance and decrease memory fragmentation
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
}