-- $Id: strcat.lua,v 1.2 2001/01/31 03:38:54 doug Exp $ -- http://www.bagley.org/~doug/shootout/ -- from Roberto Ierusalimschy -- this version uses a custom string buffer ------------------------------------------------------------------ -- Buffer library ------------------------------------------------------------------ Buffer = {n=0} function Buffer:new () local new = {} for k,v in self do new[k] = v end return new end function Buffer:add (s) tinsert(self, s) local i = self.n for i=self.n-1, 1, -1 do if strlen(self[i]) > strlen(self[i+1]) then break end local top = tremove(self) self[i] = self[i]..top end end function Buffer:close () for i=self.n-1, 1, -1 do local top = tremove(self) self[i] = self[i]..top end 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 write(strlen(buff:close()), "\n")