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 ;