Class: DepSelector::DependencyGraph

Inherits:
Object
  • Object
show all
Defined in:
lib/dep_selector/dependency_graph.rb

Constant Summary collapse

DebugOptionFile =
"/tmp/DepSelectorDebugOn"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDependencyGraph

Returns a new instance of DependencyGraph.



33
34
35
# File 'lib/dep_selector/dependency_graph.rb', line 33

def initialize
  @packages = {}
end

Instance Attribute Details

#packagesObject (readonly)

Returns the value of attribute packages.



31
32
33
# File 'lib/dep_selector/dependency_graph.rb', line 31

def packages
  @packages
end

Instance Method Details

#cloneObject

TODO [cw,2010/11/23]: this is a simple but inefficient impl. Do it for realz.



82
83
84
# File 'lib/dep_selector/dependency_graph.rb', line 82

def clone
  Marshal.load(Marshal.dump(self))
end

#each_packageObject



41
42
43
44
45
# File 'lib/dep_selector/dependency_graph.rb', line 41

def each_package
  packages.each do |name, pkg|
    yield pkg
  end
end

#gecode_model_varsObject



72
73
74
# File 'lib/dep_selector/dependency_graph.rb', line 72

def gecode_model_vars
  packages.inject({}){|acc, elt| acc[elt.first] = elt.last.gecode_model_var ; acc }
end

#gecode_wrapperObject



47
48
49
50
# File 'lib/dep_selector/dependency_graph.rb', line 47

def gecode_wrapper
  raise "Must invoke generate_gecode_wrapper_constraints before attempting to access gecode_wrapper" unless @gecode_wrapper
  @gecode_wrapper
end

#generate_gecode_wrapper_constraints(packages_to_include_in_solve = nil) ⇒ Object

Note: only invoke this method once all Packages and PackageVersions have been added.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/dep_selector/dependency_graph.rb', line 54

def generate_gecode_wrapper_constraints(packages_to_include_in_solve=nil)
  unless @gecode_wrapper
    packages_in_solve =
      if packages_to_include_in_solve
        packages_to_include_in_solve
      else
        packages.map{ |name, pkg| pkg }
      end

    debugFlag = DebugOptionFile && File::exists?(DebugOptionFile)
    # In addition to all the packages that the user specified,
    # there is a "ghost" package that contains the solution
    # constraints. See Selector#solve for more information.
    @gecode_wrapper = GecodeWrapper.new(packages_in_solve.size + 1, debugFlag)
    packages_in_solve.each{ |pkg| pkg.generate_gecode_wrapper_constraints }
  end
end

#package(name) ⇒ Object



37
38
39
# File 'lib/dep_selector/dependency_graph.rb', line 37

def package(name)
  packages.has_key?(name) ? packages[name] : (packages[name]=Package.new(self, name))
end

#to_s(incl_densely_packed_versions = false) ⇒ Object



76
77
78
# File 'lib/dep_selector/dependency_graph.rb', line 76

def to_s(incl_densely_packed_versions = false)
  packages.keys.sort.map{|name| packages[name].to_s(incl_densely_packed_versions)}.join("\n")
end