// $Id: objinst.ici,v 1.0 2003/01/03 12:00:00 dada Exp $
// http://dada.perl.it/shootout
//
// contributed by Tim Long


static Toggle = [class

    new(start_state)
    {
        t := this:^new();
        t.state := start_state;
        return t;
    }

    activate()
    {
        state = !state;
        return this;
    }
    
    value()
    {
        return state;
    }
];

static NthToggle = [class:Toggle,

    new(start_state, count_max)
    {
        t := this:^new(start_state);
        t.count_max := count_max;
        t.counter := 0;
        return t;
    }

    activate()
    {
        this:^activate();
        if (++counter >= count_max)
        {
            state = !state;
            counter = 0;
        }
        return this;
    }
];

n := argv[1] ? int(argv[1]) : 1;

toggle := Toggle:new(1);
for (i = 0; i < 5; ++i)
    printf(toggle:activate():value() ? "true\n" : "false\n");
    
for (i = 0; i < n; ++i)
    toggle := Toggle:new(1);
    
printf("\n");

ntoggle := NthToggle:new(1, 3);
for (i = 0; i < 8; ++i)
    printf(ntoggle:activate():value() ? "true\n" : "false\n");

for (i = 0; i < n; ++i)
    ntoggle := NthToggle:new(1, 3);