Software /
code /
prosody
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 |
parent | 905:6169597d5574 |
child | 1028: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 |