Current section

Files

Jump to
wongi_engine lib wongi engine beta root.ex
Raw

lib/wongi/engine/beta/root.ex

defmodule Wongi.Engine.Beta.Root do
@moduledoc false
alias Wongi.Engine.Token
@type t() :: %__MODULE__{}
defstruct [:ref]
def new do
%__MODULE__{
ref: make_ref()
}
end
def seed(_beta, rete) do
rete
end
defimpl Wongi.Engine.Beta do
alias Wongi.Engine.Beta
def ref(%@for{ref: ref}) do
ref
end
def parent_ref(_), do: nil
def seed(%@for{}, beta, rete) do
Beta.beta_activate(beta, Token.new(beta, [], nil), rete)
end
def equivalent?(
%@for{},
%@for{},
_rete
),
do: true
def equivalent?(_, _, _), do: false
@spec alpha_activate(Wongi.Engine.Beta.Root.t(), Wongi.Engine.WME.t(), Wongi.Engine.Rete.t()) ::
no_return()
defdelegate alpha_activate(node, alpha, rete), to: Wongi.Engine.Beta.NonAlphaListening
@spec alpha_deactivate(
Wongi.Engine.Beta.Root.t(),
Wongi.Engine.WME.t(),
Wongi.Engine.Rete.t()
) :: no_return()
defdelegate alpha_deactivate(node, alpha, rete), to: Wongi.Engine.Beta.NonAlphaListening
def beta_activate(%@for{ref: _ref}, _token, rete) do
rete
end
def beta_deactivate(%@for{ref: _ref}, _token, rete) do
rete
end
end
end