class Dwarftree::TreeFilter
Public Class Methods
new(subprograms:, dies:)
click to toggle source
@param [Set<String>] subprograms @param [Set<String>] dies
# File lib/dwarftree/tree_filter.rb, line 13 def initialize(subprograms:, dies:) @subprograms = subprograms @dies = dies end
Public Instance Methods
filter!(nodes, filter_subprogram: @subprograms.empty?)
click to toggle source
@param [Array<Dwarftree::DIE::*>] nodes
# File lib/dwarftree/tree_filter.rb, line 19 def filter!(nodes, filter_subprogram: @subprograms.empty?) unless @subprograms.empty? filter_subprograms!(nodes) end unless @dies.empty? filter_dies!(nodes) end end
flat_map!(&block)
click to toggle source
# File lib/dwarftree/tree_filter.rb, line 5 def flat_map!(&block) replace(flat_map(&block)) end
Private Instance Methods
filter_dies!(nodes)
click to toggle source
# File lib/dwarftree/tree_filter.rb, line 42 def filter_dies!(nodes) nodes.flat_map! do |node| filter_dies!(node.children) # Exactly-matched subprogram should not be filtered out if matching_subprogram?(node) || @dies.include?(node.type) node else node.children end end end
filter_subprograms!(nodes)
click to toggle source
@param [Array<Dwarftree::DIE::*>] nodes - Modified to Array<Dwarftree::DIE::Subprogram> after this call
# File lib/dwarftree/tree_filter.rb, line 31 def filter_subprograms!(nodes) nodes.flat_map! do |node| if matching_subprogram?(node) node else filter_subprograms!(node.children) node.children end end end
matching_subprogram?(node)
click to toggle source
# File lib/dwarftree/tree_filter.rb, line 55 def matching_subprogram?(node) node.type == 'subprogram' && @subprograms.include?(node.name) end