module Cxxproject::HasDependencies

Public Instance Methods

add_unique(res, bb) click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 71
def add_unique(res, bb)
  res.delete(bb)
  res.push(bb)
end
all_dependencies() click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 82
def all_dependencies()
  return @all_dependencies if @all_deps_calculated

  direct_deps.each do |d|
    d.all_dependencies_recursive(@all_dependencies, @all_dependencies_set)
  end

  @all_deps_calculated = true
  @all_dependencies
end
all_dependencies_recursive(all_deps, all_deps_set) click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 93
def all_dependencies_recursive(all_deps, all_deps_set)
  deps = [] # needed to keep order

  direct_deps.each do |d|
    next if all_deps_set.include?d
    all_deps << d
    all_deps_set << d
    deps << d
  end

  deps.each do |d|
    d.all_dependencies_recursive(all_deps, all_deps_set)
  end
end
collect_dependencies() click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 59
def collect_dependencies()
  res = []
  res << self
  todo = dependencies
  while not todo.empty?
    bb = resolve_by_name(todo.pop)
    add_unique(res, bb)
    todo += bb.dependencies
  end
  res
end
convert_named_values_to_string(values) click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 12
def convert_named_values_to_string(values)
  values.map { |v| v.instance_of?(String) ? v : v.name }
end
dependencies() click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 4
def dependencies
  @dependencies ||= []
end
direct_deps() click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 25
def direct_deps
  return @direct_deps if @direct_deps

  @all_dependencies_set = Set.new
  @all_dependencies_set << self
  @all_dependencies = [self]

  depList = helper_dependencies.length > 0 ? helper_dependencies : dependencies

  depList.each do |d|
    bb = ALL_BUILDING_BLOCKS[d]
    if not bb
      raise "Error: while reading config file for #{self.name}: dependent building block \"#{d}\" was specified but not found!"
    end
    next if @all_dependencies_set.include?bb

    @all_dependencies << bb
    @all_dependencies_set << bb

    # deps in modules may be splitted into its contents
    if ModuleBuildingBlock === bb
      bb.contents.each do |c|
        next if @all_dependencies_set.include?c
        @all_dependencies << c
        @all_dependencies_set << c
      end
    end

  end

  @direct_deps = @all_dependencies.dup
  @direct_deps
end
helper_dependencies() click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 8
def helper_dependencies
  @helper_dependencies ||= []
end
resolve_by_name(name) click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 76
def resolve_by_name(name)
  res = ALL_BUILDING_BLOCKS[name]
  raise "BuildingBlock #{name} not defined" unless res
  res
end
set_dependencies(deps) click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 15
def set_dependencies(deps)
  @dependencies = convert_named_values_to_string(deps)
  self
end
set_helper_dependencies(deps) click to toggle source
# File lib/cxxproject/buildingblocks/has_dependencies_mixin.rb, line 20
def set_helper_dependencies(deps)
  @helper_dependencies = convert_named_values_to_string(deps)
  self
end