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