\ -*- mode: forth -*- \ $Id: objinst.gforth,v 1.2 2001/06/25 00:22:55 doug Exp $ \ http://www.bagley.org/~doug/shootout/ \ from Anton Ertl: \ I'm using objects.fs here, code using one of the other OO Forth \ extensions will look different. warnings off \ don't complain about redefining catch, state, value 0. argc @ 1- arg >number 2drop drop constant NUM require objects.fs object class selector activate selector value cell% inst-var state m: state ! ;m overrides construct m: state @ ;m overrides value m: state @ invert state ! this ;m overrides activate end-class Toggle Toggle class cell% inst-var count-max cell% inst-var counter m: this [parent] construct count-max ! 0 counter ! ;m overrides construct m: 1 counter +! counter @ count-max @ >= if state @ invert state ! 0 counter ! endif this ;m overrides activate end-class NthToggle : flag. if ." true" else ." false" endif cr ; : mainloop { class n } true class heap-new true n 0 ?do drop dup activate value dup flag. loop drop ; : main Toggle 5 mainloop NUM 0 ?do true Toggle heap-new free drop \ like the C version loop cr 3 NthToggle 8 mainloop NUM 0 ?do 3 true NthToggle heap-new free drop \ like the C version loop ; main bye