cell registry: use {dom, cat} as key to allow query by category
This commit is contained in:
parent
eb0954eeee
commit
d4f58655ca
1 changed files with 25 additions and 8 deletions
|
|
@ -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