local utils = {} utils.sizeof = function(t) if not t then return 0 end local size = 0 for k,v in pairs(t) do size = size + 1 end return size end utils.difference = function(a, b) local aa = {} for k,v in pairs(a) do aa[v]=true end for k,v in pairs(b) do aa[v]=nil end local ret = {} local n = 0 for k,v in pairs(a) do if aa[v] then n=n+1 ret[n]=v end end return ret end utils.shallowClone = function(t) local res = {} for k,v in pairs(t) do res[k] = v end return res end utils.find = function(t, predicate) for k,v in pairs(t) do if predicate(v, k) then return v, k end end end return utils