]> gitweb.factorcode.org Git - factor.git/commitdiff
sets: fix performance regression in all-unique? word
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 13 Apr 2010 11:43:29 +0000 (04:43 -0700)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 13 Apr 2010 11:43:47 +0000 (04:43 -0700)
core/hash-sets/hash-sets.factor
core/sets/sets.factor

index b4bf9a1aef049f5d2a5b2e58fbe4c00b1f623f6e..3ca2cce93ca195dc5cf1019a8ee03c6897a8bad8 100644 (file)
@@ -16,13 +16,22 @@ 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 <hash-set> ] unless ;
-M: hash-set clone
-    table>> clone hash-set boa ;
+M: hash-set set-like drop dup hash-set? [ members <hash-set> ] unless ;
+M: hash-set clone table>> clone hash-set boa ;
 
 M: sequence fast-set <hash-set> ;
 M: f fast-set drop H{ } clone hash-set boa ;
 
 M: sequence duplicates
     f fast-set [ [ in? ] [ adjoin ] 2bi ] curry filter ;
+
+<PRIVATE
+
+: (all-unique?) ( elt hash -- ? )
+    2dup in? [ 2drop f ] [ adjoin t ] if ; inline
+
+PRIVATE>
+
+M: sequence all-unique?
+    dup length <hashtable> hash-set boa
+    [ (all-unique?) ] curry all? ;
index 3f441f9239d81a435fe3e46e318bbab4e7009c36..d279f036d4fcc8afc3719d0ab95a2fd609f21237 100644 (file)
@@ -92,9 +92,6 @@ M: sequence set-like
 M: sequence members
     [ pruned ] keep like ;
 
-M: sequence all-unique?
-    dup pruned sequence= ;
-
 : combine ( sets -- set )
     [ f ]
     [ [ [ members ] map concat ] [ first ] bi set-like ]