diff --git a/lib/core/environ.ex b/lib/core/environ.ex index 838be12..bc31981 100644 --- a/lib/core/environ.ex +++ b/lib/core/environ.ex @@ -8,7 +8,7 @@ defmodule Scopes.Core.Environ do require Logger defmodule State do - defstruct [cells: %{}, init_seq: []] + defstruct [init_seq: []] end def cells(), do: @cell_registry @@ -30,11 +30,11 @@ defmodule Scopes.Core.Environ do :ignore end - def proc_env(msg, scope = {state, _proc, _syns, env}) do + def proc_env(msg, scope) do case Shape.head(msg) do - {:exec, func} -> func.(state) + {:exec, func} -> func.() [:csys, :created | _rest] -> process_created(msg, scope) - _ -> send(env, msg) # forward message to application + _ -> send(Core.env(scope), msg) # forward message to application end end @@ -42,20 +42,14 @@ defmodule Scopes.Core.Environ do data = Shape.data(msg) new = data.new addr = data[:addr] - cells = if addr do + if addr do Actor.register(new, cells(), addr) - {dom, cat, item} = addr - Map.update(state.cells, {dom, cat}, %{item => new}, - fn x -> Map.put(x, item, new) end) - else - state.cells end {step, seq} = List.pop_at(state.init_seq, 0) - state1 = %State{cells: cells, init_seq: seq} + state1 = %State{init_seq: seq} Core.update({state1, proc, syns, env}) if step do Process.sleep(1) - #step.(state1) step.() end end @@ -78,27 +72,15 @@ defmodule Scopes.Core.Environ do Core.send_message(rcvr, head, data) end + def send_value(addr, value) do + send_message(addr, ~w(csys data)a, %{value: value}) + end + def connect(addr = {dom, _cat, _item}, target, op \\ []) do send_message(addr, [dom, :connect], %{target: get_cell(target), op: op}) end - # accessing cell registry via state.cells - - def get_cell(state, {dom, cat, item}) do - get_in(state.cells, [{dom, cat}, item]) - end - - def send_message(state, addr, head, data) do - cell = get_cell(state, addr) - Core.send_message(cell, head, data) - end - - def connect_state(state, addr, target, op \\ []) do - send_message(state, addr, ~w(csys connect)a, - %{target: get_cell(state, target), op: op}) - end - # delegating tasks to env def delegate(env, func) do @@ -106,6 +88,6 @@ defmodule Scopes.Core.Environ do end def forward_value(env, addr, value) do - delegate(env, &send_message(&1, addr, ~w(csys data)a, %{value: value})) + delegate(env, fn -> send_message(addr, ~w(csys data)a, %{value: value}) end) end end diff --git a/test/core/core_test.exs b/test/core/core_test.exs index f61ec0f..778601c 100644 --- a/test/core/core_test.exs +++ b/test/core/core_test.exs @@ -18,14 +18,14 @@ defmodule Scopes.CoreTest do describe "core-basic:" do test "minimal-b1" do Environ.setup(Program.prepare_basic(), Program.init_seq_b1()) - Process.sleep(5) - env = Environ.get_cell({:env, :c00}) - Environ.forward_value(env, {:csys, :c00, "0-0"}, 0) + Process.sleep(10) + _env = Environ.get_cell({:env, :c00}) + Environ.send_value({:csys, :c00, "0-0"}, 0) assert 0 = receive_data().value - Environ.forward_value(env, {:csys, :s01, "1-0"}, 1) + Environ.send_value({:csys, :s01, "1-0"}, 1) assert receive_data().value == 1 #assert receive_data().value in [-1, 1] - Environ.forward_value(env, {:csys, :s01, "1-1"}, 3) + Environ.send_value({:csys, :s01, "1-1"}, 3) assert receive_data().value in [2, 3] assert receive_data().value in [2, 3] refute_receive msg, 5, "unhandled message(s): #{inspect(msg)}" @@ -33,11 +33,11 @@ defmodule Scopes.CoreTest do test "recursive-1" do Environ.setup(Program.prepare_basic(), Program.init_recursive_1()) - Process.sleep(5) - env = Environ.get_cell({:env, :c00}) - Environ.forward_value(env, {:csys, :s01, "1-1"}, 42) + Process.sleep(10) + _env = Environ.get_cell({:env, :c00}) + Environ.send_value({:csys, :s01, "1-1"}, 42) assert receive_data().value == 42 - Environ.forward_value(env, {:csys, :s01, "1-1"}, 47) + Environ.send_value({:csys, :s01, "1-1"}, 47) assert receive_data().value == 5 refute_receive msg, 5, "unhandled message(s): #{inspect(msg)}" end