ex-scopes/lib/csys/environ.ex

25 lines
592 B
Elixir

defmodule Scopes.CSys.Environ do
alias Scopes.CSys
alias Scopes.Shape
def setup({state, proc}) do
scope = {[], &proc_env/2, [], self()}
env = CSys.neuron(scope)
CSys.create(Shape.create([:csys, :zero]), {state, proc, [], env})
env
end
def proc_env(msg, scope) do
case Shape.head(msg) do
[:csys, :created | _rest] -> register_creation(msg, scope)
_ -> nil
end
send(CSys.env(scope), msg)
end
def register_creation(msg, {state, proc, syns, env}) do
new = Shape.data(msg).new
CSys.update({[new | state], proc, syns, env})
end
end