! Copyright (C) 2010 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: accessors assocs hashtables kernel sets sequences parser ; QUALIFIED: sets IN: hash-sets ! In a better implementation, less memory would be used TUPLE: hash-set { table hashtable read-only } ; : ( members -- hash-set ) H{ } clone [ [ dupd set-at ] curry each ] keep hash-set boa ; INSTANCE: hash-set set M: hash-set in? table>> key? ; inline M: hash-set adjoin table>> dupd set-at ; inline M: hash-set delete table>> delete-at ; inline M: hash-set members table>> keys ; inline M: hash-set set-like drop dup hash-set? [ members ] unless ; M: hash-set clone table>> clone hash-set boa ; M: hash-set null? table>> assoc-empty? ; M: sequence fast-set ; M: f fast-set drop H{ } clone hash-set boa ; M: sequence duplicates f fast-set [ [ in? ] [ adjoin ] 2bi ] curry filter ; M: sequence all-unique? dup length hash-set boa [ (all-unique?) ] curry all? ;