Mercurial > prosody-hg
comparison util/set.lua @ 917:f12f88b3d4a1
util.set: Rename private items container, optimise set.difference() and add set.intersection()
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 23 Mar 2009 01:49:22 +0000 |
| parents | 6169597d5574 |
| children | 594a07e753a0 |
comparison
equal
deleted
inserted
replaced
| 916:f0743928ef7e | 917:f12f88b3d4a1 |
|---|---|
| 3 | 3 |
| 4 module "set" | 4 module "set" |
| 5 | 5 |
| 6 function new(list) | 6 function new(list) |
| 7 local items = {}; | 7 local items = {}; |
| 8 local set = { items = items }; | 8 local set = { _items = items }; |
| 9 | 9 |
| 10 function set:add(item) | 10 function set:add(item) |
| 11 items[item] = true; | 11 items[item] = true; |
| 12 end | 12 end |
| 13 | 13 |
| 48 return set; | 48 return set; |
| 49 end | 49 end |
| 50 | 50 |
| 51 function union(set1, set2) | 51 function union(set1, set2) |
| 52 local set = new(); | 52 local set = new(); |
| 53 local items = set.items; | 53 local items = set._items; |
| 54 | 54 |
| 55 for item in pairs(set1.items) do | 55 for item in pairs(set1._items) do |
| 56 items[item] = true; | 56 items[item] = true; |
| 57 end | 57 end |
| 58 | 58 |
| 59 for item in pairs(set2.items) do | 59 for item in pairs(set2._items) do |
| 60 items[item] = true; | 60 items[item] = true; |
| 61 end | 61 end |
| 62 | 62 |
| 63 return set; | 63 return set; |
| 64 end | 64 end |
| 65 | 65 |
| 66 function difference(set1, set2) | 66 function difference(set1, set2) |
| 67 local set = new(); | 67 local set = new(); |
| 68 local items = set.items; | 68 local items = set._items; |
| 69 | 69 |
| 70 for item in pairs(set1.items) do | 70 for item in pairs(set1._items) do |
| 71 items[item] = true; | 71 items[item] = (not set2._items[item]) or nil; |
| 72 end | 72 end |
| 73 | 73 |
| 74 for item in pairs(set2.items) do | 74 return set; |
| 75 items[item] = nil; | 75 end |
| 76 | |
| 77 function intersection(set1, set2) | |
| 78 local set = new(); | |
| 79 local items = set._items; | |
| 80 | |
| 81 set1, set2 = set1._items, set2._items; | |
| 82 | |
| 83 for item in pairs(set1) do | |
| 84 items[item] = (not not set2[item]) or nil; | |
| 76 end | 85 end |
| 77 | 86 |
| 78 return set; | 87 return set; |
| 79 end | 88 end |
| 80 | 89 |
