Loading...
Searching...
No Matches
BinaryNinja::SimilaritySessionGraph Class Reference

A graph that controls which binaries are compared and in what order. More...

Detailed Description

A graph that controls which binaries are compared and in what order.

The graph cannot contain cycles.

An edge from A to B makes A available as an incoming comparison node while B is processed.

Public Member Functions

 SimilaritySessionGraph (BNSimilaritySessionGraph *graph)
void AddNode (Ref< SimilaritySessionNode > node)
 Adds a node, moving it from its previous graph if necessary.
void RemoveNode (SimilaritySessionNode &node)
 Removes a node and its incident edges.
Ref< SimilaritySessionNodeGetNode (SimilaritySessionNodeId id)
 Returns a node, or `nullptr` if `id` is absent.
std::vector< Ref< SimilaritySessionNode > > GetNodes ()
bool IsValidEdge (SimilaritySessionNode &from, SimilaritySessionNode &to)
 Returns whether an edge joins two graph members without duplicating an edge or creating a cycle.
bool AddEdge (SimilaritySessionNode &from, SimilaritySessionNode &to)
 Adds an edge.
bool RemoveEdge (SimilaritySessionNode &from, SimilaritySessionNode &to)
 Removes an edge.
void AddReceiver (Ref< SimilaritySessionGraphReceiver > receiver)
void RemoveReceiver (SimilaritySessionGraphReceiver &receiver)
std::vector< Ref< SimilaritySessionGraphReceiver > > GetReceivers ()
std::vector< std::vector< Ref< SimilaritySessionNode > > > GetSchedule ()
 Returns groups of nodes in processing order.
Public Member Functions inherited from BinaryNinja::CoreRefCountObject< BNSimilaritySessionGraph, BNNewSimilaritySessionGraphReference, BNFreeSimilaritySessionGraph >
 CoreRefCountObject ()
virtual ~CoreRefCountObject ()
BNSimilaritySessionGraphGetObject () const
void AddRef ()
void Release ()
void AddRefForRegistration ()
void ReleaseForRegistration ()
void AddRefForCallback ()
void ReleaseForCallback ()

Additional Inherited Members

Public Attributes inherited from BinaryNinja::CoreRefCountObject< BNSimilaritySessionGraph, BNNewSimilaritySessionGraphReference, BNFreeSimilaritySessionGraph >
std::atomic< int > m_refs
bool m_registeredRef
BNSimilaritySessionGraphm_object

Constructor & Destructor Documentation

◆ SimilaritySessionGraph()

SimilaritySessionGraph::SimilaritySessionGraph ( BNSimilaritySessionGraph * graph)

Member Function Documentation

◆ AddNode()

void SimilaritySessionGraph::AddNode ( Ref< SimilaritySessionNode > node)

Adds a node, moving it from its previous graph if necessary.

If either graph is running, the node is unchanged.

◆ RemoveNode()

void SimilaritySessionGraph::RemoveNode ( SimilaritySessionNode & node)

Removes a node and its incident edges.

Graph mutations are ignored during a run.

◆ GetNode()

Ref< SimilaritySessionNode > SimilaritySessionGraph::GetNode ( SimilaritySessionNodeId id)

Returns a node, or `nullptr` if `id` is absent.

◆ GetNodes()

std::vector< Ref< SimilaritySessionNode > > SimilaritySessionGraph::GetNodes ( )

◆ IsValidEdge()

bool SimilaritySessionGraph::IsValidEdge ( SimilaritySessionNode & from,
SimilaritySessionNode & to )

Returns whether an edge joins two graph members without duplicating an edge or creating a cycle.

Returns false during a run.

◆ AddEdge()

bool SimilaritySessionGraph::AddEdge ( SimilaritySessionNode & from,
SimilaritySessionNode & to )

Adds an edge.

Returns false if invalid or while the graph is running.

◆ RemoveEdge()

bool SimilaritySessionGraph::RemoveEdge ( SimilaritySessionNode & from,
SimilaritySessionNode & to )

Removes an edge.

Returns false if absent or while the graph is running.

◆ AddReceiver()

void SimilaritySessionGraph::AddReceiver ( Ref< SimilaritySessionGraphReceiver > receiver)

◆ RemoveReceiver()

void SimilaritySessionGraph::RemoveReceiver ( SimilaritySessionGraphReceiver & receiver)

◆ GetReceivers()

std::vector< Ref< SimilaritySessionGraphReceiver > > SimilaritySessionGraph::GetReceivers ( )

◆ GetSchedule()

std::vector< std::vector< Ref< SimilaritySessionNode > > > SimilaritySessionGraph::GetSchedule ( )

Returns groups of nodes in processing order.

Nodes in the same group may run concurrently.