aboutsummaryrefslogtreecommitdiff
path: root/examples/shared.pd_luax
diff options
context:
space:
mode:
Diffstat (limited to 'examples/shared.pd_luax')
-rw-r--r--examples/shared.pd_luax33
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/shared.pd_luax b/examples/shared.pd_luax
new file mode 100644
index 0000000..93881fe
--- /dev/null
+++ b/examples/shared.pd_luax
@@ -0,0 +1,33 @@
+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