23 lines
543 B
Elixir
23 lines
543 B
Elixir
defmodule Scopes.CSys.Environ do
|
|
|
|
alias Scopes.CSys
|
|
alias Scopes.Shape
|
|
|
|
def setup({state, proc}) do
|
|
env = CSys.neuron({[], &proc_env/2, [], self()})
|
|
CSys.neuron({state, proc, [], 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_neuron({[new | state], proc, syns, env})
|
|
end
|
|
end
|