// -*- mode: c++ -*-
// $Id: objinst.g++,v 1.10 2001/10/09 23:52:37 doug Exp $
// http://www.bagley.org/~doug/shootout/
// benchmark results (amd 2400+ "barton", n=1000000):
// java: ~ 0.08s
// visualc++-6: ~ 0.40s
// java(nojit): ~ 0.74s (to my suprise the -Xint option had a serious impact on the object instanciation rate)
// g++: ~ 1,01s
// tkscript: ~ 2,3s
// python: ~ 4.7s
// perl: ~13,10s
//
// python2.3 for win32, perl5.8.0 for cygwin, tks 0.8.7.3 (compiled with optimizing MSVC)
//
// benchmark results (g4 800, apple macosX 10.33, 768MB RAM, n=1000000)
// tkscript: ~9s
class Toggle {
init(int start_state) { state=start_state; }
value() { return state; }
activate() {
state = !state;
return this;
}
int state;
}
class NthToggle : Toggle {
init(int start_state, int max_counter) {
Toggle::init(start_state);
count_max=max_counter;
counter=0;
}
activate() {
if (++counter >= count_max) {
state = !state;
counter = 0;
}
return this;
}
int count_max;
int counter;
}
function main() {
int i,n = (Arguments.numElements==1) ? Arguments[0] : 1000000;
Toggle toggle1 <= new Toggle; toggle1.init(true);
loop(5) {
print ((toggle1.activate().value()) ? "true" : "false");
}
toggle1<=null;
loop(n) {
Toggle toggle <= new Toggle; toggle.init(true);
}
print "";
NthToggle ntoggle1 <= new NthToggle; ntoggle1.init(true, 3);
loop(8) {
print ((ntoggle1.activate().value()) ? "true" : "false");
}
ntoggle1<=null;
loop(n) {
NthToggle ntoggle <= new NthToggle; ntoggle.init(true, 3);
}
}