-- $Id: strcat.lua,v 1.2 2001/01/31 03:38:54 doug Exp $
-- http://www.bagley.org/~doug/shootout/
-- contributed by Roberto Ierusalimschy

-- this version uses a custom string buffer

------------------------------------------------------------------
-- Buffer library
------------------------------------------------------------------

Buffer = {""}

function Buffer:new ()
  local new = {}
  self.__index = self
  setmetatable(new, self)
  return new
end

function Buffer:add (s)
  table.insert(self, s)    -- push 's' into the the stack
  for i=table.getn(self)-1, 1, -1 do
    if string.len(self[i]) > string.len(self[i+1]) then
      break
    end
    self[i] = self[i] .. table.remove(self)
  end
end

function Buffer:close ()
  self[1] = table.concat(self)
  table.setn(self, 1)   -- now there is only one element
  return self[1]
end


------------------------------------------------------------------
-- Test
------------------------------------------------------------------

local n = tonumber((arg and arg[1]) or 1)
local buff = Buffer:new()
for i=1,n do
  buff:add("hello\n")
end
io.write(string.len(buff:close()), "\n")