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< SimilaritySessionNode > GetNode (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 ()
BNSimilaritySessionGraph * GetObject () 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
BNSimilaritySessionGraph * m_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.