csys: first try registering neuron creation in env
This commit is contained in:
parent
66abbe44f5
commit
63df25d65f
2 changed files with 13 additions and 8 deletions
|
|
@ -1,6 +1,7 @@
|
|||
defmodule Scopes.CSys.Environ do
|
||||
|
||||
alias Scopes.CSys
|
||||
alias Scopes.Shape
|
||||
|
||||
def setup({state, proc}) do
|
||||
env = CSys.neuron({[], &proc_env/2, [], self()})
|
||||
|
|
@ -8,6 +9,15 @@ defmodule Scopes.CSys.Environ do
|
|||
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
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ defmodule Scopes.CSys.Program do
|
|||
basic(msg, scope)
|
||||
end
|
||||
|
||||
def basic(msg = {head, _info}, scope) do
|
||||
case head do
|
||||
def basic(msg, scope) do
|
||||
case Shape.head(msg) do
|
||||
[:csys, :connect | _rest] -> connect(msg, scope)
|
||||
[:csys, :create, :succ | _rest] -> create_succ(msg, scope)
|
||||
[:csys, :create, :pred | _rest] -> create_pred(msg, scope)
|
||||
|
|
@ -66,10 +66,6 @@ defmodule Scopes.CSys.Program do
|
|||
end
|
||||
end
|
||||
|
||||
def basic(msg, scope) do
|
||||
CSys.forward(msg, scope) || CSys.notify(msg, scope)
|
||||
end
|
||||
|
||||
# helper functions
|
||||
|
||||
def restart({state, _proc, syns, env}) do
|
||||
|
|
@ -86,8 +82,7 @@ defmodule Scopes.CSys.Program do
|
|||
def connect(msg, {state, proc, syns, env}) do
|
||||
data = Shape.data(msg)
|
||||
op = data[:op] || CSys.noop()
|
||||
target = data[:target]
|
||||
syn = synapse(target, op, 0)
|
||||
syn = synapse(data[:target], op, 0)
|
||||
update_neuron({state, proc, [syn | syns], env})
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue