class Wongi::Engine::JoinNode
Attributes
alpha[RW]
assignment_pattern[R]
tests[R]
Public Class Methods
new(parent, tests, assignment)
click to toggle source
Calls superclass method
Wongi::Engine::BetaNode::new
# File lib/wongi-engine/beta/join_node.rb, line 27 def initialize(parent, tests, assignment) super(parent) @tests = tests @assignment_pattern = assignment end
Public Instance Methods
alpha_activate(wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 45 def alpha_activate(wme) # p alpha_activate: {class: self.class, object_id:, wme:} assignments = collect_assignments(wme) tokens.each do |token| next unless matches?(token, wme) children.each do |beta| beta.beta_activate Token.new(beta, token, wme, assignments) end end end
alpha_deactivate(wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 58 def alpha_deactivate(wme) beta_deactivate_children(wme: wme) end
beta_activate(token)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 62 def beta_activate(token) # p beta_activate: {class: self.class, object_id:, token:} return if tokens.find { |t| t.duplicate? token } overlay.add_token(token) template = specialize(alpha.template, tests, token) select_wmes(template).each do |wme| next unless matches?(token, wme) assignments = collect_assignments(wme) children.each do |beta| beta.beta_activate Token.new(beta, token, wme, assignments) end end end
beta_deactivate(token)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 79 def beta_deactivate(token) # p beta_deactivate: {class: self.class, object_id:, token:} overlay.remove_token(token) beta_deactivate_children(token: token) end
equivalent?(alpha, tests, assignment_pattern)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 33 def equivalent?(alpha, tests, assignment_pattern) return false unless self.alpha == alpha return false unless self.assignment_pattern == assignment_pattern return false unless (self.tests.empty? && tests.empty?) || (self.tests.length == tests.length && self.tests.all? { |my_test| tests.any? { |new_test| my_test.equivalent? new_test } }) true end
refresh_child(child)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 85 def refresh_child(child) select_wmes(alpha.template).each do |wme| assignments = collect_assignments(wme) tokens.each do |token| child.beta_activate Token.new(child, token, wme, assignments) if matches?(token, wme) end end end
Protected Instance Methods
collect_assignments(wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 103 def collect_assignments(wme) assignments = {} return assignments if assignment_pattern.nil? assignments[assignment_pattern.subject] = TokenAssignment.new(wme, :subject) if assignment_pattern.subject != :_ assignments[assignment_pattern.predicate] = TokenAssignment.new(wme, :predicate) if assignment_pattern.predicate != :_ assignments[assignment_pattern.object] = TokenAssignment.new(wme, :object) if assignment_pattern.object != :_ assignments end
matches?(token, wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 96 def matches?(token, wme) tests.each do |test| return false unless test.matches?(token, wme) end true end