Class: Wongi::Engine::Token

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

Direct Known Subclasses

FakeToken

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from CoreExt

included

Constructor Details

#initialize(node, token, wme, assignments) ⇒ Token

Returns a new instance of Token.



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/wongi-engine/token.rb', line 19

def initialize node, token, wme, assignments
  @node, @parent, @wme, @assignments = node, token, wme, assignments
  @overlay = wme ? wme.overlay.highest(token.overlay) : (token ? token.overlay : node.rete.default_overlay)
  @children = []
  @deleted = false
  @neg_join_results = []
  @opt_join_results = []
  @ncc_results = []
  @generated_wmes = []
  token.children << self if token
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.



15
16
17
# File 'lib/wongi-engine/token.rb', line 15

def generated_wmes
  @generated_wmes
end

#ncc_resultsObject (readonly)

Returns the value of attribute ncc_results.



14
15
16
# File 'lib/wongi-engine/token.rb', line 14

def ncc_results
  @ncc_results
end

#neg_join_resultsObject (readonly)

Returns the value of attribute neg_join_results.



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

def neg_join_results
  @neg_join_results
end

#nodeObject (readonly)

Returns the value of attribute node.



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

def node
  @node
end

#opt_join_resultsObject (readonly)

Returns the value of attribute opt_join_results.



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

def opt_join_results
  @opt_join_results
end

#overlayObject (readonly)

Returns the value of attribute overlay.



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

def overlay
  @overlay
end

#ownerObject

Returns the value of attribute owner.



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

def owner
  @owner
end

#parentObject

Returns the value of attribute parent.



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

def parent
  @parent
end

#wmeObject (readonly)

Returns the value of attribute wme.



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

def wme
  @wme
end

Instance Method Details

#[](var) ⇒ Object



53
54
55
56
57
# File 'lib/wongi-engine/token.rb', line 53

def [] var
  if a = assignments[ var ]
    a.respond_to?(:call) ? a.call( self ) : a
  end
end

#ancestorsObject



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

def ancestors
  if parent
    parent.ancestors.unshift parent
  else
    []
  end
end

#assignmentsObject



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

def assignments
  all_assignments
end

#destroyObject



79
80
81
# File 'lib/wongi-engine/token.rb', line 79

def destroy
  deleted!
end

#dispose!Object



83
84
85
86
87
88
89
# File 'lib/wongi-engine/token.rb', line 83

def dispose!
  parent.children.delete(self) if parent
  neg_join_results.dup.each(&:unlink)
  opt_join_results.dup.each(&:unlink)
  @parent = nil
  @wme = nil
end

#duplicate?(other) ⇒ Boolean

TODO ignore assignments?

Returns:

  • (Boolean)


64
65
66
# File 'lib/wongi-engine/token.rb', line 64

def duplicate? other
  self.parent.equal?(other.parent) && @wme.equal?(other.wme) && self.assignments == other.assignments
end

#generated?(wme) ⇒ Boolean

for neg feedback loop protection

Returns:

  • (Boolean)


92
93
94
95
# File 'lib/wongi-engine/token.rb', line 92

def generated? wme
  return true if generated_wmes.any? { |w| w == wme }
  return children.any? { |t| t.generated? wme }
end

#has_var?(x) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/wongi-engine/token.rb', line 59

def has_var? x
  assignments.has_key? x
end

#inspectObject



75
76
77
# File 'lib/wongi-engine/token.rb', line 75

def inspect
  to_s
end

#set(variable, value) ⇒ Object



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

def set(variable, value)
  @assignments[variable] = value
end

#subst(variable, value) ⇒ Object



39
40
41
42
43
# File 'lib/wongi-engine/token.rb', line 39

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

#to_sObject



68
69
70
71
72
73
# File 'lib/wongi-engine/token.rb', line 68

def to_s
  str = "TOKEN [ #{object_id} parent=#{parent ? parent.object_id : 'nil'} "
  all_assignments.each_pair { |key, value| str << "#{key} => #{value} " }
  str << "]"
  str
end