3.2.12.6. dg/Strategies.hpp

3.2.12.6.1. Class dg::Strategy

class dg::Strategy

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

3.2.12.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.12.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)
Retunrs

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 or not 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.12.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}\)