diff --git a/lua/wire/server/wirelib.lua b/lua/wire/server/wirelib.lua index b3c09aa3f3..8d4a268622 100644 --- a/lua/wire/server/wirelib.lua +++ b/lua/wire/server/wirelib.lua @@ -898,25 +898,34 @@ do -- class OutputIterator OutputIterator.__index = OutputIterator function OutputIterator:Add(ent, iname, value) - table.insert(self, { Entity = ent, IName = iname, Value = value }) + local last = self.last + 1 + + self.last = last + self[last] = { Entity = ent, IName = iname, Value = value } end function OutputIterator:Process() if self.Processing then return end -- should not occur self.Processing = true - while #self > 0 do - local nextelement = self[1] - table.remove(self, 1) + while self.first <= self.last do + local first = self.first + local nextelement = self[first] + + self[first] = nil + self.first = first + 1 WireLib.TriggerInput(nextelement.Entity, nextelement.IName, nextelement.Value, self) end + self.first = 1 + self.last = 0 + self.Processing = nil end function WireLib.CreateOutputIterator() - return setmetatable({}, OutputIterator) + return setmetatable({ first = 1, last = 0 }, OutputIterator) end end -- class OutputIterator