From: Vsevolod Stakhov Date: Mon, 14 Sep 2020 10:37:14 +0000 (+0100) Subject: [Minor] Add deepsort utility X-Git-Tag: 2.6~52 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c2a0484005d2e574830fec4245cee1ea9cce82c9;p=thirdparty%2Frspamd.git [Minor] Add deepsort utility --- diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua index 6b42dbc5d9..7c925c12b7 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