mirror of
https://github.com/bjc/prosody.git
synced 2025-04-04 13:47:41 +03:00
util.set: New util library
This commit is contained in:
parent
51fd2073f8
commit
7f87706ee4
1 changed files with 75 additions and 0 deletions
75
util/set.lua
Normal file
75
util/set.lua
Normal file
|
@ -0,0 +1,75 @@
|
|||
|
||||
module "set"
|
||||
|
||||
function new(list)
|
||||
local items = {};
|
||||
local set = { items = items };
|
||||
|
||||
function set:add(set, item)
|
||||
items[item] = true;
|
||||
end
|
||||
|
||||
function set:contains(set, item)
|
||||
return items[item]
|
||||
end
|
||||
|
||||
function set:items(set)
|
||||
return items;
|
||||
end
|
||||
|
||||
function set:remove(set, item)
|
||||
items[item] = nil;
|
||||
end
|
||||
|
||||
function set:add_list(set, list)
|
||||
for _, item in ipairs(list) do
|
||||
items[item] = true;
|
||||
end
|
||||
end
|
||||
|
||||
function set:include(set, otherset)
|
||||
for item in pairs(otherset) do
|
||||
items[item] = true;
|
||||
end
|
||||
end
|
||||
|
||||
function set:exclude(set, otherset)
|
||||
for item in pairs(otherset) do
|
||||
items[item] = nil;
|
||||
end
|
||||
end
|
||||
|
||||
return set;
|
||||
end
|
||||
|
||||
function union(set1, set2)
|
||||
local set = new();
|
||||
local items = set.items;
|
||||
|
||||
for item in pairs(set1.items) do
|
||||
items[item] = true;
|
||||
end
|
||||
|
||||
for item in pairs(set2.items) do
|
||||
items[item] = true;
|
||||
end
|
||||
|
||||
return set;
|
||||
end
|
||||
|
||||
function difference(set1, set2)
|
||||
local set = new();
|
||||
local items = set.items;
|
||||
|
||||
for item in pairs(set1.items) do
|
||||
items[item] = true;
|
||||
end
|
||||
|
||||
for item in pairs(set2.items) do
|
||||
items[item] = nil;
|
||||
end
|
||||
|
||||
return set;
|
||||
end
|
||||
|
||||
return _M;
|
Loading…
Add table
Add a link
Reference in a new issue