| 
					
				 | 
			
			
				@@ -1822,7 +1822,23 @@ Collection subclass: #Set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	instanceVariableNames: 'defaultBucket slowBucketStores fastBuckets size' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	package: 'Kernel-Collections'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !Set commentStamp! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-I represent an unordered set of objects without duplicates.! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I represent an unordered set of objects without duplicates. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## Implementation notes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I put an element to different stores based on its type. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The goal is to store some elements into native JS object property names to be fast. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+If an unboxed element has typeof 'string', 'boolean' or 'number', or an element is nil, null or undefined, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I store it as a property name in an empty (== Object.create(null)) JS object, different for each type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(for simplicity, nil/null/undefined is treated as one and included with the two booleans). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+If element happen to be an object, I try to store them in ArrayBucketStore. I have two of them by default, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+one hashed using Smalltalk class name, other using JS constructor name. It is possible to have more or less 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+of ArrayBucketStores, see #initializeSlowBucketStores. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As a last resort, if none of the ArrayBucketStore can find suitable bucket, the defaultBucket is used, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which is an Array.! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !Set methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |