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