-- $Id: methcall.lua,v 1.2 2000/12/24 22:04:51 doug Exp $
-- http://www.bagley.org/~doug/shootout/
-- set up a simple object inheritance
settagmethod(tag{}, "index", function (object, field)
if field == "parent" then return nil end
if type(object.parent) ~= "table" then return nil end
return object.parent[field]
end)
--------------------------------------------------------------
-- Toggle module
--------------------------------------------------------------
function new_Toggle(start_state)
return {
bool = start_state,
value = function (self)
return self.bool
end,
activate = function(self)
self.bool = not self.bool
return self
end,
}
end
--------------------------------------------------------------
-- NthToggle module
--------------------------------------------------------------
function new_NthToggle(start_state, max_counter)
return {
parent = new_Toggle(start_state),
count_max = max_counter,
counter = 0,
activate = function (self)
self.counter = self.counter + 1
if self.counter >= self.count_max then
self.parent:activate()
self.counter = 0
end
return self
end
}
end
-----------------------------------------------------------
-- main
-----------------------------------------------------------
function main ()
local N = tonumber((arg and arg[1])) or 1
local val = 1
local toggle = new_Toggle(val)
for i=1,N do
val = toggle:activate():value()
end
if toggle:value() then write("true\n") else write("false\n") end
val = 1
local ntoggle = new_NthToggle(val, 3)
for i=1,N do
val = ntoggle:activate():value()
end
if ntoggle:value() then write("true\n") else write("false\n") end
end
main()