Software / code / prosody
Comparison
util/set.lua @ 904:0205dcd0854a
util.set: New util library
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 22 Mar 2009 12:13:39 +0000 |
| child | 905:6169597d5574 |
comparison
equal
deleted
inserted
replaced
| 903:6737d005a84a | 904:0205dcd0854a |
|---|---|
| 1 | |
| 2 module "set" | |
| 3 | |
| 4 function new(list) | |
| 5 local items = {}; | |
| 6 local set = { items = items }; | |
| 7 | |
| 8 function set:add(set, item) | |
| 9 items[item] = true; | |
| 10 end | |
| 11 | |
| 12 function set:contains(set, item) | |
| 13 return items[item] | |
| 14 end | |
| 15 | |
| 16 function set:items(set) | |
| 17 return items; | |
| 18 end | |
| 19 | |
| 20 function set:remove(set, item) | |
| 21 items[item] = nil; | |
| 22 end | |
| 23 | |
| 24 function set:add_list(set, list) | |
| 25 for _, item in ipairs(list) do | |
| 26 items[item] = true; | |
| 27 end | |
| 28 end | |
| 29 | |
| 30 function set:include(set, otherset) | |
| 31 for item in pairs(otherset) do | |
| 32 items[item] = true; | |
| 33 end | |
| 34 end | |
| 35 | |
| 36 function set:exclude(set, otherset) | |
| 37 for item in pairs(otherset) do | |
| 38 items[item] = nil; | |
| 39 end | |
| 40 end | |
| 41 | |
| 42 return set; | |
| 43 end | |
| 44 | |
| 45 function union(set1, set2) | |
| 46 local set = new(); | |
| 47 local items = set.items; | |
| 48 | |
| 49 for item in pairs(set1.items) do | |
| 50 items[item] = true; | |
| 51 end | |
| 52 | |
| 53 for item in pairs(set2.items) do | |
| 54 items[item] = true; | |
| 55 end | |
| 56 | |
| 57 return set; | |
| 58 end | |
| 59 | |
| 60 function difference(set1, set2) | |
| 61 local set = new(); | |
| 62 local items = set.items; | |
| 63 | |
| 64 for item in pairs(set1.items) do | |
| 65 items[item] = true; | |
| 66 end | |
| 67 | |
| 68 for item in pairs(set2.items) do | |
| 69 items[item] = nil; | |
| 70 end | |
| 71 | |
| 72 return set; | |
| 73 end | |
| 74 | |
| 75 return _M; |