2008-02-02 00:47:37 -05:00
|
|
|
USING: assocs kernel vectors sequences namespaces ;
|
2008-01-10 21:49:42 -05:00
|
|
|
IN: assocs.lib
|
|
|
|
|
|
|
|
: >set ( seq -- hash )
|
|
|
|
[ dup ] H{ } map>assoc ;
|
|
|
|
|
2008-01-18 00:51:03 -05:00
|
|
|
: ref-at ( table key -- value ) swap at ;
|
2008-01-10 21:49:42 -05:00
|
|
|
|
2008-01-18 00:51:03 -05:00
|
|
|
: put-at* ( table key value -- ) swap rot set-at ;
|
2008-01-10 21:49:42 -05:00
|
|
|
|
2008-01-18 00:51:03 -05:00
|
|
|
: put-at ( table key value -- table ) swap pick set-at ;
|
2008-01-10 21:49:42 -05:00
|
|
|
|
2008-01-18 00:51:03 -05:00
|
|
|
: set-assoc-stack ( value key seq -- )
|
2008-01-28 00:30:24 -05:00
|
|
|
dupd [ key? ] with find-last nip set-at ;
|
2008-01-10 21:49:42 -05:00
|
|
|
|
|
|
|
: at-default ( key assoc -- value/key )
|
|
|
|
dupd at [ nip ] when* ;
|
2008-01-16 16:25:29 -05:00
|
|
|
|
2008-02-25 15:53:18 -05:00
|
|
|
: replace-at ( assoc value key -- assoc )
|
|
|
|
>r >r dup r> 1vector r> rot set-at ;
|
|
|
|
|
2008-02-02 00:47:37 -05:00
|
|
|
: insert-at ( value key assoc -- )
|
|
|
|
[ ?push ] change-at ;
|
|
|
|
|
2008-02-25 15:53:18 -05:00
|
|
|
: peek-at* ( assoc key -- obj ? )
|
|
|
|
swap at* dup [ >r peek r> ] when ;
|
2008-02-02 00:47:37 -05:00
|
|
|
|
2008-02-25 15:53:18 -05:00
|
|
|
: peek-at ( assoc key -- obj )
|
2008-02-02 00:47:37 -05:00
|
|
|
peek-at* drop ;
|
|
|
|
|
|
|
|
: >multi-assoc ( assoc -- new-assoc )
|
|
|
|
[ 1vector ] assoc-map ;
|
|
|
|
|
|
|
|
: multi-assoc-each ( assoc quot -- )
|
|
|
|
[ with each ] curry assoc-each ; inline
|
|
|
|
|
|
|
|
: insert ( value variable -- ) namespace insert-at ;
|