Package at.dms.kjc.iterator

Package Specification.

See:
          Description

Class Summary
FineGrainedIterFactory This class is a fine-grained iterator factory.
IterFactory This class is the outside interface for managing iterators.
Memoizer In this implementation, an object is memoized iff it is immutable.
SIRFeedbackLoopIter IterFactory uses this for SIRFeedbackLoop.
SIRFilterIter IterFactory uses this for SIRFilter.
SIRFineGrainedFeedbackLoopIter FineGrainedIterFactory uses this for SIRFeedbackLoop Includes extra methods as appropriate.
SIRFineGrainedSplitJoinIter FineGrainedIterFactory uses this for SIRSplitJoiner Includes extra methods as appropriate.
SIRIterator Abstract class from which 'Iter's inherit.
SIRPhasedFilterIter IterFactory uses this for SIRPhasedFilter.
SIRPipelineIter IterFactory uses this for SIRPipeline.
SIRRecursiveStubIter IterFactory uses this for SIRRecursiveStub.
SIRSplitJoinIter IterFactory uses this for SIRSplitJoin.
 

Package at.dms.kjc.iterator Description

Package Specification.

Provides a facility for iterating over the SIR structures that make up a StreamIt program after at.dms.kjc.Kopi2SIR has been run. These iterators were created to serve to primary functions:

Of these two intentions, only the first one is currently utilized. The classes in this package implement the iterator interfaces defined by the scheduler, and thus serve as a primary contact between the compiler and the scheduler. However, the memoization procedure (see Memoizer) has been deprecated.

Apart from interfacing with the scheduler, there is no particular reason to use iterators for traversing the stream graph. It is equally viable to perform manual recursion through the stream hierarchy.

The package should support all SIRStream constructs in the program. Support is included for SIRFilter, SIRPhasedFilter, SIRPipeline, SIRSplitJoin, SIRFeedbackLoop, and SIRRecursiveStub. The package currently does not iterate over SIRGlobals since they are not reachable from the root of the program.

The basis for using the iterator package IterFactory is something like:

SIRStream sir = ...;
StreamVisitor lowLevelVisitor = new EmptyStreamVisitor();
IterFactory.createFactory().createIter(str).accept(lowLevelVisitor);

The iterators created by IterFactory have certain useful methods: finding the SIRStream object currently being iterated over, finding its parent, determining its type, finding some parameters of the object, etc. StreamVisitor (and its subclasses) pass the iterator to the visiting methods, and

One common debugging idiom for dumping program contents is:

SIRPrinter printer1 = new SIRPrinter("after munging:");
IterFactory.createFactory().createIter(str).accept(printer1);
printer1.close();

(Another debugging idiom is to use SIRToStreamIt.)

Related Documentation.

None

See Also:
IterFactory, SIRPrinter