This method is to be overriden and is expected to return the propagation elements on which the propagation structure will reason.
This method is to be overriden and is expected to return the propagation elements on which the propagation structure will reason. The method is expected to return consistent result once the setupPropagationStructure method is called
to active the debug mode
is to be set to true only if the static dependency graph is acyclic.
this variable is set by the propagation element to notify that they are propagating.
this variable is set by the propagation element to notify that they are propagating. it is used to ensure that no propagation element perform illegal operation such as writing a variable they do not control, etc)
requires that the propagation structure prints a trace of what it is doing.
This dumps the propagation graphs in a dot format, for documentation purposes Static graph should only be set if the static graph has not been dropped
This dumps the propagation graphs in a dot format, for documentation purposes Static graph should only be set if the static graph has not been dropped
adds the static graph as red arrows
adds the dynamic graph as blue arrows
a string that contains the dot format
returns the propagation element that is currently propagating.
returns the propagation element that is currently propagating. it allows one to ensure that the propagating element behaves as declared in its dependencies
return the summed stalls of all SCC.
return the summed stalls of all SCC. A stall is when the SCC is unable to maintain the topological sort incrementally, and must recompute it from scratch this happens when dependencies are modified with transient cycles
the summed number of stalls for all the SCC
true if the propagation structure consider that his graph is acyclic, false otherwise. call this after the call to setupPropagationStructure If the propagation structure has been created with NoCycle set to true, this will return true
triggers the propagation in the graph.
triggers the propagation in the graph. this method will do nothing if called before setupPropagationStructure if UpTo set to a PropagationElement, and provided it has been registered through the registerForPartialPropagation method, the propagation will be partial, targeting this element.
to call before setupPropagationStructure to specify PropagationElements on which one will invoque partial propagation
this method is used by propagationComponents to schedule themself for propagation.
To call when one has defined all the propagation elements on which propagation will ever be triggered.
To call when one has defined all the propagation elements on which propagation will ever be triggered. It must be called before any propagation is triggered, as it allows the propagation structure to build the necessary internal structures
if true, the propagation structure drops the static graph after setup.
This class manages propagation among propagation elements.
This class is intended to be extended, and the overriding class must implement the method getPropagationElements that returns the propagation elements to be considered Each propagation element has a UniqueID. Those should be assigned continuously starting from 0.
It is to be used as follows: once the set of propagation elements is stabilized, one must call setupPropagationStructure, which will built the necessary internal data structure propagation are triggered by calling the propagate method. additionally, before calling setupPropagationStructure, the method registerForPartialPropagation can be called to specify propagation elements that might require lazy propagation.
Two debug mechanisms are provided: trace printing and debug mode.
A trace printing is provided; the propagation structure prints a trace of what it is propagating. This is activated by the Verbose parameter. All prints are preceded by PropagationStruture This an be useful when checking the behavior of partial propagation.
A self-check method is called by the propagation structure after propagation is performed. This is activated by the DebugMode parameter. You should ensure that Asteroid is compiled with assert activated if you are using the debug mode. It will considerably slow down Asteroid, as other checks are implemented in the base modules.
Also, although this propagation structure is intended to support acyclic graph for the static dependency graph, you can deactivate the associated mechanism by setting the IsAcyclic graph to true. If unsure, set to false (or do not set; it is false by default), the engine will discover it by itself. See also method isAcyclic to query a propagation structure.