ptolemy.actor.lib.comm
Class HuffmanBasic

java.lang.Object
  extended byptolemy.kernel.util.NamedObj
      extended byptolemy.kernel.InstantiableNamedObj
          extended byptolemy.kernel.Entity
              extended byptolemy.kernel.ComponentEntity
                  extended byptolemy.actor.AtomicActor
                      extended byptolemy.actor.TypedAtomicActor
                          extended byptolemy.actor.lib.Transformer
                              extended byptolemy.actor.lib.comm.HuffmanBasic
All Implemented Interfaces:
Actor, Changeable, java.lang.Cloneable, Debuggable, DebugListener, Derivable, Executable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable, java.io.Serializable, TypedActor
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,v 1.16 2005/04/29 20:04:34 cxh Exp $
Author:
Ye Zhou
See Also:
Serialized Form
Accepted Rating:
Red (cxh)
Proposed Rating:
Red (zhouye)

Nested Class Summary
 class HuffmanBasic.Node
          A class that defines the node in binary tree that is used to construct the codebook of Huffman code.
 
Nested classes 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
_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
 void attributeChanged(Attribute attribute)
          If the attribute being changed is pmf, then verify all the elements are positive and their sum is 1.0.
 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, attributeTypeChanged, clone, newPort, typeConstraintList
 
Methods inherited from class ptolemy.actor.AtomicActor
_createReceivers, clone, connectionsChanged, getDirector, getExecutiveDirector, getFunctionDependency, getManager, inputPortList, iterate, newReceiver, outputPortList, postfire, prefire, preinitialize, pruneDependencies, removeDependency, 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, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName, validateSettables
 
Methods inherited from class ptolemy.kernel.InstantiableNamedObj
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition
 
Methods inherited from class ptolemy.kernel.util.NamedObj
_addAttribute, _attachText, _cloneFixAttributeFields, _debug, _debug, _debug, _debug, _debug, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, attributeList, attributeList, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, getAttribute, getAttributes, getChangeListeners, getClassName, getDerivedLevel, getDerivedList, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, message, propagateValue, propagateValues, removeChangeListener, removeDebugListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setModelErrorHandler, setNormalDebugging, setPersistent, setSource, setVerboseDebugging, sortContainedObjects, toplevel, toString, workspace
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface ptolemy.actor.Actor
getDirector, getExecutiveDirector, getFunctionDependency, getManager, inputPortList, newReceiver, outputPortList
 
Methods inherited from interface ptolemy.actor.Executable
iterate, postfire, prefire, preinitialize, stop, stopFire, terminate, wrapup
 
Methods inherited from interface ptolemy.kernel.util.Nameable
description, getContainer, 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

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 Executable
Overrides:
initialize in class AtomicActor
Throws:
IllegalActionException - If the parent class throws it.