2.2.10.4. dg/GraphInterface.hpp¶
This header contains the definitions for the hypergraph interface for dg::DG
.
2.2.10.4.1. Class dg::DG::Vertex
¶
2.2.10.4.1.1. Synopsis¶
class MOD_DECL DG::Vertex {
friend class lib::DG::Hyper;
Vertex(std::shared_ptr<DG> g, std::size_t vId);
public:
Vertex();
MOD_DECL friend std::ostream &operator<<(std::ostream &s, const Vertex &v);
MOD_DECL friend bool operator==(const Vertex &v1, const Vertex &v2);
MOD_DECL friend bool operator!=(const Vertex &v1, const Vertex &v2);
MOD_DECL friend bool operator<(const Vertex &v1, const Vertex &v2);
std::size_t hash() const;
explicit operator bool() const;
bool isNull() const;
std::size_t getId() const;
std::shared_ptr<DG> getDG() const;
std::size_t inDegree() const;
InEdgeRange inEdges() const;
std::size_t outDegree() const;
OutEdgeRange outEdges() const;
std::shared_ptr<graph::Graph> getGraph() const;
private:
std::shared_ptr<DG> g;
std::size_t vId;
};
2.2.10.4.1.2. Details¶
-
Vertex
()¶ Constructs a null descriptor.
-
bool
isNull
() const¶ - Returns
whether this is a null descriptor or not.
-
std::size_t
getId
() const¶ - Returns
the index of the vertex. It will be in the range \([0, numVertices + numEdges[\).
- Throws
LogicError
if it is a null descriptor.
-
std::shared_ptr<DG>
getDG
() const¶ - Returns
the derivation graph the vertex belongs to.
- Throws
LogicError
if it is a null descriptor.
-
std::size_t
inDegree
() const¶ - Returns
the in-degree of the vertex, including multiplicity of target multisets.
- Throws
LogicError
if it is a null descriptor.
-
InEdgeRange
inEdges
() const¶ - Returns
a range of in-hyperedges for this vertex.
- Throws
LogicError
if it is a null descriptor.
-
std::size_t
getOutDegree
() const¶ - Returns
the out-degree of the vertex, including multiplicity of source multisets.
- Throws
LogicError
if it is a null descriptor.
-
OutEdgeRange
outEdges
() const¶ - Returns
a range of out-hyperedges for this vertex.
- Throws
LogicError
if it is a null descriptor.
-
std::shared_ptr<graph::Graph> &
getGraph
() const¶ - Returns
the graph label of the vertex.
- Throws
LogicError
if it is a null descriptor.
2.2.10.4.2. Class dg::DG::HyperEdge
¶
2.2.10.4.2.1. Synopsis¶
class MOD_DECL DG::HyperEdge {
friend class lib::DG::Hyper;
HyperEdge(std::shared_ptr<DG> g, std::size_t eId);
public:
HyperEdge();
MOD_DECL friend std::ostream &operator<<(std::ostream &s, const HyperEdge &e);
MOD_DECL friend bool operator==(const HyperEdge &e1, const HyperEdge &e2);
MOD_DECL friend bool operator!=(const HyperEdge &e1, const HyperEdge &e2);
MOD_DECL friend bool operator<(const HyperEdge &e1, const HyperEdge &e2);
std::size_t hash() const;
explicit operator bool() const;
bool isNull() const;
std::size_t getId() const;
std::shared_ptr<DG> getDG() const;
std::size_t numSources() const;
SourceRange sources() const;
std::size_t numTargets() const;
TargetRange targets() const;
RuleRange rules() const;
HyperEdge getInverse() const;
public:
std::vector<std::pair<std::string, std::string>>
print(const graph::Printer &printer, const std::string &nomatchColour, const std::string &matchColour) const;
private:
std::shared_ptr<DG> g;
std::size_t eId;
};
2.2.10.4.2.2. Details¶
-
HyperEdge
()¶ Constructs a null descriptor.
-
bool
isNull
() const¶ - Returns
whether this is a null descriptor or not.
-
std::size_t
getId
() const¶ - Returns
the index of the hyperedge. It will be in the range \([0, numVertices + numEdges[\).
- Throws
LogicError
if it is a null descriptor.
-
std::shared_ptr<DG>
getDG
() const¶ - Returns
the derivation graph the hyperedge belongs to.
- Throws
LogicError
if it is a null descriptor.
-
std::size_t
numSources
() const¶ - Returns
the number of sources of the hyperedge.
- Throws
LogicError
if it is a null descriptor.
-
SourceRange
sources
() const¶ - Returns
the sources of the hyperedge.
- Throws
LogicError
if it is a null descriptor.
-
std::size_t
numTargets
() const¶ - Returns
the number of targets of the hyperedge.
- Throws
LogicError
if it is a null descriptor.
-
TargetRange
targets
() const¶ - Returns
the targets of the hyperedge.
- Throws
LogicError
if it is a null descriptor.
-
RuleRange
rules
() const¶ - Returns
a range of the rules associated with the hyperedge.
- Throws
LogicError
if it is a null descriptor.
-
HyperEdge
getInverse
() const¶ - Returns
a descriptor for the inverse hyperedge of this one, if it exists. Otherwise a null descriptor is returned.
- Throws
LogicError
if it is a null descriptor.- Throws
LogicError
if notgetDG()->isLocked()
.
-
std::vector<std::pair<std::string, std::string>>
print
(const graph::Printer &printer, const std::string &nomatchColour, const std::string &matchColour) const¶ Print the derivations represented by the hyperedge. All possible Double-Pushout diagrams are printed. The
matchColour
must be a valid colour for TikZ, which is applied to the rule and its image in the bottom span.- Returns
A list with file data for each DPO diagram printed. Each element is a pair of filename prefixes, where the first entry is completed by appending
_derL
,_derK
, or_derR
. The second entry is completed similarly by appending_derG
,_derD
, or_derH
.- Throws
LogicError
if it is a null descriptor.- Throws
LogicError
if it has no rules.
2.2.10.4.3. Class dg::DG::VertexIterator
¶
-
class
dg::DG
::
VertexIterator
¶ An iterator for traversing all vertices in a derivation graph. It models a forward iterator.
2.2.10.4.3.1. Synopsis¶
class MOD_DECL DG::VertexIterator
: public boost::iterator_facade<VertexIterator, Vertex, std::forward_iterator_tag, Vertex> {
friend class DG;
VertexIterator(std::shared_ptr<DG> g);
public:
VertexIterator();
private:
friend class boost::iterator_core_access;
Vertex dereference() const;
bool equal(const VertexIterator &iter) const;
void increment();
private:
std::shared_ptr<DG> g;
std::size_t vId;
};
2.2.10.4.4. Class dg::DG::VertexRange
¶
2.2.10.4.4.1. Synopsis¶
struct DG::VertexRange {
using iterator = VertexIterator;
using const_iterator = iterator;
private:
friend class DG;
VertexRange(std::shared_ptr<DG> g);
public:
VertexIterator begin() const;
VertexIterator end() const;
private:
std::shared_ptr<DG> g;
};
2.2.10.4.5. Class dg::DG::EdgeIterator
¶
-
class
dg::DG
::
EdgeIterator
¶ An iterator for traversing all edges in a graph. It models a forward iterator.
2.2.10.4.5.1. Synopsis¶
class MOD_DECL DG::EdgeIterator
: public boost::iterator_facade<EdgeIterator, HyperEdge, std::forward_iterator_tag, HyperEdge> {
friend class DG;
EdgeIterator(std::shared_ptr<DG> g);
public:
EdgeIterator();
private:
friend class boost::iterator_core_access;
HyperEdge dereference() const;
bool equal(const EdgeIterator &iter) const;
void increment();
private:
std::shared_ptr<DG> g;
std::size_t eId;
};
2.2.10.4.6. Class dg::DG::EdgeRange
¶
2.2.10.4.6.1. Synopsis¶
struct DG::EdgeRange {
using iterator = EdgeIterator;
using const_iterator = iterator;
private:
friend class DG;
EdgeRange(std::shared_ptr<DG> g);
public:
EdgeIterator begin() const;
EdgeIterator end() const;
private:
std::shared_ptr<DG> g;
};
2.2.10.4.7. Class dg::DG::InEdgeIterator
¶
-
class
dg::DG
::
InEdgeIterator
¶ An iterator for enumerating all in-edges of a vertex. It models a forward iterator.
2.2.10.4.7.1. Synopsis¶
class MOD_DECL DG::InEdgeIterator
: public boost::iterator_facade<InEdgeIterator, HyperEdge, std::forward_iterator_tag, HyperEdge> {
friend class InEdgeRange;
InEdgeIterator(std::shared_ptr<DG> g, std::size_t vId);
public:
InEdgeIterator();
private:
friend class boost::iterator_core_access;
HyperEdge dereference() const;
bool equal(const InEdgeIterator &iter) const;
void increment();
private:
std::shared_ptr<DG> g;
std::size_t vId, eId;
};
2.2.10.4.8. Class dg::DG::InEdgeRange
¶
2.2.10.4.8.1. Synopsis¶
struct DG::InEdgeRange {
using iterator = InEdgeIterator;
using const_iterator = iterator;
private:
friend class Vertex;
InEdgeRange(std::shared_ptr<DG> g, std::size_t vId);
public:
InEdgeIterator begin() const;
InEdgeIterator end() const;
private:
std::shared_ptr<DG> g;
std::size_t vId;
};
2.2.10.4.9. Class dg::DG::OutEdgeIterator
¶
-
class
dg::DG
::
OutEdgeIterator
¶ An iterator for enumerating all out-edges of a vertex. It models a forward iterator.
2.2.10.4.9.1. Synopsis¶
class MOD_DECL DG::OutEdgeIterator
: public boost::iterator_facade<OutEdgeIterator, HyperEdge, std::forward_iterator_tag, HyperEdge> {
friend class OutEdgeRange;
OutEdgeIterator(std::shared_ptr<DG> g, std::size_t vId);
public:
OutEdgeIterator();
private:
friend class boost::iterator_core_access;
HyperEdge dereference() const;
bool equal(const OutEdgeIterator &iter) const;
void increment();
private:
std::shared_ptr<DG> g;
std::size_t vId, eId;
};
2.2.10.4.10. Class dg::DG::OutEdgeRange
¶
2.2.10.4.10.1. Synopsis¶
struct DG::OutEdgeRange {
using iterator = OutEdgeIterator;
using const_iterator = iterator;
private:
friend class Vertex;
OutEdgeRange(std::shared_ptr<DG> g, std::size_t vId);
public:
OutEdgeIterator begin() const;
OutEdgeIterator end() const;
private:
std::shared_ptr<DG> g;
std::size_t vId;
};
2.2.10.4.11. Class dg::DG::SourceIterator
¶
-
class
dg::DG
::
SourceIterator
¶ An iterator for enumerating all sources of a hyperedge. It models a forward iterator.
2.2.10.4.11.1. Synopsis¶
class MOD_DECL DG::SourceIterator
: public boost::iterator_facade<SourceIterator, Vertex, std::forward_iterator_tag, Vertex> {
friend class SourceRange;
SourceIterator(std::shared_ptr<DG> g, std::size_t eId);
public:
SourceIterator();
private:
friend class boost::iterator_core_access;
Vertex dereference() const;
bool equal(const SourceIterator &iter) const;
void increment();
private:
std::shared_ptr<DG> g;
std::size_t eId, vId;
};
2.2.10.4.12. Class dg::DG::SourceRange
¶
2.2.10.4.12.1. Synopsis¶
struct DG::SourceRange {
using iterator = SourceIterator;
using const_iterator = iterator;
private:
friend class HyperEdge;
SourceRange(std::shared_ptr<DG> g, std::size_t eId);
public:
SourceIterator begin() const;
SourceIterator end() const;
private:
std::shared_ptr<DG> g;
std::size_t eId;
};
2.2.10.4.13. Class dg::DG::TargetIterator
¶
-
class
dg::DG
::
TargetIterator
¶ An iterator for enumerating all targets of a hyperedge. It models a forward iterator.
2.2.10.4.13.1. Synopsis¶
class MOD_DECL DG::TargetIterator
: public boost::iterator_facade<TargetIterator, Vertex, std::forward_iterator_tag, Vertex> {
friend class TargetRange;
TargetIterator(std::shared_ptr<DG> g, std::size_t eId);
public:
TargetIterator();
private:
friend class boost::iterator_core_access;
Vertex dereference() const;
bool equal(const TargetIterator &iter) const;
void increment();
private:
std::shared_ptr<DG> g;
std::size_t eId, vId;
};
2.2.10.4.14. Class dg::DG::TargetRange
¶
2.2.10.4.14.1. Synopsis¶
struct DG::TargetRange {
using iterator = TargetIterator;
using const_iterator = iterator;
private:
friend class HyperEdge;
TargetRange(std::shared_ptr<DG> g, std::size_t eId);
public:
TargetIterator begin() const;
TargetIterator end() const;
private:
std::shared_ptr<DG> g;
std::size_t eId;
};
2.2.10.4.15. Class dg::DG::RuleIterator
¶
-
class
dg::DG
::
RuleIterator
¶ An iterator for enumerating all rules of a hyperedge. It models a forward iterator.
2.2.10.4.15.1. Synopsis¶
class MOD_DECL DG::RuleIterator
: public boost::iterator_facade<RuleIterator, std::shared_ptr<rule::Rule>, std::forward_iterator_tag, std::shared_ptr<rule::Rule> > {
friend class RuleRange;
RuleIterator(HyperEdge e);
public:
RuleIterator();
private:
friend class boost::iterator_core_access;
std::shared_ptr<rule::Rule> dereference() const;
bool equal(const RuleIterator &iter) const;
void increment();
private:
HyperEdge e;
std::size_t i;
};
2.2.10.4.16. Class dg::DG::RuleRange
¶
2.2.10.4.16.1. Synopsis¶
struct MOD_DECL DG::RuleRange {
using iterator = RuleIterator;
using const_iterator = iterator;
private:
friend class HyperEdge;
RuleRange(HyperEdge e);
public:
RuleIterator begin() const;
RuleIterator end() const;
std::size_t size() const;
private:
HyperEdge e;
};