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
|
||||
|
||||
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 = 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"}})
|
||||
scope = {state, proc, [], env}
|
||||
Core.create(msg, scope)
|
||||
|
|
@ -43,7 +44,8 @@ defmodule Scopes.Core.Environ do
|
|||
new = data.new
|
||||
addr = data[:addr]
|
||||
if addr do
|
||||
Actor.register(new, cells(), addr)
|
||||
#Actor.register(new, cells(), addr)
|
||||
register(new, addr)
|
||||
end
|
||||
{step, seq} = List.pop_at(state.init_seq, 0)
|
||||
state1 = %State{init_seq: seq}
|
||||
|
|
@ -55,15 +57,30 @@ defmodule Scopes.Core.Environ do
|
|||
end
|
||||
|
||||
# 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
|
||||
data = Registry.lookup(cells(), addr)
|
||||
if data do
|
||||
[{cell, _val}] = data
|
||||
cell
|
||||
else
|
||||
cells = get_cells(addr)
|
||||
if cells == [] do
|
||||
Logger.warning "No cell found at address #{inspect(addr)}!"
|
||||
nil
|
||||
else
|
||||
[{cell, _val}] = cells
|
||||
cell
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue