souffle
2.0.2-371-g6315b36
|
Core section of the magic set transformer. More...
#include <MagicSet.h>
Public Member Functions | |
MagicSetCoreTransformer * | clone () const override |
std::string | getName () const override |
Public Member Functions inherited from souffle::ast::transform::Transformer | |
bool | apply (TranslationUnit &translationUnit) |
virtual | ~Transformer ()=default |
Private Member Functions | |
bool | transform (TranslationUnit &translationUnit) override |
Static Private Member Functions | |
static void | addRelevantVariables (std::set< std::string > &variables, const std::vector< const BinaryConstraint * > eqConstraints) |
Get the closure of the given set of variables under appearance in the given eq constraints. More... | |
static Own< Atom > | createMagicAtom (const Atom *atom) |
Creates the magic atom associatd with the given (rel, adornment) pair. More... | |
static Own< Clause > | createMagicClause (const Atom *atom, const VecOwn< Atom > &constrainingAtoms, const std::vector< const BinaryConstraint * > eqConstraints) |
Creates the magic clause centred around the given magic atom. More... | |
static std::string | getAdornment (const QualifiedName &name) |
Retrieves an adornment encoded in a given relation name. More... | |
static std::vector< const BinaryConstraint * > | getBindingEqualityConstraints (const Clause *clause) |
Get all potentially-binding equality constraints in a clause. More... | |
static QualifiedName | getMagicName (const QualifiedName &name) |
Gets a unique magic identifier for a given adorned relation name. More... | |
static bool | isAdorned (const QualifiedName &name) |
Checks if a given relation name is adorned. More... | |
Core section of the magic set transformer.
Creates all magic rules and relations based on the preceding adornment, and adds them into rules as needed. Assumes that Normalisation, Labelling, and Adornment have all been performed.
Definition at line 286 of file MagicSet.h.
|
staticprivate |
Get the closure of the given set of variables under appearance in the given eq constraints.
Definition at line 1046 of file MagicSet.cpp.
References souffle::contains().
|
inlineoverridevirtual |
Implements souffle::ast::transform::Transformer.
Definition at line 292 of file MagicSet.h.
|
staticprivate |
Creates the magic atom associatd with the given (rel, adornment) pair.
Definition at line 1030 of file MagicSet.cpp.
|
staticprivate |
Creates the magic clause centred around the given magic atom.
Definition at line 1099 of file MagicSet.cpp.
References souffle::clone().
|
staticprivate |
Retrieves an adornment encoded in a given relation name.
Definition at line 1012 of file MagicSet.cpp.
|
staticprivate |
Get all potentially-binding equality constraints in a clause.
Definition at line 1133 of file MagicSet.cpp.
References souffle::ast::visitDepthFirst().
|
staticprivate |
Gets a unique magic identifier for a given adorned relation name.
Definition at line 1023 of file MagicSet.cpp.
References souffle::ast::Atom::getArguments(), and souffle::ast::Atom::getQualifiedName().
|
inlineoverridevirtual |
Implements souffle::ast::transform::Transformer.
Definition at line 288 of file MagicSet.h.
|
staticprivate |
Checks if a given relation name is adorned.
Definition at line 992 of file MagicSet.cpp.
References i.
|
overrideprivatevirtual |
Perform the Magic Set Transformation
Implements souffle::ast::transform::Transformer.
Definition at line 1150 of file MagicSet.cpp.
References souffle::clone().