Class: CallbackTreeNodeVisitor2

Inherits:
TreeNodeVisitor show all
Defined in:
lib/treevisitor/visitors/callback_tree_node_visitor2.rb

Overview

Executes a block when enter in a node The block are defined from on_enter_X methods The blocks take as argument the node and the parent_node

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(delegate = nil) ⇒ CallbackTreeNodeVisitor2

Returns a new instance of CallbackTreeNodeVisitor2.



11
12
13
14
15
16
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 11

def initialize( delegate = nil)
  super()
  @stack = []
  @root = nil
  @delegate = delegate
end

Instance Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



9
10
11
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 9

def root
  @root
end

Instance Method Details

#_on_enter_tree_node(src_tree_node, dst_parent_node) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 26

def _on_enter_tree_node( src_tree_node, dst_parent_node )
  if @action_enter_tree_node
    dst_tree_node = @action_enter_tree_node.call( src_tree_node, dst_parent_node )
  elsif @delegate
    dst_tree_node = @delegate.on_enter_tree_node( src_tree_node, dst_parent_node )
  end
  dst_tree_node
end

#_on_visit_leaf_node(src_leaf_node, parent_node) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 35

def _on_visit_leaf_node( src_leaf_node, parent_node )
  if @action_visit_leaf_node
    @action_visit_leaf_node.call( src_leaf_node, parent_node )
  elsif @delegate
    @delegate.on_visit_leaf_node( src_leaf_node, parent_node )
  end
end

#enter_tree_node(src_tree_node) ⇒ Object



43
44
45
46
47
48
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 43

def enter_tree_node( src_tree_node )
  dst_parent_node = @stack.empty? ? nil : @stack.last
  dst_tree_node = _on_enter_tree_node( src_tree_node, dst_parent_node )
  @root = dst_tree_node if @stack.empty?
  @stack.push( dst_tree_node )
end

#exit_tree_node(src_tree_node) ⇒ Object



50
51
52
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 50

def exit_tree_node( src_tree_node )
  @stack.pop
end

#on_enter_tree_node(&action) ⇒ Object



18
19
20
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 18

def on_enter_tree_node( &action )
  @action_enter_tree_node = action
end

#on_visit_leaf_node(&action) ⇒ Object



22
23
24
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 22

def on_visit_leaf_node( &action )
  @action_visit_leaf_node = action
end

#visit_leaf_node(src_leaf_node) ⇒ Object



54
55
56
57
# File 'lib/treevisitor/visitors/callback_tree_node_visitor2.rb', line 54

def visit_leaf_node( src_leaf_node )
  parent_node = @stack.last
  _on_visit_leaf_node( src_leaf_node, parent_node )
end