ptolemy.actor.lib.comm
Class HuffmanBasic

java.lang.Object
  extended by ptolemy.kernel.util.NamedObj
      extended by ptolemy.kernel.InstantiableNamedObj
          extended by ptolemy.kernel.Entity
              extended by ptolemy.kernel.ComponentEntity
                  extended by ptolemy.actor.AtomicActor
                      extended by ptolemy.actor.TypedAtomicActor
                          extended by ptolemy.actor.lib.Transformer
                              extended by ptolemy.actor.lib.comm.HuffmanBasic
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable
Direct Known Subclasses:
HuffmanCoder, HuffmanDecoder

public class HuffmanBasic
extends Transformer

Given a probability distribution, generate the Huffman code book. The probability distribution is given by the pmf parameter. The corresponding alphabet is given by the alphabet parameter. The code book is in a format of an array of strings, each string consists of '0' and '1's. The code book is sent to the huffmanCodeBook output port.

Since:
Ptolemy II 4.1
Version:
$Id: HuffmanBasic.java 57040 2010-01-27 20:52:32Z cxh $
Author:
Ye Zhou
See Also:
Serialized Form
Accepted Rating:
Red (cxh)
Proposed Rating:
Red (zhouye)

Nested Class Summary
static class HuffmanBasic.Node
          A class that defines the node in binary tree that is used to construct the codebook of Huffman code.
 
Nested classes/interfaces inherited from class ptolemy.kernel.Entity
Entity.ContainedObjectsIterator
 
Field Summary
protected  java.lang.String[] _codeBook
          The huffman code book.
protected  boolean _parametersInvalid
          Flag that indicates if the parameters are invalid.
protected  double[] _pmf
          The probability mass function.
 Parameter alphabet
          The alphabet of the input.
 TypedIOPort huffmanCodeBook
          A port that produces the Huffman code book generated based on the probability mass function.
 Parameter pmf
          The probability mass function.
 
Fields inherited from class ptolemy.actor.lib.Transformer
input, output
 
Fields inherited from class ptolemy.actor.AtomicActor
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
 
Fields inherited from class ptolemy.kernel.util.NamedObj
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _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
HuffmanBasic(CompositeEntity container, java.lang.String name)
          Construct an actor with the given container and name.
 
Method Summary
private  HuffmanBasic.Node _findMinNode(java.util.LinkedList list)
          Find the node with the minimum probability value in the given linked list.
private  void _setCode(HuffmanBasic.Node node, java.lang.String[] codeBook)
          Set the Huffman codeword for the given node and all its children.
 void attributeChanged(Attribute attribute)
          If the attribute being changed is pmf, then verify all the elements are positive and their sum is 1.0.
 java.lang.Object clone(Workspace workspace)
          Override the base class to set type constraints.
 void fire()
          Generate the Huffman codebook for the given pmf, and encode the input into booleans and send them to the output port.
 java.lang.String[] generateCodeBook(double[] pmf)
          Generate the Huffman code book given the probability mass function.
 void initialize()
          Initialize the actor by resetting the _parametersInvalid to true.
 
Methods inherited from class ptolemy.actor.TypedAtomicActor
_addPort, _fireAt, _fireAt, attributeTypeChanged, clone, newPort, typeConstraintList, typeConstraints
 
Methods inherited from class ptolemy.actor.AtomicActor
_actorFiring, _actorFiring, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, 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
_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, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _recordDecoratedAttributes, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, 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, removeChangeListener, removeDebugListener, 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.actor.Executable
isFireFunctional, isStrict, iterate, postfire, prefire, stop, stopFire, terminate
 
Methods inherited from interface ptolemy.actor.Initializable
addInitializable, preinitialize, removeInitializable, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, getDisplayName, getFullName, getName, getName, setName
 
Methods inherited from interface ptolemy.kernel.util.Derivable
getDerivedLevel, getDerivedList, propagateValue
 

Field Detail

pmf

public Parameter pmf
The probability mass function. This parameter is an array of doubles. Each element should be positive and the sum of all elements should be 1.0. The default value is {0.5, 0.5}.


alphabet

public Parameter alphabet
The alphabet of the input. This parameter is an ArrayToken. Its default value is {0, 1}.


huffmanCodeBook

public TypedIOPort huffmanCodeBook
A port that produces the Huffman code book generated based on the probability mass function. It is an array of strings.


_codeBook

protected java.lang.String[] _codeBook
The huffman code book.


_parametersInvalid

protected boolean _parametersInvalid
Flag that indicates if the parameters are invalid. If it is true, then a new code book needs to be generated.


_pmf

protected double[] _pmf
The probability mass function.

Constructor Detail

HuffmanBasic

public HuffmanBasic(CompositeEntity container,
                    java.lang.String name)
             throws NameDuplicationException,
                    IllegalActionException
Construct an actor with the given container and name. The output and trigger ports are also constructed.

Parameters:
container - The container.
name - The name of this actor.
Throws:
IllegalActionException - If the entity 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
Override the base class to set type constraints.

Overrides:
clone in class AtomicActor
Parameters:
workspace - The workspace for the new object.
Returns:
A new instance of ArrayElement.
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)

attributeChanged

public void attributeChanged(Attribute attribute)
                      throws IllegalActionException
If the attribute being changed is pmf, then verify all the elements are positive and their sum is 1.0.

Overrides:
attributeChanged in class NamedObj
Parameters:
attribute - The attribute that changed.
Throws:
IllegalActionException - If any element in pmf is non-positive or the sum is not 1.0.

fire

public void fire()
          throws IllegalActionException
Generate the Huffman codebook for the given pmf, and encode the input into booleans and send them to the output port.

Specified by:
fire in interface Executable
Overrides:
fire in class AtomicActor
Throws:
IllegalActionException - Not thrown in this base class.

generateCodeBook

public java.lang.String[] generateCodeBook(double[] pmf)
Generate the Huffman code book given the probability mass function.

Parameters:
pmf - The probability mass function.
Returns:
The code book, where each codeword is a string of '0' and '1'.

initialize

public void initialize()
                throws IllegalActionException
Initialize the actor by resetting the _parametersInvalid to true. Creat a linked list to store the nodes for the binary tree.

Specified by:
initialize in interface Initializable
Overrides:
initialize in class AtomicActor
Throws:
IllegalActionException - If the parent class throws it.

_findMinNode

private HuffmanBasic.Node _findMinNode(java.util.LinkedList list)
Find the node with the minimum probability value in the given linked list.

Parameters:
list - The given linked list.
Returns:
The node with the minimum probability value.

_setCode

private void _setCode(HuffmanBasic.Node node,
                      java.lang.String[] codeBook)
Set the Huffman codeword for the given node and all its children.

Parameters:
node - The given node.
codeBook - The code book to be generated.