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