Package ptolemy.actor.lib
Class UnionDisassembler
- java.lang.Object
-
- ptolemy.kernel.util.NamedObj
-
- ptolemy.kernel.InstantiableNamedObj
-
- ptolemy.kernel.Entity<T>
-
- ptolemy.kernel.ComponentEntity<T>
-
- ptolemy.actor.AtomicActor<TypedIOPort>
-
- ptolemy.actor.TypedAtomicActor
-
- ptolemy.actor.lib.UnionDisassembler
-
- All Implemented Interfaces:
java.lang.Cloneable
,Actor
,Executable
,FiringsRecordable
,Initializable
,TypedActor
,Changeable
,Debuggable
,DebugListener
,Derivable
,Instantiable
,ModelErrorHandler
,MoMLExportable
,Moveable
,Nameable
public class UnionDisassembler extends TypedAtomicActor
On each firing, read one UnionToken from the input port and send out the value to the output port that matches the label name of the input token. This actor is polymorphic. The labels for the UnionToken must match the names of the output ports. This is achieved using three type constraints:- input ≥ {|x = typeOf(outputPortX), y = typeOf(outputPortY), ..|}, which requires the types of the fields in the input union to be compatible with the corresponding output ports. This constraint is set in the constructor of this class.
- each output ≥ the type of the corresponding field inside the input union, which is similar to the usual default constraints, however this constraint establishes a dependency between fields inside the input union and the outputs, instead of just between inputs and outputs.
RecordDisassembler
to force the input to contain a corresponding field for each output port, is useless forUnionDisassembler
. This is due to the inverse width subtyping ofUnionToken
.- Since:
- Ptolemy II 5.2
- Version:
- $Id$
- Author:
- Yang Zhao, Marten Lohstroh
- See Also:
RecordDisassembler
,UnionType
- Pt.AcceptedRating:
- Red (cxh)
- Pt.ProposedRating:
- Yellow (marten)
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
-
-
Field Summary
Fields Modifier and Type Field Description TypedIOPort
input
The input port.-
Fields inherited from class ptolemy.actor.TypedAtomicActor
_typesValid
-
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
-
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
-
Fields inherited from interface ptolemy.actor.Executable
COMPLETED, NOT_READY, STOP_ITERATING
-
-
Constructor Summary
Constructors Constructor Description UnionDisassembler(CompositeEntity container, java.lang.String name)
Construct a UnionDisassembler with the given container and name.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.util.Set<Inequality>
_customTypeConstraints()
Set up and returns two type constraints.protected java.util.Set<Inequality>
_defaultTypeConstraints()
Do not establish the usual default type constraints.java.lang.Object
clone(Workspace workspace)
Clone the actor into the specified workspace.void
fire()
Read one UnionToken from the input port and send its fields to the output ports.void
notifyOfNameChange(NamedObj object)
React to a name change of contained ports.-
Methods inherited from class ptolemy.actor.TypedAtomicActor
_containedTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
-
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, initialize, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
-
Methods inherited from class ptolemy.kernel.ComponentEntity
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
-
Methods inherited from class ptolemy.kernel.Entity
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
-
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
-
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeChanged, attributeDeleted, attributeList, attributeList, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface ptolemy.actor.Actor
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
-
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
-
Methods inherited from interface ptolemy.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
-
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, initialize, preinitialize, removeInitializable, wrapup
-
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
-
-
-
-
Field Detail
-
input
public TypedIOPort input
The input port.
-
-
Constructor Detail
-
UnionDisassembler
public UnionDisassembler(CompositeEntity container, java.lang.String name) throws NameDuplicationException, IllegalActionException
Construct a UnionDisassembler with the given container and name.- Parameters:
container
- The container.name
- The name of this actor.- Throws:
IllegalActionException
- If this actor cannot be contained by the proposed container.NameDuplicationException
- If the container already has an actor with this name.
-
-
Method Detail
-
clone
public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
Clone the actor into the specified workspace.- Overrides:
clone
in classTypedAtomicActor
- Parameters:
workspace
- The workspace for the new object.- Returns:
- A new actor.
- Throws:
java.lang.CloneNotSupportedException
- If a derived class contains an attribute that cannot be cloned.- See Also:
NamedObj.exportMoML(Writer, int, String)
,NamedObj.setDeferringChangeRequests(boolean)
-
fire
public void fire() throws IllegalActionException
Read one UnionToken from the input port and send its fields to the output ports. If the input does not have a token, suspend firing and return.- Specified by:
fire
in interfaceExecutable
- Overrides:
fire
in classAtomicActor<TypedIOPort>
- Throws:
IllegalActionException
- If there is no director.
-
notifyOfNameChange
public void notifyOfNameChange(NamedObj object)
React to a name change of contained ports. Update the internal mapping from names and aliases to port objects, and invalidate the resolved types.- Overrides:
notifyOfNameChange
in classNamedObj
- Parameters:
object
- The object that changed.
-
_customTypeConstraints
protected java.util.Set<Inequality> _customTypeConstraints()
Set up and returns two type constraints.- input ≥ {|x = typeOf(outputPortX), y = typeOf(outputPortY) , ..|}, which requires the types of the fields in the input union to be compatible with the types of the corresponding output ports.
- each output ≥ the type of the corresponding field inside the input union, which is similar to the usual default constraints, however this constraint establishes a dependency between fields inside the input union and the outputs of this actor, instead of just between its inputs and outputs.
Note that the constraint input ≤ {|x = GENERAL, y = GENERAL, ..|} , which is used in RecordDisassembler to force the input to contain a corresponding field for each output port, is useless for UnionDisassembler. This is due to the inverse width subtyping of
UnionToken
.- Overrides:
_customTypeConstraints
in classTypedAtomicActor
- Returns:
- A set of Inequality instances
- See Also:
ConstructAssociativeType
,ExtractFieldType
-
_defaultTypeConstraints
protected java.util.Set<Inequality> _defaultTypeConstraints()
Do not establish the usual default type constraints.- Overrides:
_defaultTypeConstraints
in classTypedAtomicActor
- Returns:
- null
-
-