LLVM: llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI (original) (raw)
A Graph object represents a Directed Graph and is used in XRay to compute and store function call graphs and associated statistical information. More...
#include "[llvm/XRay/Graph.h](XRay%5F2Graph%5F8h%5Fsource.html)"
| Classes | |
|---|---|
| class | EdgeView |
| A class for ranging over all the edges in the graph. More... | |
| class | InOutEdgeView |
| A class for ranging over the incoming edges incident to a vertex. More... | |
| class | VertexView |
| A class for ranging over the vertices in the graph. More... |
| Public Types | |
|---|---|
| typedef VI | VertexIdentifier |
| These objects are used to name edges and vertices in the graph. | |
| typedef std::pair< VI, VI > | EdgeIdentifier |
| using | VertexValueType |
| This type is the value_type of all iterators which range over vertices, Determined by the Vertices DenseMap. | |
| using | EdgeValueType = detail::DenseMapPair<EdgeIdentifier, EdgeAttribute> |
| This type is the value_type of all iterators which range over edges, Determined by the Edges DenseMap. | |
| using | size_type = std::size_t |
| using | ConstInEdgeIterator = NeighborEdgeIteratorT<true, false> |
| A const iterator type for iterating through the set of edges entering a vertex. | |
| using | InEdgeIterator = NeighborEdgeIteratorT<false, false> |
| An iterator type for iterating through the set of edges leaving a vertex. | |
| using | ConstOutEdgeIterator = NeighborEdgeIteratorT<true, true> |
| A const iterator type for iterating through the set of edges entering a vertex. | |
| using | OutEdgeIterator = NeighborEdgeIteratorT<false, true> |
| An iterator type for iterating through the set of edges leaving a vertex. | |
| using | ConstVertexIterator = typename VertexMapT::const_iterator |
| A const iterator type for iterating through the whole vertex set of the graph. | |
| using | VertexIterator = typename VertexMapT::iterator |
| An iterator type for iterating through the whole vertex set of the graph. | |
| using | ConstEdgeIterator = typename EdgeMapT::const_iterator |
| A const iterator for iterating through the entire edge set of the graph. | |
| using | EdgeIterator = typename EdgeMapT::iterator |
| An iterator for iterating through the entire edge set of the graph. |
| Public Member Functions | |
|---|---|
| void | clear () |
| Empty the Graph. | |
| VertexView< false > | vertices () |
| Returns a view object allowing iteration over the vertices of the graph. | |
| VertexView< true > | vertices () const |
| EdgeView< false > | edges () |
| Returns a view object allowing iteration over the edges of the graph. | |
| EdgeView< true > | edges () const |
| InOutEdgeView< false, true > | outEdges (const VertexIdentifier I) |
| Returns a view object allowing iteration over the edges which start at a vertex I. | |
| InOutEdgeView< true, true > | outEdges (const VertexIdentifier I) const |
| InOutEdgeView< false, false > | inEdges (const VertexIdentifier I) |
| Returns a view object allowing iteration over the edges which point to a vertex I. | |
| InOutEdgeView< true, false > | inEdges (const VertexIdentifier I) const |
| VertexAttribute & | operator[] (const VertexIdentifier &I) |
| Looks up the vertex with identifier I, if it does not exist it default constructs it. | |
| EdgeAttribute & | operator[] (const EdgeIdentifier &I) |
| Looks up the edge with identifier I, if it does not exist it default constructs it, if it's endpoints do not exist it also default constructs them. | |
| Expected< VertexAttribute & > | at (const VertexIdentifier &I) |
| Looks up a vertex with Identifier I, or an error if it does not exist. | |
| Expected< const VertexAttribute & > | at (const VertexIdentifier &I) const |
| Expected< EdgeAttribute & > | at (const EdgeIdentifier &I) |
| Looks up an edge with Identifier I, or an error if it does not exist. | |
| Expected< const EdgeAttribute & > | at (const EdgeIdentifier &I) const |
| size_type | count (const VertexIdentifier &I) const |
| Looks for a vertex with identifier I, returns 1 if one exists, and 0 otherwise. | |
| size_type | count (const EdgeIdentifier &I) const |
| Looks for an edge with Identifier I, returns 1 if one exists and 0 otherwise. | |
| std::pair< VertexIterator, bool > | insert (const std::pair< VertexIdentifier, VertexAttribute > &Val) |
| Inserts a vertex into the graph with Identifier Val.first, and Attribute Val.second. | |
| std::pair< VertexIterator, bool > | insert (std::pair< VertexIdentifier, VertexAttribute > &&Val) |
| std::pair< EdgeIterator, bool > | insert (const std::pair< EdgeIdentifier, EdgeAttribute > &Val) |
| Inserts an edge into the graph with Identifier Val.first, and Attribute Val.second. | |
| std::pair< EdgeIterator, bool > | insert (std::pair< EdgeIdentifier, EdgeAttribute > &&Val) |
| Inserts an edge into the graph with Identifier Val.first, and Attribute Val.second. |
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
class llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >
A Graph object represents a Directed Graph and is used in XRay to compute and store function call graphs and associated statistical information.
The graph takes in four template parameters, these are:
- VertexAttribute, this is a structure which is stored for each vertex. Must be DefaultConstructible, CopyConstructible, CopyAssignable and Destructible.
- EdgeAttribute, this is a structure which is stored for each edge Must be DefaultConstructible, CopyConstructible, CopyAssignable and Destructible.
- EdgeAttribute, this is a structure which is stored for each variable
- VI, this is a type over which DenseMapInfo is defined and is the type used look up strings, available as VertexIdentifier.
- If the built in DenseMapInfo is not defined, provide a specialization class type here.
Graph is CopyConstructible, CopyAssignable, MoveConstructible and MoveAssignable but is not EqualityComparible or LessThanComparible.
Usage Example Graph with weighted edges and vertices: Graph<int, int, int> G;
G[1] = 0; G[2] = 2; G[{1,2}] = 1; G[{2,1}] = -1; for(const auto &v : G.vertices()){ // Do something with the vertices in the graph; } for(const auto &e : G.edges()){ // Do something with the edges in the graph; }
Usage Example with StrRef keys. Graph<int, double, StrRef> StrG; char va[] = "Vertex A"; char vaa[] = "Vertex A"; char vb[] = "Vertex B"; // Vertices are referenced by String Refs. G[va] = 0; G[vb] = 1; G[{va, vb}] = 1.0; cout() << G[vaa] << " " << G[{vaa, vb}]; //prints "0 1.0".
Definition at line 73 of file Graph.h.
◆ ConstEdgeIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
A const iterator for iterating through the entire edge set of the graph.
Has a const EdgeValueType as its value_type
Definition at line 297 of file Graph.h.
◆ ConstInEdgeIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
using llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::ConstInEdgeIterator = NeighborEdgeIteratorT<true, false>
A const iterator type for iterating through the set of edges entering a vertex.
Has a const EdgeValueType as its value_type
Definition at line 174 of file Graph.h.
◆ ConstOutEdgeIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
using llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::ConstOutEdgeIterator = NeighborEdgeIteratorT<true, true>
A const iterator type for iterating through the set of edges entering a vertex.
Has a const EdgeValueType as its value_type
Definition at line 185 of file Graph.h.
◆ ConstVertexIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
A const iterator type for iterating through the whole vertex set of the graph.
Has a const VertexValueType as its value_type
Definition at line 260 of file Graph.h.
◆ EdgeIdentifier
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
typedef std::pair<VI, VI> llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::EdgeIdentifier
Definition at line 77 of file Graph.h.
◆ EdgeIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
An iterator for iterating through the entire edge set of the graph.
Has an EdgeValueType as its value_type
Definition at line 302 of file Graph.h.
◆ EdgeValueType
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
This type is the value_type of all iterators which range over edges, Determined by the Edges DenseMap.
Definition at line 86 of file Graph.h.
◆ InEdgeIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
using llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::InEdgeIterator = NeighborEdgeIteratorT<false, false>
An iterator type for iterating through the set of edges leaving a vertex.
Has an EdgeValueType as its value_type
Definition at line 179 of file Graph.h.
◆ OutEdgeIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
using llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::OutEdgeIterator = NeighborEdgeIteratorT<false, true>
An iterator type for iterating through the set of edges leaving a vertex.
Has an EdgeValueType as its value_type
Definition at line 190 of file Graph.h.
◆ size_type
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
using llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::size_type = std::size_t
Definition at line 88 of file Graph.h.
◆ VertexIdentifier
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
These objects are used to name edges and vertices in the graph.
Definition at line 76 of file Graph.h.
◆ VertexIterator
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
An iterator type for iterating through the whole vertex set of the graph.
Has a VertexValueType as its value_type
Definition at line 265 of file Graph.h.
◆ VertexValueType
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Initial value:
This type is the value_type of all iterators which range over vertices, Determined by the Vertices DenseMap.
Definition at line 81 of file Graph.h.
◆ at() [1/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Looks up an edge with Identifier I, or an error if it does not exist.
Definition at line 413 of file Graph.h.
References I, and llvm::make_error().
◆ at() [2/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
◆ at() [3/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Looks up a vertex with Identifier I, or an error if it does not exist.
Definition at line 394 of file Graph.h.
References I, and llvm::make_error().
◆ at() [4/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
◆ clear()
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
◆ count() [1/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Looks for an edge with Identifier I, returns 1 if one exists and 0 otherwise.
Definition at line 439 of file Graph.h.
References I.
◆ count() [2/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Looks for a vertex with identifier I, returns 1 if one exists, and 0 otherwise.
Definition at line 433 of file Graph.h.
References I.
◆ edges() [1/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Returns a view object allowing iteration over the edges of the graph.
also allows access to the size of the edge set.
Definition at line 354 of file Graph.h.
◆ edges() [2/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
◆ inEdges() [1/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Returns a view object allowing iteration over the edges which point to a vertex I.
Definition at line 370 of file Graph.h.
References I.
◆ inEdges() [2/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
◆ insert() [1/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Inserts an edge into the graph with Identifier Val.first, and Attribute Val.second.
If the key is already in the map, it returns false and doesn't update the value.
Definition at line 457 of file Graph.h.
◆ insert() [2/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Inserts a vertex into the graph with Identifier Val.first, and Attribute Val.second.
Definition at line 444 of file Graph.h.
◆ insert() [3/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
| std::pair< EdgeIterator, bool > llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::insert ( std::pair< EdgeIdentifier, EdgeAttribute > && Val) | inline |
|---|
Inserts an edge into the graph with Identifier Val.first, and Attribute Val.second.
If the key is already in the map, it returns false and doesn't update the value.
Definition at line 474 of file Graph.h.
◆ insert() [4/4]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
| std::pair< VertexIterator, bool > llvm::xray::Graph< VertexAttribute, EdgeAttribute, VI >::insert ( std::pair< VertexIdentifier, VertexAttribute > && Val) | inline |
|---|
◆ operator[]() [1/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Looks up the edge with identifier I, if it does not exist it default constructs it, if it's endpoints do not exist it also default constructs them.
Definition at line 385 of file Graph.h.
References I.
◆ operator[]() [2/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Looks up the vertex with identifier I, if it does not exist it default constructs it.
Definition at line 380 of file Graph.h.
References I.
◆ outEdges() [1/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Returns a view object allowing iteration over the edges which start at a vertex I.
Definition at line 360 of file Graph.h.
References I.
◆ outEdges() [2/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
◆ vertices() [1/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
Returns a view object allowing iteration over the vertices of the graph.
also allows access to the size of the vertex set.
Definition at line 348 of file Graph.h.
◆ vertices() [2/2]
template<typename VertexAttribute, typename EdgeAttribute, typename VI = int32_t>
The documentation for this class was generated from the following file:
- include/llvm/XRay/Graph.h