Module: Filigree::Visitable
- Defined in:
- lib/filigree/visitor.rb
Overview
This module provides a default implementation of three common traversal patterns: pre-order, post-order, and in-order (level-order). The including class must implement the ‘children` function.
Instance Method Summary collapse
-
#visit(visitor, method = :preorder) ⇒ void
Visit this object with the provided visitor in pre-, post-, or in-order traversal.
Instance Method Details
#visit(visitor, method = :preorder) ⇒ void
This method returns an undefined value.
Visit this object with the provided visitor in pre-, post-, or in-order traversal.
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/filigree/visitor.rb', line 203 def visit(visitor, method = :preorder) case method when :preorder visitor.(self) children.compact.each { |child| child.visit(visitor, :preorder) } when :inorder nodes = [self] while node = nodes.shift nodes += node.children.compact visitor.(node) end when :postorder children.compact.each { |child| child.visit(visitor, :postorder) } visitor.(self) end end |