commit e8602a1: [Minor] Add method to compare sorted tables

Vsevolod Stakhov vsevolod at highsecure.ru
Thu Jul 4 14:56:03 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-07-04 15:49:27 +0100
URL: https://github.com/rspamd/rspamd/commit/e8602a1ad504f571db3853e23d75e611514b9bfd (HEAD -> master)

[Minor] Add method to compare sorted tables

---
 lualib/lua_util.lua | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/lualib/lua_util.lua b/lualib/lua_util.lua
index fc4f33c83..7092aa3de 100644
--- a/lualib/lua_util.lua
+++ b/lualib/lua_util.lua
@@ -1044,4 +1044,50 @@ exports.values = function(gen, param, state)
   return values
 end
 
+---[[[
+-- @function lua_util.distance_sorted(t1, t2)
+-- Returns distance between two sorted tables t1 and t2
+-- @param {table} t1 input table
+-- @param {table} t2 input table
+-- @return distance between `t1` and `t2`
+--]]]
+exports.distance_sorted = function(t1, t2)
+  local ncomp = #t1
+  local ndiff = 0
+  local i,j = 1,1
+
+  if ncomp < #t2 then
+    ncomp = #t2
+  end
+
+  for _=1,ncomp do
+    if j > #t2 then
+      ndiff = ndiff + ncomp - #t2
+      if i > j then
+        ndiff = ndiff - (i - j)
+      end
+      break
+    elseif i > #t1 then
+      ndiff = ndiff + ncomp - #t1
+      if j > i then
+        ndiff = ndiff - (j - i)
+      end
+      break
+    end
+
+    if t1[i] == t2[j] then
+      i = i + 1
+      j = j + 1
+    elseif t1[i] < t2[j] then
+      i = i + 1
+      ndiff = ndiff + 1
+    else
+      j = j + 1
+      ndiff = ndiff + 1
+    end
+  end
+
+  return ndiff
+end
+
 return exports


More information about the Commits mailing list