diff --git a/test.lua b/test.lua index 57ec046..d0fa402 100644 --- a/test.lua +++ b/test.lua @@ -15,10 +15,12 @@ local function random_choose(t) end local function delete_handler(member) - print("delete", member) + print("delete", member) end -local zs = zset.new(delete_handler) +local zs = zset.new { + delete_handler = delete_handler, +} while true do local score = random_choose(all) diff --git a/zset.lua b/zset.lua index 40cbd09..1844980 100644 --- a/zset.lua +++ b/zset.lua @@ -110,17 +110,26 @@ function mt:dump() end local M = {} -function M.new(delete_handler) + +---@class zset.options +---@field delete_handler fun(member:string) + +--- Create a new zset +---@param options zset.options +function M.new(options) local obj = {} obj.sl = skiplist() obj.tbl = {} + + local delete_handler = options and options.delete_handler obj.delete_function = function(member) obj.tbl[member] = nil if delete_handler then delete_handler(member) end end + return setmetatable(obj, mt) end -return M +return M