Compare commits
2 commits
eb0954eeee
...
311261cd02
| Author | SHA1 | Date | |
|---|---|---|---|
| 311261cd02 | |||
| d4f58655ca |
2 changed files with 30 additions and 12 deletions
|
|
@ -63,7 +63,7 @@ defmodule Scopes.Core do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def data_only(), do: filter_head([:csys, :data])
|
def data_only(dom \\ :csys), do: filter_head([dom, :data])
|
||||||
|
|
||||||
# send shortcuts
|
# send shortcuts
|
||||||
|
|
||||||
|
|
@ -72,14 +72,15 @@ defmodule Scopes.Core do
|
||||||
Actor.send(rcvr, Shape.create(head, data: data))
|
Actor.send(rcvr, Shape.create(head, data: data))
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_value(rcvr, val) do
|
def send_value(rcvr, val, dom \\ :csys) do
|
||||||
send_message(rcvr, [:csys, :data], %{value: val})
|
send_message(rcvr, [dom, :data], %{value: val})
|
||||||
end
|
end
|
||||||
|
|
||||||
# notifications
|
# notifications
|
||||||
|
|
||||||
def notify_created(msg, new, scope) do
|
def notify_created(msg, new, scope) do
|
||||||
msg1 = Shape.create(~w(csys created)a,
|
[dom | _rest] = Shape.head(msg)
|
||||||
|
msg1 = Shape.create([dom, :created],
|
||||||
data: Map.merge(Shape.data(msg), %{old: self(), new: new}))
|
data: Map.merge(Shape.data(msg), %{old: self(), new: new}))
|
||||||
notify(msg1, scope)
|
notify(msg1, scope)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,11 @@ defmodule Scopes.Core.Environ do
|
||||||
end
|
end
|
||||||
|
|
||||||
def setup({state, proc}, init_seq, proc_env \\ &proc_env/2) do
|
def setup({state, proc}, init_seq, proc_env \\ &proc_env/2) do
|
||||||
Registry.start_link(keys: :unique, name: cells())
|
Registry.start_link(keys: :duplicate, name: cells())
|
||||||
env_scope = {%State{init_seq: init_seq}, proc_env, [], self()}
|
env_scope = {%State{init_seq: init_seq}, proc_env, [], self()}
|
||||||
env = Core.neuron(env_scope)
|
env = Core.neuron(env_scope)
|
||||||
Actor.register(env, cells(), {:env, :c00})
|
#Actor.register(env, cells(), {:env, :c00})
|
||||||
|
register(env, {:env, :c00})
|
||||||
msg = Shape.create([:csys, :zero], data: %{addr: {:csys, :c00, "0-0"}})
|
msg = Shape.create([:csys, :zero], data: %{addr: {:csys, :c00, "0-0"}})
|
||||||
scope = {state, proc, [], env}
|
scope = {state, proc, [], env}
|
||||||
Core.create(msg, scope)
|
Core.create(msg, scope)
|
||||||
|
|
@ -43,7 +44,8 @@ defmodule Scopes.Core.Environ do
|
||||||
new = data.new
|
new = data.new
|
||||||
addr = data[:addr]
|
addr = data[:addr]
|
||||||
if addr do
|
if addr do
|
||||||
Actor.register(new, cells(), addr)
|
#Actor.register(new, cells(), addr)
|
||||||
|
register(new, addr)
|
||||||
end
|
end
|
||||||
{step, seq} = List.pop_at(state.init_seq, 0)
|
{step, seq} = List.pop_at(state.init_seq, 0)
|
||||||
state1 = %State{init_seq: seq}
|
state1 = %State{init_seq: seq}
|
||||||
|
|
@ -56,14 +58,29 @@ defmodule Scopes.Core.Environ do
|
||||||
|
|
||||||
# accessing cell registry
|
# accessing cell registry
|
||||||
|
|
||||||
|
def register(cell, {dom, cat}) do
|
||||||
|
Actor.register(cell, cells(), {dom, cat})
|
||||||
|
end
|
||||||
|
|
||||||
|
def register(cell, {dom, cat, item}) do
|
||||||
|
Actor.register(cell, cells(), {dom, cat}, item)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_cells(addr) do
|
||||||
|
case addr do
|
||||||
|
{dom, cat, item} -> Registry.match(cells(), {dom, cat}, item)
|
||||||
|
_ -> Registry.lookup(cells(), addr)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def get_cell(addr) do
|
def get_cell(addr) do
|
||||||
data = Registry.lookup(cells(), addr)
|
cells = get_cells(addr)
|
||||||
if data do
|
if cells == [] do
|
||||||
[{cell, _val}] = data
|
|
||||||
cell
|
|
||||||
else
|
|
||||||
Logger.warning "No cell found at address #{inspect(addr)}!"
|
Logger.warning "No cell found at address #{inspect(addr)}!"
|
||||||
nil
|
nil
|
||||||
|
else
|
||||||
|
[{cell, _val}] = cells
|
||||||
|
cell
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue