/utilassocs.txt
\ Key->value associations                                            vandys
only extensions definitions

Collection -> subclass: Assocs ivars:
   intcell keys   intcell vals   endivars

Assocs -> class -> :method new { self -- }
   List -> new self Assocs>keys !
   List -> new self Assocs>vals !   method;
Assocs -> :method indexOf { key self -- idx T | F }
   key   self Assocs>keys @ -> indexOf   method;

Assocs -> :method ! { val key self -- }
   self Assocs>keys @   self Assocs>vals @ { keys vals }
   key keys -> indexOf if   ( idx ) val swap   vals -> !   exit then
   key keys -> add   val vals -> add   method;

Assocs -> :method @ { key self -- val }
   key self Assocs>keys @ -> indexOf if
      ( idx ) Assocs>vals @ -> @   exit then
   1 abort" Not present"   method;

Assocs -> :method size ( self -- u )   Assocs>keys @ -> size   method;


\ Key->value associations, iteration, display                        vandys

Assocs -> :method do { arg fn self -- }
   self Assocs>keys @   self Assocs>vals @ { keys vals }
   keys -> size   0 ?do
      arg   i vals -> @   i keys -> @   fn execute
   loop   method;

: (.assoc) ( arg val key -- )   1 u.r   ." ->"   1 u.r space
   drop ; scrLocal
Assocs -> :method . { self -- }   self -> .class   ." {"
   0   ['] (.assoc)   self -> do   ." }"   method;