Z1maV1

Lua StringBuilder

Aug 18th, 2024
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.42 KB | None | 0 0
  1. local table = table;
  2.  
  3. local stringBuilder = {}
  4.  
  5. setmetatable(stringBuilder, {
  6.     __call = function (self, ...)
  7.         return self:create(...)
  8.     end, })
  9.  
  10. local stringBuilder_mt = {
  11.     __index = stringBuilder,
  12.  
  13.     __add = function (self, ...)
  14.         return self:append(...)
  15.     end,
  16.  
  17.     __concat = function (self, ...)
  18.         return self:append(...)
  19.     end,
  20.  
  21.     __tostring = function (self)
  22.         return self:toString()
  23.     end
  24. }
  25.  
  26. function stringBuilder:init(...)
  27.     local obj = {
  28.         accumulator = {}
  29.     }
  30.     setmetatable(obj, stringBuilder_mt)
  31.     return obj
  32. end
  33.  
  34. function stringBuilder:create(...)
  35.     return self:init(...)
  36. end
  37.  
  38. function stringBuilder:is_empty()
  39.     return #self.accumulator == 0;
  40. end
  41.  
  42. function stringBuilder:clear()
  43.     self.accumulator = {}
  44.     return self
  45. end
  46.  
  47. function stringBuilder:append(other)
  48.     if type(other) == "string" then
  49.         table.insert(self.accumulator, other)
  50.  
  51.     elseif type(other) == "table" then
  52.         if other.accumulator == nil then
  53.             return self
  54.         end
  55.  
  56.         for _, v in ipairs(self.accumulator) do
  57.             table.insert(self.accumulator, v)
  58.         end
  59.     end
  60.  
  61.     return self
  62. end
  63.  
  64. function stringBuilder:toString(sep)
  65.     sep = sep or ""
  66.     return table.concat(self.accumulator, sep)
  67. end
  68.  
  69. function stringBuilder:str()
  70.     return table.concat(self.accumulator)
  71. end
  72.  
  73. return stringBuilder
Advertisement
Add Comment
Please, Sign In to add comment