X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fset.lua;h=fa065a9c5b8a2f7df7375273df27f1ae06bd8318;hb=4b39eb72b97e9827e5322974f0424c3fc063ce25;hp=84bfe8c42c299e29bcb506ab153198b5677f91b0;hpb=138c5afe227036aa3cfcff2c3e25ff72e6745de4;p=prosody.git diff --git a/util/set.lua b/util/set.lua index 84bfe8c4..fa065a9c 100644 --- a/util/set.lua +++ b/util/set.lua @@ -1,4 +1,12 @@ -local ipairs, pairs, setmetatable, next, tostring = +-- Prosody IM +-- Copyright (C) 2008-2010 Matthew Wild +-- Copyright (C) 2008-2010 Waqas Hussain +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- + +local ipairs, pairs, setmetatable, next, tostring = ipairs, pairs, setmetatable, next, tostring; local t_concat = table.concat; @@ -15,11 +23,12 @@ function set_mt.__sub(set1, set2) return _M.difference(set1, set2); end function set_mt.__div(set, func) - local new_set, new_items = _M.new(); + local new_set = _M.new(); local items, new_items = set._items, new_set._items; for item in pairs(items) do - if func(item) then - new_items[item] = true; + local new_item = func(item); + if new_item ~= nil then + new_items[new_item] = true; end end return new_set; @@ -74,19 +83,21 @@ function new(list) end function set:add_list(list) - for _, item in ipairs(list) do - items[item] = true; + if list then + for _, item in ipairs(list) do + items[item] = true; + end end end function set:include(otherset) - for item in pairs(otherset) do + for item in otherset do items[item] = true; end end function set:exclude(otherset) - for item in pairs(otherset) do + for item in otherset do items[item] = nil; end end