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 44 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 61 def alpha_activate wme assignments = collect_assignments( wme ) parent.tokens.each do |token| if matches?( token, wme ) children.each do |beta| beta.beta_activate Token.new( beta, token, wme, assignments ) end end end end
alpha_deactivate(wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 72 def alpha_deactivate wme children.each do |child| child.tokens.each do |token| if token.wme == wme child.beta_deactivate token end end end end
beta_activate(token)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 82 def beta_activate token self.alpha.wmes.each do |wme| if matches?( token, wme ) assignments = collect_assignments( wme ) children.each do |beta| beta.beta_activate Token.new( beta, token, wme, assignments ) end end end end
beta_deactivate(token)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 93 def beta_deactivate token children.each do |child| child.tokens.each do |t| if t.parent == token child.beta_deactivate t end end end end
equivalent?(alpha, tests, assignment_pattern)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 50 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 103 def refresh_child child alpha.wmes.each do |wme| assignments = collect_assignments( wme ) parent.tokens.each do |token| if matches?( token, wme ) child.beta_activate Token.new( child, token, wme, assignments ) end end end end
Protected Instance Methods
collect_assignments(wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 123 def collect_assignments wme assignments = {} return assignments if assignment_pattern.nil? if assignment_pattern.subject != :_ assignments[ assignment_pattern.subject ] = TokenAssignment.new(wme, :subject) end if assignment_pattern.predicate != :_ assignments[ assignment_pattern.predicate ] = TokenAssignment.new(wme, :predicate) end if assignment_pattern.object != :_ assignments[ assignment_pattern.object ] = TokenAssignment.new(wme, :object) end assignments end
matches?(token, wme)
click to toggle source
# File lib/wongi-engine/beta/join_node.rb, line 116 def matches? token, wme @tests.each do |test| return false unless test.matches?( token, wme ) end true end