diff --git a/src/lua/digest.lua b/src/lua/digest.lua index 4e062d30260a2d864efe416e8842e9af5aa15cfb..ad1f23092fdf8ebec80b5615cb03c27846e899c9 100644 --- a/src/lua/digest.lua +++ b/src/lua/digest.lua @@ -72,8 +72,8 @@ local function tohex(r, size) return ffi.string(hexres, size * 2) end -local PMurHash = { - default_seed = 13, +local PMurHash +local PMurHash_methods = { update = function(self, str) str = tostring(str or '') @@ -81,7 +81,7 @@ local PMurHash = { self.total_length = self.total_length + string.len(str) end, - digest = function(self) + result = function(self) return ffi.C.PMurHash32_Result(self.seed[0], self.value[0], self.total_length) end, @@ -90,69 +90,78 @@ local PMurHash = { self.total_length = 0 self.value[0] = 0 end, -} -PMurHash.__call = function(self, str) - str = tostring(str or '') - return ffi.C.PMurHash32(PMurHash.default_seed, str, string.len(str)) -end + copy = function(self) + local new_self = PMurHash.new() + new_self.seed[0] = self.seed[0] + new_self.value[0] = self.value[0] + new_self.total_length = self.total_length + return new_self + end +} -PMurHash.copy = function(self) - new_self = PMurHash.new{seed=self.default_seed} - new_self.seed[0] = self.seed[0] - new_self.value[0] = self.value[0] - new_self.total_length = self.total_length - return new_self -end +PMurHash = { + default_seed = 13, -PMurHash.new = function(opts) - opts = opts or {} - local self = setmetatable({}, { __index = PMurHash }) - self.default_seed = (opts.seed or PMurHash.default_seed) - self.seed = ffi.new("int[1]", self.default_seed) - self.value = ffi.new("int[1]", 0) - self.total_length = 0 - return self -end + new = function(opts) + opts = opts or {} + local self = setmetatable({}, { __index = PMurHash_methods }) + self.default_seed = (opts.seed or PMurHash.default_seed) + self.seed = ffi.new("int[1]", self.default_seed) + self.value = ffi.new("int[1]", 0) + self.total_length = 0 + return self + end +} -local CRC32 = { - crc_begin = 4294967295, +setmetatable(PMurHash, { + __call = function(self, str) + str = tostring(str or '') + return ffi.C.PMurHash32(PMurHash.default_seed, str, string.len(str)) + end +}) +local CRC32 +local CRC32_methods = { update = function(self, str) str = tostring(str or '') self.value = ffi.C.crc32_calc(self.value, str, string.len(str)) end, - digest = function(self) + result = function(self) return self.value end, clear = function(self) self.value = CRC32.crc_begin end, + + copy = function(self) + local new_self = CRC32.new() + new_self.value = self.value + return new_self + end } -CRC32.__call = function(self, str) - str = tostring(str or '') - return ffi.C.crc32_calc(CRC32.crc_begin, str, string.len(str)) -end +CRC32 = { + crc_begin = 4294967295, -CRC32.copy = function(self) - new_self = CRC32.new() - new_self.value = self.value - return new_self -end + new = function() + local self = setmetatable({}, { __index = CRC32_methods }) + self.value = CRC32.crc_begin + return self + end +} -CRC32.new = function() - local self = setmetatable({}, { __index == CRC32 }) - self.value = CRC32.crc_begin - return self -end +setmetatable(CRC32, { + __call = function(self, str) + str = tostring(str or '') + return ffi.C.crc32_calc(CRC32.crc_begin, str, string.len(str)) + end +}) local m = { - crc32 = { - new = CRC32.new, - }, + crc32 = CRC32, crc32_update = function(crc, str) str = tostring(str or '') @@ -163,14 +172,9 @@ local m = { return ffi.C.guava(state, buckets) end, - murmur = { - new = PMurHash.new, - }, + murmur = PMurHash } -setmetatable(m.murmur, { __call = PMurHash.__call }) -setmetatable(m.crc32, { __call = CRC32.__call }) - if ssl ~= nil then for pname, df in pairs(def) do diff --git a/test/box/digest.result b/test/box/digest.result index c81a7d1a0b7b64d19210d556a496f8a05ee575d6..347c60d1020e2d655e6aafcc3e7a32bb3a9173ee 100644 --- a/test/box/digest.result +++ b/test/box/digest.result @@ -173,13 +173,13 @@ lua box.digest.murmur('1234') lua mur = box.digest.murmur.new{seed=13} --- ... -lua nulldigest = mur:digest() +lua nulldigest = mur:result() --- ... lua mur:update('1234') --- ... -lua mur:digest() +lua mur:result() --- - 1859914009 ... @@ -189,14 +189,14 @@ lua mur_new = mur:copy() lua mur_new:update('1234') --- ... -lua mur_new:digest() ~= mur:digest() +lua mur_new:result() ~= mur:result() --- - true ... lua mur:clear() --- ... -lua nulldigest == mur:digest() +lua nulldigest == mur:result() --- - true ... @@ -206,7 +206,7 @@ lua mur = box.digest.murmur.new{seed=14} lua mur:update('1234') --- ... -lua mur:digest() +lua mur:result() --- - 1689834281 ... diff --git a/test/box/digest.test b/test/box/digest.test index 9fa76e56f4f0c98c6f341bec3c325b4e0d0d174c..02a95716910a8b02dfc50af38bb9d0fa5ef3bb80 100644 --- a/test/box/digest.test +++ b/test/box/digest.test @@ -53,15 +53,15 @@ exec admin "lua box.digest.guava(1673758223894951030, 11)" exec admin "lua box.digest.murmur('1234')" exec admin "lua mur = box.digest.murmur.new{seed=13}" -exec admin "lua nulldigest = mur:digest()" +exec admin "lua nulldigest = mur:result()" exec admin "lua mur:update('1234')" -exec admin "lua mur:digest()" +exec admin "lua mur:result()" exec admin "lua mur_new = mur:copy()" exec admin "lua mur_new:update('1234')" -exec admin "lua mur_new:digest() ~= mur:digest()" +exec admin "lua mur_new:result() ~= mur:result()" exec admin "lua mur:clear()" -exec admin "lua nulldigest == mur:digest()" +exec admin "lua nulldigest == mur:result()" exec admin "lua mur = box.digest.murmur.new{seed=14}" exec admin "lua mur:update('1234')" -exec admin "lua mur:digest()" +exec admin "lua mur:result()" exec admin "lua mur, mur_new, nulldigest = nil, nil, nil"