]> gitweb.factorcode.org Git - factor.git/commitdiff
assocs: faster map>assoc.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 17 Jul 2012 22:28:44 +0000 (15:28 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 17 Jul 2012 22:28:44 +0000 (15:28 -0700)
core/assocs/assocs.factor

index c48a3bc4358b8474dc9921b0f26b237db4c5630f..d59b2534ab936e660668c0505bc97026f80df3bf 100644 (file)
@@ -167,7 +167,12 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
 : inc-at ( key assoc -- ) [ 1 ] 2dip at+ ; inline
 
 : map>assoc ( ... seq quot: ( ... elt -- ... key value ) exemplar -- ... assoc )
-    [ [ 2array ] compose { } map-as ] dip assoc-like ; inline
+    dup sequence? [
+        [ [ 2array ] compose ] dip map-as
+    ] [
+        [ over assoc-size ] dip new-assoc
+        [ [ swapd set-at ] curry compose each ] keep
+    ] if ; inline
 
 : extract-keys ( seq assoc -- subassoc )
     [ [ dupd at ] curry ] keep map>assoc ;