]> gitweb.factorcode.org Git - factor.git/commitdiff
hash-sets: speed up union on two hash-sets.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 23 Mar 2013 21:17:10 +0000 (14:17 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 23 Mar 2013 21:17:10 +0000 (14:17 -0700)
core/hash-sets/hash-sets.factor

index a094c015b23ce2b4d40a10d132ccfd2b39879ab4..5964144e6ac7d58b3cdfee29fecd783bb58aecb8 100644 (file)
@@ -134,11 +134,19 @@ M: hash-set set-like
 
 INSTANCE: hash-set set
 
-M: hash-set intersect small/large sequence/tester filter >hash-set ;
+M: hash-set intersect
+    small/large sequence/tester filter >hash-set ;
 
-M: hash-set union (union) >hash-set ;
+M: hash-set union
+    over hash-set? [
+        small/large [ array>> ] [ clone ] bi*
+        [ [ adjoin ] curry each-member ] keep
+    ] [
+        (union) >hash-set
+    ] if ;
 
-M: hash-set diff sequence/tester [ not ] compose filter >hash-set ;
+M: hash-set diff
+    sequence/tester [ not ] compose filter >hash-set ;
 
 M: f fast-set drop 0 <hash-set> ;