Static Value-Flow Analysis
Loading...
Searching...
No Matches
SVF::GenericGraphTraits< SVF::ThreadCallGraph * > Struct Reference

#include <ThreadCallGraph.h>

Inheritance diagram for SVF::GenericGraphTraits< SVF::ThreadCallGraph * >:
SVF::GenericGraphTraits< SVF::CallGraph * > SVF::GenericGraphTraits< SVF::GenericGraph< SVF::CallGraphNode, SVF::CallGraphEdge > * >

Public Types

using NodeRef
Public Types inherited from SVF::GenericGraphTraits< SVF::CallGraph * >
typedef SVF::CallGraphNode * NodeRef
Public Types inherited from SVF::GenericGraphTraits< SVF::GenericGraph< SVF::CallGraphNode, SVF::CallGraphEdge > * >
using NodeRef

Static Public Member Functions

static void getForkEdges (const SVF::ThreadCallGraph *graph, const SVF::CallICFGNode *callSite, std::vector< const SVF::CallGraphEdge * > &out)
static void getJoinEdges (const SVF::ThreadCallGraph *graph, const SVF::CallICFGNode *callSite, std::vector< const SVF::CallGraphEdge * > &out)
Static Public Member Functions inherited from SVF::GenericGraphTraits< SVF::CallGraph * >
static const SVF::CallGraphNode * getRawNode (const SVF::CallGraphNode *n)
static void getInEdges (const SVF::CallGraph *, const SVF::CallGraphNode *n, std::vector< const SVF::CallGraphEdge * > &out)
 In-edges of n under this graph (whole CallGraph: all of them).
static void getOutEdges (const SVF::CallGraph *, const SVF::CallGraphNode *n, std::vector< const SVF::CallGraphEdge * > &out)
static void getDirectCalls (const SVF::CallGraph *, const SVF::CallGraphEdge *e, std::vector< const SVF::CallICFGNode * > &out)
static void getIndirectCalls (const SVF::CallGraph *, const SVF::CallGraphEdge *e, std::vector< const SVF::CallICFGNode * > &out)
static bool containsCallSite (const SVF::CallGraph *, const SVF::CallGraphEdge *e, const SVF::CallICFGNode *callSite)
static void getCallees (SVF::CallGraph *g, const SVF::CallICFGNode *callSite, SVF::CallGraph::FunctionSet &callees)

Detailed Description

Thread-specific relations are indexed by callsite rather than represented uniformly in CallGraph node adjacency. In particular, ThreadJoinEdge is not added to adjacency because it would introduce artificial SCC cycles.

Definition at line 415 of file ThreadCallGraph.h.

Member Typedef Documentation

◆ NodeRef

Definition at line 80 of file GraphTraits.h.

Member Function Documentation

◆ getForkEdges()

void SVF::GenericGraphTraits< SVF::ThreadCallGraph * >::getForkEdges ( const SVF::ThreadCallGraph * graph,
const SVF::CallICFGNode * callSite,
std::vector< const SVF::CallGraphEdge * > & out )
inlinestatic

Definition at line 418 of file ThreadCallGraph.h.

421 {
422 out.clear();
423 if (!graph->hasThreadForkEdge(callSite))
424 return;
425 for (auto it = graph->getForkEdgeBegin(callSite),
426 end = graph->getForkEdgeEnd(callSite); it != end; ++it)
427 out.push_back(*it);
428 }

◆ getJoinEdges()

void SVF::GenericGraphTraits< SVF::ThreadCallGraph * >::getJoinEdges ( const SVF::ThreadCallGraph * graph,
const SVF::CallICFGNode * callSite,
std::vector< const SVF::CallGraphEdge * > & out )
inlinestatic

Definition at line 430 of file ThreadCallGraph.h.

433 {
434 out.clear();
435 if (!graph->hasThreadJoinEdge(callSite))
436 return;
437 for (auto it = graph->getJoinEdgeBegin(callSite),
438 end = graph->getJoinEdgeEnd(callSite); it != end; ++it)
439 out.push_back(*it);
440 }

The documentation for this struct was generated from the following file: