module Piggly::Parser::Traversal

Routines for traversing a tree; assumes base class defines elements as a method that returns a list of child nodes

Public Instance Methods

count() { |NodeClass => boolean| ... } click to toggle source
# File lib/piggly/parser/traversal.rb, line 19
def count # :yields: NodeClass => boolean
  inject(0){|sum, e| yield(e) ? sum + 1 : sum }
end
find() { |NodeClass => boolean| ... } click to toggle source
# File lib/piggly/parser/traversal.rb, line 23
def find # :yields: NodeClass => boolean
  found = false
  catch :done do
    inject(nil) do |_,e|
      if yield(e)
        found = e
        throw :done
      end
    end
  end
  found
end
flatten() { |NodeClass| ... } click to toggle source
# File lib/piggly/parser/traversal.rb, line 40
def flatten # :yields: NodeClass
  if block_given?
    inject([]){|list,e| list << yield(e) }
  else
    inject([]){|list,e| list << e }
  end
end
inject(init) { |NodeClass => init| ... } click to toggle source
# File lib/piggly/parser/traversal.rb, line 9
def inject(init) # :yields: NodeClass => init
  if elements
    elements.inject(yield(init, self)) do |state, e|
      e.inject(state){|succ, n| yield(succ, n) }
    end
  else
    yield(init, self)
  end
end
select() { |NodeClass => boolean| ... } click to toggle source
# File lib/piggly/parser/traversal.rb, line 36
def select # :yields: NodeClass => boolean
  inject([]){|list,e| yield(e) ? list << e : list }
end