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:

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: