]> gitweb.factorcode.org Git - factor.git/commitdiff
linked-assocs passes tests
authorJames Cash <james.nvc@gmail.com>
Sat, 8 Nov 2008 07:18:03 +0000 (02:18 -0500)
committerJames Cash <james.nvc@gmail.com>
Tue, 11 Nov 2008 07:33:18 +0000 (02:33 -0500)
basis/linked-assocs/linked-assocs.factor

index f9849324dfb7e8eed90619b23c0a641dc1c180c6..ee29869dfddaab4dac22f920478232d8787a246a 100644 (file)
@@ -10,25 +10,22 @@ TUPLE: linked-assoc assoc dlist ;
 
 M: linked-assoc assoc-size assoc>> assoc-size ;
 
-M: linked-assoc at* assoc>> at* tuck [ obj>> ] when swap ;
+M: linked-assoc at* assoc>> at* tuck [ obj>> ] when second swap ;
+
+M: linked-assoc delete-at
+    [ [ assoc>> ] [ dlist>> ] bi [ at ] dip '[ _ delete-node ] when* ]
+    [ assoc>> delete-at ]
+    2bi ;
 
 <PRIVATE
 : add-to-dlist ( value key lassoc -- node )
     [ swap 2array ] dip dlist>> push-back* ;
-
-: remove-from-dlist ( key dlist -- )
-    swap '[ _ = ] delete-node-if ;
 PRIVATE>
 
 M: linked-assoc set-at
-    [ add-to-dlist ] 2keep
+    [ 2dup assoc>> key? [ 2dup delete-at  ] when add-to-dlist ] 2keep
     assoc>> set-at ;
 
-M: linked-assoc delete-at
-    [ [ assoc>> ] [ dlist>> ] bi [ at ] dip '[ _ delete-node ] when* ]
-    [ assoc>> delete-at ]
-    2bi ;
-
 : dlist>seq ( dlist -- seq )
     [ ] pusher [ dlist-each ] dip ;