if sharedluaxstore == nil then sharedluaxstore = { } -- initialize store only once end return function (self, sel, atoms) if type(atoms[1]) == "string" then if sharedluaxstore[atoms[1]] == nil then sharedluaxstore[atoms[1]] = { sel = "bang", msg = { }, count = 1 } else sharedluaxstore[atoms[1]].count = sharedluaxstore[atoms[1]].count + 1 end self.name = atoms[1] self.inlets = 2 self.outlets = 1 self.in_1_bang = function(self) local s = sharedluaxstore[self.name] self:outlet(1, s.sel, s.msg) end self.in_2 = function(self, s, m) local c = sharedluaxstore[self.name].count sharedluaxstore[self.name] = { sel = s, msg = m, count = c } end self.finalize = function (self) sharedluaxstore[self.name].count = sharedluaxstore[self.name].count - 1 if sharedluaxstore[self.name].count == 0 then sharedluaxstore[self.name] = nil end end return true else return false end end