Package ptolemy.domains.modal.kernel
Class FSMCausalityInterface
- java.lang.Object
-
- ptolemy.actor.util.DefaultCausalityInterface
-
- ptolemy.actor.util.CausalityInterfaceForComposites
-
- ptolemy.domains.modal.kernel.FSMCausalityInterface
-
- All Implemented Interfaces:
CausalityInterface
public class FSMCausalityInterface extends CausalityInterfaceForComposites
This class infers the causality interface of an FSMActor by checking the guards and actions of the transitions. If any transition in the model has an output action that writes to a port and a guard that references an input port, then there is a direct dependency of that output on that input. Otherwise, there is no dependency. Note that this is a conservative analysis in that it may indicate a dependency when there is none. For example, if all outgoing transitions from a state produce the same output value, and a transition is always taken, then irrespective of the guards, the output has no dependency on the inputs. A precise analysis, however, is much more difficult (probably undecidable).All input ports that affect the state (i.e. that are mentioned in any guard) must be in an equivalence class. Otherwise, we cannot reliably make a decision about what the next state is. In addition, if any input in a refinement affects an output, that input must also be in this equivalence class. Otherwise, the scheduler will assume there is no relationship between these inputs and could provide an event that triggers a state transition in an earlier firing than an event that triggers an output from the current refinement.
- Since:
- Ptolemy II 8.0
- Version:
- $Id$
- Author:
- Edward A. Lee
- Pt.AcceptedRating:
- Red (eal)
- Pt.ProposedRating:
- Yellow (eal)
-
-
Field Summary
-
Fields inherited from class ptolemy.actor.util.CausalityInterfaceForComposites
_actorDepthVersion, _actorToDepth, _dependencyVersion, _equivalenceClasses, _forwardDependencies, _reverseDependencies
-
Fields inherited from class ptolemy.actor.util.DefaultCausalityInterface
_actor, _backwardPrunedDependencies, _defaultDependency, _delayDependencies, _EMPTY_COLLECTION, _forwardPrunedDependencies
-
-
Constructor Summary
Constructors Constructor Description FSMCausalityInterface(Actor actor, Dependency defaultDependency)
Construct a causality interface for the specified actor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Dependency
getDependency(IOPort input, IOPort output)
Return the dependency between the specified input port and the specified output port.-
Methods inherited from class ptolemy.actor.util.CausalityInterfaceForComposites
_computeActorDepth, checkForCycles, dependentPorts, describeDepths, equivalentPorts, getDepthOfActor, getDepthOfPort, invalidate, removeDependency, topologicalSort
-
Methods inherited from class ptolemy.actor.util.DefaultCausalityInterface
_growDependencies, declareDelayDependency, getActor, getDefaultDependency, toString
-
-
-
-
Constructor Detail
-
FSMCausalityInterface
public FSMCausalityInterface(Actor actor, Dependency defaultDependency) throws java.lang.IllegalArgumentException
Construct a causality interface for the specified actor.- Parameters:
actor
- The actor for which this is a causality interface. This is required to be an instance of CompositeEntity.defaultDependency
- The default dependency of an output port on an input port.- Throws:
java.lang.IllegalArgumentException
- If the actor parameter is not an instance of CompositeEntity.
-
-
Method Detail
-
getDependency
public Dependency getDependency(IOPort input, IOPort output) throws IllegalActionException
Return the dependency between the specified input port and the specified output port. This is done by checking the guards and actions of all the transitions. When called for the first time since a change in the model structure, this method performs the complete analysis of the FSM and caches the result. Subsequent calls just look up the result.- Specified by:
getDependency
in interfaceCausalityInterface
- Overrides:
getDependency
in classCausalityInterfaceForComposites
- Parameters:
input
- The input port.output
- The output port, or null to update the dependencies (and record equivalence classes) without requiring there to be an output port.- Returns:
- The dependency between the specified input port and the specified output port, or null if a null output is port specified.
- Throws:
IllegalActionException
- If a guard expression cannot be parsed.
-
-