%%% $Id: objinst.oz,v 1.0 2002/08/19 16:16:00 dada Exp $
%%% http://dada.perl.it/shootout/
%%%
%%% contributed by Isaac Gouy
%% Uses local variables within the Object Instantiation
%% loops. It might be quicker to create a Cell outside
%% of the loop and use {Assign T {New Toggle init(true)}}
%%
%% Usage: start from command line with
%% ozc -x objinst.oz -o objinst.oz.exe
%% objinst.oz.exe 1000000
functor
import System Application
define
class Toggle
attr state: true
meth state(V)
V = @state
end
meth activate
state <- {Not @state}
end
meth init(State)
state <- State
end
end
class NthToggle from Toggle
attr trigger:0 count:0
meth activate
count <- @count + 1
if @count >= @trigger then
state <- {Not @state}
count <- 0
end
end
meth init(State Trigger)
Toggle,init(State)
trigger <- Trigger
count <- 0
end
end
proc {ShowBool X}
if X then {System.showInfo "true"}
else {System.showInfo "false"} end
end
in
local Args N T1 T2 in
[Args] = {Application.getArgs plain}
N = {String.toInt Args}
T1 = {New Toggle init(true)}
for I in 1..5 do
local V in {T1 activate}{T1 state(V)}{ShowBool V} end
end
{System.showInfo ""}
for I in 1..N do
local T in T = {New Toggle init(true)} end
end
T2 = {New NthToggle init(true 3)}
for I in 1..8 do
local V in {T2 activate}{T2 state(V)}{ShowBool V} end
end
{System.showInfo ""}
for I in 1..N do
local T in T = {New NthToggle init(true 3)} end
end
end
{Application.exit 0}
end