Skip to content

EvaluationOrder

INCLUDE FILE
#include "EvaluationOrder.h"

class EvaluationOrder

Class for determining the evaluation order of entities based on their dependencies.

It uses Kahn's algorithm to compute a topological sort of the entities, ensuring that each entity is evaluated only after all its dependencies have been evaluated.

DEFINITION
class EvaluationOrder;

class Nodeprivate

This represents a node in the dependency graph of entities to be evaluated.

DEFINITION
class Node;

constructor Node

Constructs a node for the given entity.

DEFINITION
Node ( Entity * entity );
PARAMETERDESCRIPTION
entity

The entity corresponding to this node.

method add_dependency

Adds a dependency to this node.

DEFINITION
void  add_dependency ( Node * node );
PARAMETERDESCRIPTION
node

The node that this node depends on.

method is_readyconst

Checks if this node is ready to be evaluated.

DEFINITION
bool  is_ready ( ) const;
RETURNSDESCRIPTION
bool

True if this node has no dependencies, false otherwise.

method remove_dependency

Removes a dependency from this node.

DEFINITION
void  remove_dependency ( Node * node );
PARAMETERDESCRIPTION
node

The node to remove from the dependencies.

member dependencies

The nodes that this node depends on.

DEFINITION
std::unordered_set< Node * >  dependencies;

member dependents

The nodes that depend on this node.

DEFINITION
std::unordered_set< Node * >  dependents;

member entity

The entity corresponding to this node.

DEFINITION
Entity * entity;

class TraversalPositionprivate

DEFINITION
class TraversalPosition;

constructor TraversalPosition

DEFINITION
TraversalPosition ( Node * node );
PARAMETERDESCRIPTION
node

method has_nextconst

DEFINITION
bool  has_next ( ) const;
RETURNSDESCRIPTION
bool

method next

DEFINITION
Node * next ( );
RETURNSDESCRIPTION
Node *

member dependency_it

DEFINITION
std::unordered_set< Node * >::const_iterator  dependency_it;

member node

DEFINITION
Node * node;

constructor EvaluationOrderprivate

Constructs an EvaluationOrder object with the given starting entities.

DEFINITION
EvaluationOrder ( std::vector< Entity * >  starting_entities );
PARAMETERDESCRIPTION
starting_entities

The entities to start the evaluation from.

method break_cycleprivate

Breaks a cycle in the dependency graph.

Report one cycle and break it.

DEFINITION
void  break_cycle ( );

method compute_orderprivate

Computes the evaluation order of the entities.

This method implements Kahn's algorithm to perform a topological sort of the entities based on their dependencies.

DEFINITION
void  compute_order ( );

method find_cycleprivate

DEFINITION
std::vector< Node * >  find_cycle ( );
RETURNSDESCRIPTION
std::vector< Node * >

method node_forprivate

Get a node for an entity in the dependency graph.

If the entity is already in the graph, its corresponding node is returned. Otherwise, a new node is created for the entity and added to the graph.

This method also recursively adds nodes for all dependencies of the entity to the graph.

DEFINITION
Node * node_for ( Entity * entity );
PARAMETERDESCRIPTION
entity

The entity to add.

RETURNSDESCRIPTION
Node *

The node corresponding to the added entity.

method orderstatic

Computes the evaluation order of the given starting entities.

The dependencies of the starting entities are recursively explored to determine the order in which they should be evaluated.

DEFINITION
static std::vector< Entity * >  order ( const std::vector< Entity * > & starting_entities );
PARAMETERDESCRIPTION
starting_entities

The entities to start the evaluation from.

RETURNSDESCRIPTION
std::vector< Entity * >

A vector of entities in the order they should be evaluated.

method place_nodeprivate

Places a node in the evaluation order.

This method adds the node's entity to the ordered_entities vector and removes the node from the dependency graph.

DEFINITION
void  place_node ( Node * node );
PARAMETERDESCRIPTION
node

The node to place in the evaluation order.

method remove_from_dependentsprivate

Removes a node from the dependencies of all its dependents.

It also moves all dependents that are now ready to be evaluated into the ready_nodes set.

DEFINITION
void  remove_from_dependents ( Node * node );
PARAMETERDESCRIPTION
node

The node to remove from its dependents.

member blocked_nodesprivate

The nodes that have dependencies and are not ready to be evaluated.

DEFINITION
std::unordered_set< Node * >  blocked_nodes;

member nodesprivate

DEFINITION
std::unordered_map< Entity *, Node >  nodes;

member ordered_entitiesprivate

The entities in the order they should be evaluated.

DEFINITION
std::vector< Entity * >  ordered_entities;

member ready_nodesprivate

The nodes that have no dependencies and are ready to be evaluated.

DEFINITION
std::unordered_set< Node * >  ready_nodes;

member sorted_entitiesprivate

The entities that have been added to the evaluation order.

These are stored as entities since their nodes are no longer needed and have been freed.

DEFINITION
std::unordered_set< Entity * >  sorted_entities;

class Nodeprivate

This represents a node in the dependency graph of entities to be evaluated.

DEFINITION
class Node;

constructor Node

Constructs a node for the given entity.

DEFINITION
Node ( Entity * entity );
PARAMETERDESCRIPTION
entity

The entity corresponding to this node.

method add_dependency

Adds a dependency to this node.

DEFINITION
void  add_dependency ( Node * node );
PARAMETERDESCRIPTION
node

The node that this node depends on.

method is_readyconst

Checks if this node is ready to be evaluated.

DEFINITION
bool  is_ready ( ) const;
RETURNSDESCRIPTION
bool

True if this node has no dependencies, false otherwise.

method remove_dependency

Removes a dependency from this node.

DEFINITION
void  remove_dependency ( Node * node );
PARAMETERDESCRIPTION
node

The node to remove from the dependencies.

member dependencies

The nodes that this node depends on.

DEFINITION
std::unordered_set< Node * >  dependencies;

member dependents

The nodes that depend on this node.

DEFINITION
std::unordered_set< Node * >  dependents;

member entity

The entity corresponding to this node.

DEFINITION
Entity * entity;

class TraversalPositionprivate

DEFINITION
class TraversalPosition;

constructor TraversalPosition

DEFINITION
TraversalPosition ( Node * node );
PARAMETERDESCRIPTION
node

method has_nextconst

DEFINITION
bool  has_next ( ) const;
RETURNSDESCRIPTION
bool

method next

DEFINITION
Node * next ( );
RETURNSDESCRIPTION
Node *

member dependency_it

DEFINITION
std::unordered_set< Node * >::const_iterator  dependency_it;

member node

DEFINITION
Node * node;