}
for (int j = 0; j < width; j++) {
Iterator channels = helper.getSinkChannels(
sourcePort, j).iterator();
while (channels.hasNext()) {
Channel channel = (Channel) channels.next();
if (channel.port == outputPort
&& channel.channelNumber == i) {
writeTokens = DFUtilities
.getRate(sourcePort);
break label1;
}
}
}
}
}
tempCode.append(_createOffsetVariablesIfNeeded(outputPort,
i, readTokens, writeTokens));
}
}
}
if (tempCode.length() > 0) {
code.append("\n"
+ _codeGenerator.comment(container.getName()
+ "'s offset variables"));
code.append(tempCode);
}
Iterator actors = container.deepEntityList().iterator();
while (actors.hasNext()) {
StringBuffer tempCode2 = new StringBuffer();
Actor actor = (Actor) actors.next();
Iterator inputPorts = actor.inputPortList().iterator();
while (inputPorts.hasNext()) {
IOPort inputPort = (IOPort) inputPorts.next();
// If dynamic references are desired, conditionally pad buffers
// and append the dynamic offset variables for input ports.
if (dynamicReferencesAllowed) {
if (padBuffers) {
for (int i = 0; i < inputPort.getWidth(); i++) {
_padBuffer(inputPort, i);
}
}
tempCode2.append(_createDynamicOffsetVariables(inputPort));
// Otherwise, append the offset variables (padding is handled
// in _createOffsetVariablesIfNeeded()) for input ports.
} else {
for (int i = 0; i < inputPort.getWidth(); i++) {
int readTokens = 0;
int writeTokens = 0;
// If each actor firing is inlined in the code,
// then read and write positions in the buffer
// must return to the previous values after one
// iteration of the container actor in order to
// avoid using read and write offset variables.
if (inline) {
Variable firings = (Variable) ((NamedObj) actor)
.getAttribute("firingsPerIteration");
int firingsPerIteration = ((IntToken) firings
.getToken()).intValue();
readTokens = DFUtilities.getRate(inputPort)
* firingsPerIteration;
writeTokens = readTokens;
// If each actor firing is wrapped in a
// function, then read and write positions in
// the buffer must return to the previous
// values after one firing of this actor or
// one firing of the actor that produces
// tokens consumed by this actor in order to
// avoid using read and write offset
// variables.
} else {
readTokens = DFUtilities.getRate(inputPort);
Iterator sourcePorts = inputPort.sourcePortList()
.iterator();
label2: while (sourcePorts.hasNext()) {
IOPort sourcePort = (IOPort) sourcePorts.next();
CodeGeneratorHelper helper = (CodeGeneratorHelper) _getHelper(sourcePort
.getContainer());
int width;
if (sourcePort.isInput()) {
width = sourcePort.getWidthInside();
} else {
width = sourcePort.getWidth();
}
for (int j = 0; j < width; j++) {
Iterator channels = helper.getSinkChannels(
sourcePort, j).iterator();
while (channels.hasNext()) {
Channel channel = (Channel) channels
.next();
if (channel.port == inputPort
&& channel.channelNumber == i) {
writeTokens = DFUtilities
.getRate(sourcePort);