commit c2a0484: [Minor] Add deepsort utility
Vsevolod Stakhov
vsevolod at highsecure.ru
Mon Sep 14 10:42:06 UTC 2020
Author: Vsevolod Stakhov
Date: 2020-09-14 11:37:14 +0100
URL: https://github.com/rspamd/rspamd/commit/c2a0484005d2e574830fec4245cee1ea9cce82c9
[Minor] Add deepsort utility
---
lualib/lua_util.lua | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua
index 6b42dbc5d..7c925c12b 100644
--- a/lualib/lua_util.lua
+++ b/lualib/lua_util.lua
@@ -982,7 +982,9 @@ local function deepcopy(orig)
for orig_key, orig_value in next, orig, nil do
copy[deepcopy(orig_key)] = deepcopy(orig_value)
end
- setmetatable(copy, deepcopy(getmetatable(orig)))
+ if getmetatable(orig) then
+ setmetatable(copy, deepcopy(getmetatable(orig)))
+ end
else -- number, string, boolean, etc
copy = orig
end
@@ -991,6 +993,25 @@ end
exports.deepcopy = deepcopy
+--[[[
+-- @function lua_util.deepsort(table)
+-- params: {
+- - table
+-- }
+-- Performs recursive in-place sort of a table
+--]]
+local function deepsort(tbl, sort_func)
+ local orig_type = type(tbl)
+ if orig_type == 'table' then
+ table.sort(tbl, sort_func)
+ for _, orig_value in next, tbl, nil do
+ deepsort(orig_value)
+ end
+ end
+end
+
+exports.deepsort = deepsort
+
--[[[
-- @function lua_util.shallowcopy(tbl)
-- Performs shallow (and fast) copy of a table or another Lua type
More information about the Commits
mailing list