2.2.10.6. dg/Strategies.hpp¶
2.2.10.6.1. Class dg::Strategy¶
-
class
dg::Strategy¶ Derivation graph strategies are used in
Builder::execute().
2.2.10.6.1.1. Synopsis¶
struct MOD_DECL Strategy {
Strategy(const Strategy &) = delete;
Strategy &operator=(const Strategy &) = delete;
public:
struct GraphState {
GraphState(std::function<void(std::vector<std::shared_ptr<graph::Graph> > &)> fSubset,
std::function<void(std::vector<std::shared_ptr<graph::Graph> > &)> fUniverse);
const std::vector<std::shared_ptr<graph::Graph> > &getSubset() const;
const std::vector<std::shared_ptr<graph::Graph> > &getUniverse() const;
private:
mutable bool subsetInit, universeInit;
mutable std::vector<std::shared_ptr<graph::Graph> > subset, universe;
std::function<void(std::vector<std::shared_ptr<graph::Graph> > &)> fSubset, fUniverse;
};
private:
Strategy(std::unique_ptr<lib::DG::Strategies::Strategy> strategy);
public:
~Strategy();
std::unique_ptr<Strategy> clone() const;
MOD_DECL friend std::ostream &operator<<(std::ostream &s, const Strategy &strat);
lib::DG::Strategies::Strategy &getStrategy();
private:
struct Pimpl;
std::unique_ptr<Pimpl> p;
public:
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);
};
2.2.10.6.1.2. Details¶
- Returns
an Add Universe strategy if
onlyUniverseistrue, otherwise an Add Subset strategy. ThegraphPolicyrefers to the checking of each added graph against the internal graph database.- Throws
LogicErrorif there is anullptringraphs.
- Returns
an Add Universe strategy if
onlyUniverseistrue, otherwise an Add Subset strategy. ThegraphPolicyrefers to the checking of each added graph against the internal graph database.
- Retunrs
a Sequence strategy.
- Throws
LogicErrorifstrategies.empty().- Throws
LogicErrorif there is anullptrinstrategies.
- Returns
a Parallel strategy.
- Throws
LogicErrorifstrategiesis empty.- Throws
LogicErrorif there is anullptrinstrategies.
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
alsoUniverseistrue, otherwise a Filter Subset strategy.- Throws
LogicErroriffilterFuncis a null pointer.
- Returns
an Execute strategy.
- Throws
LogicErroriffuncis a null pointer.
- Returns
a Rule strategy.
- Throws
LogicErrorifris anullptr.
Even though the predicate is called with a
Derivationobject, only the left side and the rule of the object is valid.- Returns
a Derivation Predicates strategy.
- Throws
LogicErrorifpredicateorstrategyis anullptr.
- Returns
a Derivation Predicates strategy.
- Throws
LogicErrorifpredicateorstrategyis anullptr.
- Returns
a Revive strategy.
- Throws
LogicErrorifstrategyis anullptr.
- Returns
a Repeat strategy.
- Throws
LogicErroriflimit <= 0- Throws
LogicErrorifstrategyis anullptr.