# HG changeset patch # User Matthew Wild # Date 1237772962 0 # Node ID f12f88b3d4a181a2d20b41101ad6e81e09e9a06e # Parent f0743928ef7e417d997bce2f826a2b0ee4144447 util.set: Rename private items container, optimise set.difference() and add set.intersection() diff -r f0743928ef7e -r f12f88b3d4a1 util/set.lua --- a/util/set.lua Mon Mar 23 00:31:29 2009 +0000 +++ b/util/set.lua Mon Mar 23 01:49:22 2009 +0000 @@ -5,7 +5,7 @@ function new(list) local items = {}; - local set = { items = items }; + local set = { _items = items }; function set:add(item) items[item] = true; @@ -50,13 +50,13 @@ function union(set1, set2) local set = new(); - local items = set.items; + local items = set._items; - for item in pairs(set1.items) do + for item in pairs(set1._items) do items[item] = true; end - for item in pairs(set2.items) do + for item in pairs(set2._items) do items[item] = true; end @@ -65,14 +65,23 @@ function difference(set1, set2) local set = new(); - local items = set.items; + local items = set._items; - for item in pairs(set1.items) do - items[item] = true; + for item in pairs(set1._items) do + items[item] = (not set2._items[item]) or nil; end - for item in pairs(set2.items) do - items[item] = nil; + return set; +end + +function intersection(set1, set2) + local set = new(); + local items = set._items; + + set1, set2 = set1._items, set2._items; + + for item in pairs(set1) do + items[item] = (not not set2[item]) or nil; end return set;