| /* |
| Copyright (c) 2004-2006, The Dojo Foundation |
| All Rights Reserved. |
| |
| Licensed under the Academic Free License version 2.1 or above OR the |
| modified BSD license. For more information on Dojo licensing, see: |
| |
| http://dojotoolkit.org/community/licensing.shtml |
| */ |
| |
| dojo.provide("dojo.collections.Set"); |
| dojo.require("dojo.collections.Collections"); |
| dojo.require("dojo.collections.ArrayList"); |
| |
| dojo.collections.Set = new function(){ |
| // summary |
| // Singleton for dealing with common set operations. |
| this.union = function(/* array */setA, /* array */setB){ |
| // summary |
| // Return the union of the two passed sets. |
| if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA); |
| if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB); |
| if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections."); |
| var result = new dojo.collections.ArrayList(setA.toArray()); |
| var e = setB.getIterator(); |
| while(!e.atEnd()){ |
| var item=e.get(); |
| if(!result.contains(item)){ |
| result.add(item); |
| } |
| } |
| return result; // dojo.collections.ArrayList |
| }; |
| this.intersection = function(/* array */setA, /* array */setB){ |
| // summary |
| // Return the intersection of the two passed sets. |
| if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA); |
| if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB); |
| if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections."); |
| var result = new dojo.collections.ArrayList(); |
| var e = setB.getIterator(); |
| while(!e.atEnd()){ |
| var item=e.get(); |
| if(setA.contains(item)){ |
| result.add(item); |
| } |
| } |
| return result; // dojo.collections.ArrayList |
| }; |
| this.difference = function(/* array */setA, /* array */setB){ |
| // summary |
| // Returns everything in setA that is not in setB. |
| if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA); |
| if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB); |
| if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections."); |
| var result = new dojo.collections.ArrayList(); |
| var e=setA.getIterator(); |
| while(!e.atEnd()){ |
| var item=e.get(); |
| if(!setB.contains(item)){ |
| result.add(item); |
| } |
| } |
| return result; // dojo.collections.ArrayList |
| }; |
| this.isSubSet = function(/* array */setA, /* array */setB) { |
| // summary |
| // Returns if set B is a subset of set A. |
| if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA); |
| if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB); |
| if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections."); |
| var e = setA.getIterator(); |
| while(!e.atEnd()){ |
| if(!setB.contains(e.get())){ |
| return false; // boolean |
| } |
| } |
| return true; // boolean |
| }; |
| this.isSuperSet = function(/* array */setA, /* array */setB){ |
| // summary |
| // Returns if set B is a superset of set A. |
| if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA); |
| if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB); |
| if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections."); |
| var e = setB.getIterator(); |
| while(!e.atEnd()){ |
| if(!setA.contains(e.get())){ |
| return false; // boolean |
| } |
| } |
| return true; // boolean |
| }; |
| }(); |