51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2013 John Benediktsson
 | 
						|
! See http://factorcode.org/license.txt for BSD license
 | 
						|
 | 
						|
USING: accessors arrays hash-sets kernel sequences sets
 | 
						|
vocabs.loader ;
 | 
						|
 | 
						|
IN: hash-sets.wrapped
 | 
						|
 | 
						|
TUPLE: wrapped-key
 | 
						|
    { underlying read-only } ;
 | 
						|
 | 
						|
TUPLE: wrapped-hash-set
 | 
						|
    { underlying hash-set read-only } ;
 | 
						|
 | 
						|
GENERIC: wrap-key ( key wrapped-hash -- wrapped-key )
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
: wrapper@ ( key wrapped-hash -- wrapped-key hash-set )
 | 
						|
    [ wrap-key ] [ nip underlying>> ] 2bi ; inline
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
M: wrapped-hash-set adjoin
 | 
						|
    wrapper@ adjoin ; inline
 | 
						|
 | 
						|
M: wrapped-hash-set ?adjoin
 | 
						|
    wrapper@ ?adjoin ; inline
 | 
						|
 | 
						|
M: wrapped-hash-set in?
 | 
						|
    wrapper@ in? ; inline
 | 
						|
 | 
						|
M: wrapped-hash-set clear-set
 | 
						|
    underlying>> clear-set ; inline
 | 
						|
 | 
						|
M: wrapped-hash-set delete
 | 
						|
    wrapper@ delete ; inline
 | 
						|
 | 
						|
M: wrapped-hash-set cardinality
 | 
						|
    underlying>> cardinality ; inline
 | 
						|
 | 
						|
M: wrapped-hash-set members
 | 
						|
    underlying>> members [ underlying>> ] map! ;
 | 
						|
 | 
						|
M: wrapped-hash-set equal?
 | 
						|
    over wrapped-hash-set? [ [ underlying>> ] same? ] [ 2drop f ] if ;
 | 
						|
 | 
						|
INSTANCE: wrapped-hash-set set
 | 
						|
 | 
						|
{ "hash-sets.wrapped" "prettyprint" } "hash-sets.wrapped.prettyprint" require-when
 |