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