4 #error "This file must be compiled as C++." 7 #include <arbiter/Graph.h> 15 #include <unordered_map> 18 struct ArbiterResolvedDependencyGraph
final :
public Arbiter::
Base 21 struct NodeValue
final 26 NodeValue (ArbiterSelectedVersion version,
const ArbiterRequirement &requirement);
33 bool operator== (
const NodeValue &other)
const;
38 std::shared_ptr<ArbiterRequirement> _requirement;
40 void setRequirement (
const ArbiterRequirement &requirement);
41 void setRequirement (std::unique_ptr<ArbiterRequirement> requirement);
44 using NodeKey = ArbiterProjectIdentifier;
45 using NodeMap = std::unordered_map<NodeKey, NodeValue>;
46 using EdgeMap = std::unordered_map<NodeKey, std::set<NodeKey>>;
57 void addNode (ArbiterResolvedDependency node,
const ArbiterRequirement &initialRequirement,
const Arbiter::Optional<ArbiterProjectIdentifier> &dependent) noexcept(
false);
69 static ArbiterResolvedDependency
resolveNode (
const NodeMap::value_type &node);
70 ArbiterResolvedDependency
resolveNode (
const NodeMap::key_type &key)
const;
75 std::ostream &
describe (std::ostream &os)
const override;
83 struct ArbiterResolvedDependencyInstaller
final :
public Arbiter::
Base 86 using SortedEdgesMap = std::unordered_map<ArbiterProjectIdentifier, std::vector<ArbiterProjectIdentifier>>;
87 using PhaseSet = std::set<ArbiterResolvedDependency>;
96 bool contains (
const ArbiterResolvedDependency &node)
const;
99 std::ostream &
describe (std::ostream &os)
const override;
const ArbiterSelectedVersion _version
ArbiterResolvedDependencyInstaller()=default
bool contains(const ArbiterResolvedDependency &node) const
auto makeIteratorRange(const Collection &collection)
Creates an IteratorRange encompassing the entirety of the given read-only collection.
const NodeMap & nodes() const
ArbiterResolvedDependency resolveNode(const NodeMap::key_type &key) const
bool operator==(const NodeValue &other) const
const EdgeMap & edges() const
std::ostream & describe(std::ostream &os) const override
ArbiterResolvedDependencyInstaller createInstaller() const
std::unique_ptr< Arbiter::Base > clone() const override
const ArbiterRequirement & requirement() const
bool operator==(const Arbiter::Base &other) const override
size_t countInPhase(size_t phaseIndex) const
std::ostream & describe(std::ostream &os) const override
std::vector< PhaseSet > _phases
static ArbiterResolvedDependency resolveNode(const NodeMap::value_type &node)
std::unique_ptr< Arbiter::Base > clone() const override
bool operator==(const Arbiter::Base &other) const override
friend struct ArbiterResolvedDependencyGraph
NodeValue(ArbiterSelectedVersion version, const ArbiterRequirement &requirement)
void addNode(ArbiterResolvedDependency node, const ArbiterRequirement &initialRequirement, const Arbiter::Optional< ArbiterProjectIdentifier > &dependent) noexcept(false)
Attempts to add the given node into the graph, as a dependency of dependent if specified.
virtual std::unique_ptr< Base > clone() const =0