Skip to content

rangercyh/lua-komihash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lua-komihash

lua wrapper for komihash

according to smhasher, komihash is one of the fastest hash functions on x86_64 without quality problems.

use

local komihash = require("komihash")

-- komihash.hash64(str, [seed], [raw])
-- hash a str to a 64 bit binary, return the hexadecimal bytes string.
-- seed is optional, default value is 0.
-- raw is optional, if pass true value, return the original bytes string.
komihash.hash64("test1") -- "ef1feecf4ea42349"

-- komihash.new([seed1], [seed2])
-- create a uniformly-random PRNG generator
local r = komihash.new()
-- r:rand([raw])
-- generate a 64 bit random binary, return the hexadecimal bytes string.
-- raw is optional, if pass true value, return the original bytes string.
r:rand()    -- "6b492747cc620c40"

tip

Because lua until 5.4 haven't support 64bit integer. lua_Integer is about 2^63-1 range. And lua_Number is saved as float type.

I have considered to use like LuaTinker or cloudwu lua-int64 solution to deal with it. But all add more complexity to the lib, I finally give up.

I cast uint64_t to char bytes to pass from c to lua and convert the bytes to hexadecimal bytes string in lua code.

The original bytes string can be convert to integer in either endian you choose, I put an example in the test case.

If you want to do some compatible work with the other implementation, you can get the raw bytes string and change the representation yourself refer to my test example.