3.2.11.6. dg/Strategies.hpp

3.2.11.6.1. Class dg::Strategy

class dg::Strategy

Derivation graph strategies are used in Builder::execute().

3.2.11.6.1.1. Synopsis

static std::shared_ptr<Strategy> makeAdd(bool onlyUniverse, const std::vector<std::shared_ptr<graph::Graph>> &graphs, IsomorphismPolicy graphPolicy)
static std::shared_ptr<Strategy> makeAdd(bool onlyUniverse, const std::shared_ptr<Function<std::vector<std::shared_ptr<graph::Graph>>()>> generator, IsomorphismPolicy graphPolicy)
static std::shared_ptr<Strategy> makeSequence(const std::vector<std::shared_ptr<Strategy>> &strategies)
static std::shared_ptr<Strategy> makeParallel(const std::vector<std::shared_ptr<Strategy>> &strategies)
static std::shared_ptr<Strategy> makeFilter(bool alsoUniverse, std::shared_ptr<Function<bool(std::shared_ptr<graph::Graph>, const Strategy::GraphState&, bool)>> filterFunc)
static std::shared_ptr<Strategy> makeExecute(std::shared_ptr<Function<void(const Strategy::GraphState&)>> func)
static std::shared_ptr<Strategy> makeRule(std::shared_ptr<rule::Rule> r)
static std::shared_ptr<Strategy> makeLeftPredicate(std::shared_ptr<Function<bool(const Derivation&)>> predicate, std::shared_ptr<Strategy> strategy)
static std::shared_ptr<Strategy> makeRightPredicate(std::shared_ptr<Function<bool(const Derivation&)>> predicate, std::shared_ptr<Strategy> strategy)
static std::shared_ptr<Strategy> makeRevive(std::shared_ptr<Strategy> strategy)
static std::shared_ptr<Strategy> makeRepeat(int limit, std::shared_ptr<Strategy> strategy)
class dg::Strategy::GraphState

3.2.11.6.1.2. Details

static std::shared_ptr<Strategy> makeAdd(bool onlyUniverse, const std::vector<std::shared_ptr<graph::Graph>> &graphs, IsomorphismPolicy graphPolicy)
Returns:

an Add Universe strategy if onlyUniverse is true, otherwise an Add Subset strategy. The graphPolicy refers to the checking of each added graph against the internal graph database.

Throws:

LogicError if there is a nullptr in graphs.

static std::shared_ptr<Strategy> makeAdd(bool onlyUniverse, const std::shared_ptr<Function<std::vector<std::shared_ptr<graph::Graph>>()>> generator, IsomorphismPolicy graphPolicy)
Returns:

an Add Universe strategy if onlyUniverse is true, otherwise an Add Subset strategy. The graphPolicy refers to the checking of each added graph against the internal graph database.

static std::shared_ptr<Strategy> makeSequence(const std::vector<std::shared_ptr<Strategy>> &strategies)
Returns:

a Sequence strategy.

Throws:

LogicError if strategies.empty().

Throws:

LogicError if there is a nullptr in strategies.

static std::shared_ptr<Strategy> makeParallel(const std::vector<std::shared_ptr<Strategy>> &strategies)
Returns:

a Parallel strategy.

Throws:

LogicError if strategies is empty.

Throws:

LogicError if there is a nullptr in strategies.

static std::shared_ptr<Strategy> makeFilter(bool alsoUniverse, std::shared_ptr<Function<bool(std::shared_ptr<graph::Graph>, const Strategy::GraphState&, bool)>> filterFunc)

The filtering predicate will be called for each graph in either the subset or the universe. The predicate is called with the graph and the graph state as arguments, and a bool stating whether the call is the first in the filtering process.

Returns:

a Filter Universe strategy if alsoUniverse is true, otherwise a Filter Subset strategy.

Throws:

LogicError if filterFunc is a null pointer.

static std::shared_ptr<Strategy> makeExecute(std::shared_ptr<Function<void(const Strategy::GraphState&)>> func)
Returns:

an Execute strategy.

Throws:

LogicError if func is a null pointer.

static std::shared_ptr<Strategy> makeRule(std::shared_ptr<rule::Rule> r)
Returns:

a Rule strategy.

Throws:

LogicError if r is a nullptr.

static std::shared_ptr<Strategy> makeLeftPredicate(std::shared_ptr<Function<bool(const Derivation&)>> predicate, std::shared_ptr<Strategy> strategy)

Even though the predicate is called with a Derivation object, only the left side and the rule of the object is valid.

Returns:

a Derivation Predicates strategy.

Throws:

LogicError if predicate or strategy is a nullptr.

static std::shared_ptr<Strategy> makeRightPredicate(std::shared_ptr<Function<bool(const Derivation&)>> predicate, std::shared_ptr<Strategy> strategy)
Returns:

a Derivation Predicates strategy.

Throws:

LogicError if predicate or strategy is a nullptr.

static std::shared_ptr<Strategy> makeRevive(std::shared_ptr<Strategy> strategy)
Returns:

a Revive strategy.

Throws:

LogicError if strategy is a nullptr.

static std::shared_ptr<Strategy> makeRepeat(int limit, std::shared_ptr<Strategy> strategy)
Returns:

a Repeat strategy.

Throws:

LogicError if limit < 0

Throws:

LogicError if strategy is a nullptr.

3.2.11.6.2. Class dg::Strategy::GraphState

class dg::Strategy::GraphState

This class represents a graph state with a subset \(S\) and a universe \(U\) fulfilling \(S\subseteq U\).

const std::vector<std::shared_ptr<graph::Graph>> &getSubset() const
Returns:

the subset \(\mathcal{S}\).

const std::vector<std::shared_ptr<graph::Graph>> &getUniverse() const
Returns:

the universe \(\mathcal{U}\)