Class: Wongi::Engine::Token

Inherits:
Object
  • Object
show all
Includes:
CoreExt
Defined in:
lib/wongi-engine/token.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from CoreExt

included

Constructor Details

#initialize(token, wme, assignments) ⇒ Token

Returns a new instance of Token.



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/wongi-engine/token.rb', line 15

def initialize token, wme, assignments
  @parent, @wme, @assignments = token, wme, assignments
  @children = []
  @neg_join_results = []
  @opt_join_results = []
  @ncc_results = []
  @generated_wmes = []
  @deexecutors = []
  token.children << self if token
  wme.tokens << self if wme
end

Instance Attribute Details

#childrenObject (readonly)

Returns the value of attribute children.



7
8
9
# File 'lib/wongi-engine/token.rb', line 7

def children
  @children
end

#generated_wmesObject (readonly)

Returns the value of attribute generated_wmes.



12
13
14
# File 'lib/wongi-engine/token.rb', line 12

def generated_wmes
  @generated_wmes
end

#ncc_resultsObject (readonly)

Returns the value of attribute ncc_results.



11
12
13
# File 'lib/wongi-engine/token.rb', line 11

def ncc_results
  @ncc_results
end

#neg_join_resultsObject (readonly)

Returns the value of attribute neg_join_results.



9
10
11
# File 'lib/wongi-engine/token.rb', line 9

def neg_join_results
  @neg_join_results
end

#nodeObject

Returns the value of attribute node.



8
9
10
# File 'lib/wongi-engine/token.rb', line 8

def node
  @node
end

#opt_join_resultsObject (readonly)

Returns the value of attribute opt_join_results.



10
11
12
# File 'lib/wongi-engine/token.rb', line 10

def opt_join_results
  @opt_join_results
end

#ownerObject

Returns the value of attribute owner.



8
9
10
# File 'lib/wongi-engine/token.rb', line 8

def owner
  @owner
end

#parentObject (readonly)

Returns the value of attribute parent.



7
8
9
# File 'lib/wongi-engine/token.rb', line 7

def parent
  @parent
end

#wmeObject (readonly)

Returns the value of attribute wme.



7
8
9
# File 'lib/wongi-engine/token.rb', line 7

def wme
  @wme
end

Instance Method Details

#[](var) ⇒ Object



38
39
40
# File 'lib/wongi-engine/token.rb', line 38

def [] var
  assignments[ var ]
end

#assignmentsObject



34
35
36
# File 'lib/wongi-engine/token.rb', line 34

def assignments
  @cached_assignments ||= all_assignments
end

#delete(preserve_self = false) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/wongi-engine/token.rb', line 57

def delete preserve_self = false
  delete_children
  # => TODO: why was this last check needed? consult the Rete PhD
  @node.tokens.delete self unless preserve_self# or @node.kind_of?( NccPartner )
  @wme.tokens.delete self if @wme
  @parent.children.delete self if @parent

  retract_generated
  deexecute

  case @node
  when NegNode
    @neg_join_results.each do |njr|
      njr.wme.neg_join_results.delete njr if njr.wme
    end
    @neg_join_results = []

  when OptionalNode
    @opt_join_results.each do |ojr|
      ojr.wme.opt_join_results.delete ojr
    end
    @opt_join_results = []

  when NccNode
    @ncc_results.each do |nccr|
      nccr.wme.tokens.delete nccr
      nccr.parent.children.delete nccr
    end
    @ncc_results = []

  when NccPartner
    @owner.ncc_results.delete self
    if @owner.ncc_results.empty?
      @node.ncc.children.each do |node|
        node.left_activate @owner, nil, {}
      end
    end
  end

end

#delete_childrenObject



98
99
100
101
102
# File 'lib/wongi-engine/token.rb', line 98

def delete_children
  while @children.first
    @children.first.delete
  end
end

#subst(variable, value) ⇒ Object



27
28
29
30
31
32
# File 'lib/wongi-engine/token.rb', line 27

def subst variable, value
  @cached_assignments = nil
  if @assignments.has_key? variable
    @assignments[ variable ] = value
  end
end

#to_sObject



42
43
44
45
46
47
# File 'lib/wongi-engine/token.rb', line 42

def to_s
  str = "TOKEN [\n"
  all_assignments.each_pair { |key, value| str << "\t#{key} => #{value}\n" }
  str << "]"
  str
end

#wmesObject



49
50
51
52
53
54
55
# File 'lib/wongi-engine/token.rb', line 49

def wmes
  if parent
    parent.wmes + [wme]
  else
    [wme]
  end
end