Package ptolemy.codegen.kernel

Examples of ptolemy.codegen.kernel.CodeGeneratorHelper$VariableScope


        Iterator refinements = container.deepEntityList().iterator();
        while (refinements.hasNext()) {
            boolean fireRefinement = true;
            refinementCount++;
            CompositeActor refinement = (CompositeActor) refinements.next();
            CodeGeneratorHelper refinementHelper = (CodeGeneratorHelper) _getHelper(refinement);
            String refinementName = refinement.getName();
            if (!refinementName.equals("default")) {
                if (useSwitch) {
                    code.append(_INDENT2 + "case " + refinementName + ":");
                } else {
                    if (refinementCount == 1) {
                        // Add String to the list of _newTypesUsed.
                        refinementHelper.addNewTypeUsed("String");
                        code.append(_INDENT2 + "if (!strcmp(");
                    } else {
                        code.append(_INDENT2 + "} else if (!strcmp(");
                    }
                    code.append(_codeGenerator
                            .generateVariableName(container.control)
                            + ".payload.String, "
                            + "\""
                            + refinementName
                            + "\")) {" + _eol);
                }
            } else {
                if (useSwitch) {
                    code.append(_INDENT2 + "default: ");
                } else {
                    defaultRefinement = refinement;
                    // Skip Firing the default refinement for now,
                    // we'll do it later.
                    fireRefinement = false;
                }
            }

            // Fire the refinement
            if (fireRefinement) {
                if (inline) {
                    code.append(refinementHelper.generateFireCode());
                    code.append(refinementHelper.generateTypeConvertFireCode());
                } else {
                    code.append(CodeGeneratorHelper.generateName(refinement)
                            + "();" + _eol);
                }
            }
            fireRefinement = true;

            if (useSwitch) {
                code.append(_INDENT2 + "break;" + _eol + _eol);
            }
        }

        if (defaultRefinement != null) {
            code.append(_INDENT2 + "} else {" + _eol);
            if (inline) {
                CodeGeneratorHelper defaultHelper = (CodeGeneratorHelper) _getHelper(defaultRefinement);
                code.append(defaultHelper.generateFireCode());
                code.append(defaultHelper.generateTypeConvertFireCode());
            } else {
                code.append(CodeGeneratorHelper.generateName(defaultRefinement)
                        + "();" + _eol);
            }
        }
View Full Code Here


            while (modifiedVariables.hasNext()) {
                // SetVariable needs this to be a Variable, not a Parameter.
                Variable variable = (Variable) modifiedVariables.next();

                NamedObj container = variable.getContainer();
                CodeGeneratorHelper containerHelper = (CodeGeneratorHelper) _getHelper(container);
                code.append(_INDENT1
                        + generateVariableName(variable)
                        + " = "
                        + containerHelper.getParameterValue(variable.getName(),
                                variable.getContainer()) + ";" + _eol);
            }
        }

        return code.toString();
View Full Code Here

        Iterator states = controller.entityList().iterator();
        while (states.hasNext()) {
            State state = (State) states.next();
            TypedActor[] actors = state.getRefinement();
            if (actors != null) {
                CodeGeneratorHelper refinementHelper = (CodeGeneratorHelper) _getHelper((NamedObj) actors[0]);
                int[][] rates = refinementHelper.getRates();
                if (rates != null) {
                    numberOfConfigurationsOfContainer += rates.length;
                } else {
                    numberOfConfigurationsOfContainer += 1;
                }
            }
        }

        int[][] containerRates = new int[numberOfConfigurationsOfContainer][];

        states = controller.entityList().iterator();
        int configurationNumber = 0;
        while (states.hasNext()) {
            State state = (State) states.next();
            TypedActor[] actors = state.getRefinement();
            if (actors != null) {
                CodeGeneratorHelper refinementHelper = (CodeGeneratorHelper) _getHelper((NamedObj) actors[0]);
                int[][] rates = refinementHelper.getRates();
                if (rates != null) {
                    for (int i = 0; i < rates.length; i++) {
                        // Extract the port rates from the current refinement
                        // and set the port rates of the modal model containing
                        // the refinement.
View Full Code Here

                        // we should only send data to the controller and the
                        // refinement corresponding to current state.
                        for (int m = 0; m < 2; m++) {

                            IOPort sinkPort = sinkPorts[m];
                            CodeGeneratorHelper helper = (CodeGeneratorHelper) _getHelper(sinkPort
                                    .getContainer());
                            code.append(CodeGeneratorHelper
                                    .generateName(sinkPort));

                            if (sinkPort.isMultiport()) {
                                code.append("[" + i + "]");
                            }

                            int sinkPortBufferSize = helper
                                    .getBufferSize(sinkPort);

                            if (sinkPortBufferSize > 1) {
                                String temp = "";
                                Object offsetObject = helper.getWriteOffset(
                                        sinkPort, i);
                                if (offsetObject instanceof Integer) {
                                    int offset = ((Integer) offsetObject)
                                            .intValue()
                                            + k;
                                    offset %= helper.getBufferSize(sinkPort, i);
                                    temp = Integer.toString(offset);
                                } else {
                                    int modulo = helper.getBufferSize(sinkPort,
                                            i) - 1;
                                    temp = "("
                                            + (String) helper.getWriteOffset(
                                                    sinkPort, i) + " + " + k
                                            + ")&" + modulo;
                                }
                                code.append("[" + temp + "]");
                            }
                            code.append(" = ");
                        }
                        code.append(containerHelper
                                .getReference(name + "," + k));
                        code.append(";" + _eol);
                    }

                    // Only update the port write offsets of the
                    // controller and the current refinement. The
                    // offset of the input port itself is updated by
                    // outside director.
                    for (int m = 0; m < 2; m++) {
                        IOPort sinkPort = sinkPorts[m];
                        CodeGeneratorHelper helper = (CodeGeneratorHelper) _getHelper(sinkPort
                                .getContainer());
                        Object offsetObject = helper
                                .getWriteOffset(sinkPort, i);
                        if (offsetObject instanceof Integer) {
                            int offset = ((Integer) offsetObject).intValue();
                            offset = (offset + rate)
                                    % helper.getBufferSize(sinkPort, i);
                            helper.setWriteOffset(sinkPort, i, Integer
                                    .valueOf(offset));
                        } else {
                            int modulo = helper.getBufferSize(sinkPort, i) - 1;
                            String offsetVariable = (String) helper
                                    .getWriteOffset(sinkPort, i);
                            code.append(offsetVariable + " = ("
                                    + offsetVariable + " + " + rate + ")&"
                                    + modulo + ";" + _eol);
                        }
View Full Code Here

        }

        Iterator actors = container.deepEntityList().iterator();
        while (actors.hasNext()) {
            Actor actor = (Actor) actors.next();
            CodeGeneratorHelper actorHelper = (CodeGeneratorHelper) _getHelper((NamedObj) actor);
            int[][] rates = actorHelper.getRates();
            // If a refinement has only one configuration, then there is no
            // need to use variables.
            if (!(actor instanceof Refinement && rates == null)) {
                Iterator inputPorts = actor.inputPortList().iterator();
                while (inputPorts.hasNext()) {
View Full Code Here

        // in each port for each configuration and then check if a
        // variable is needed for the offset. For now we always use
        // variables.

        StringBuffer code = new StringBuffer();
        CodeGeneratorHelper actorHelper = (CodeGeneratorHelper) _getHelper(port
                .getContainer());

        // When buffer size is no greater than 1, there is no need for
        // offset variable.
        if (actorHelper.getBufferSize(port) <= 1) {
            return code.toString();
        }

        int width = 0;
        if (port.isInput()) {
            width = port.getWidth();
        } else {
            width = port.getWidthInside();
        }
        for (int channel = 0; channel < width; channel++) {

            // Increase the buffer size of that channel to the power of two.
            int bufferSize = _ceilToPowerOfTwo(actorHelper.getBufferSize(port,
                    channel));
            actorHelper.setBufferSize(port, channel, bufferSize);

            StringBuffer channelReadOffset = new StringBuffer();
            StringBuffer channelWriteOffset = new StringBuffer();
            channelReadOffset.append(CodeGeneratorHelper.generateName(port));
            channelWriteOffset.append(CodeGeneratorHelper.generateName(port));

            if (width > 1) {
                channelReadOffset.append("_" + channel);
                channelWriteOffset.append("_" + channel);
            }

            channelReadOffset.append("_readOffset");
            channelWriteOffset.append("_writeOffset");

            String channelReadOffsetVariable = channelReadOffset.toString();
            String channelWriteOffsetVariable = channelWriteOffset.toString();

            code.append("static int " + channelReadOffsetVariable + " = "
                    + actorHelper.getReadOffset(port, channel) + ";" + _eol);
            code.append("static int " + channelWriteOffsetVariable + " = "
                    + actorHelper.getWriteOffset(port, channel) + ";" + _eol);

            // Now replace these concrete offsets with the variables.
            actorHelper.setReadOffset(port, channel, channelReadOffsetVariable);
            actorHelper.setWriteOffset(port, channel,
                    channelWriteOffsetVariable);
        }
        return code.toString();
    }
View Full Code Here

        CompositeActor container = (CompositeActor) director.getContainer();

        ptolemy.domains.fsm.kernel.FSMActor controller = director
                .getController();

        CodeGeneratorHelper refinementHelper = (CodeGeneratorHelper) _getHelper((NamedObj) refinement);

        CodeGeneratorHelper controllerHelper = (CodeGeneratorHelper) _getHelper(controller);

        CodeGeneratorHelper containerHelper = (CodeGeneratorHelper) _getHelper(container);

        List refinementPorts = ((Entity) refinement).portList();
        List controllerPorts = controller.portList();
        List containerPorts = container.portList();

        for (int i = 0; i < refinementPorts.size(); i++) {

            IOPort refinementPort = (IOPort) refinementPorts.get(i);
            IOPort controllerPort = (IOPort) controllerPorts.get(i);
            IOPort containerPort = (IOPort) containerPorts.get(i);

            // Update the corresponding controller port buffer size.
            // Notice that all channels have same buffer size.
            int oldSize = controllerHelper.getBufferSize(controllerPort, 0);
            if (oldSize < portRates[i]) {
                for (int j = 0; j < controllerPort.getWidth(); j++) {
                    controllerHelper.setBufferSize(controllerPort, j,
                            portRates[i]);
                }
            }

            if (refinementPort.isInput()) {
                // Update the input port buffer size of the refinement.
                oldSize = refinementHelper.getBufferSize(refinementPort, 0);
                if (oldSize < portRates[i]) {
                    for (int j = 0; j < refinementPort.getWidth(); j++) {
                        refinementHelper.setBufferSize(refinementPort, j,
                                portRates[i]);
                    }
                }
            } else {
                // Update the output port buffer size of the container actor.
                oldSize = containerHelper.getBufferSize(containerPort, 0);
                if (oldSize < portRates[i]) {
                    for (int j = 0; j < containerPort.getWidthInside(); j++) {
                        containerHelper.setBufferSize(containerPort, j,
                                portRates[i]);
                    }
                }
            }
        }
View Full Code Here

            Actor actor = firing.getActor();

            // FIXME: Before looking for a helper class, we should check to
            // see whether the actor contains a code generator attribute.
            // If it does, we should use that as the helper.
            CodeGeneratorHelper helper = (CodeGeneratorHelper) _getHelper((NamedObj) actor);

            if (inline) {
                for (int i = 0; i < firing.getIterationCount(); i++) {

                    // generate fire code for the actor
                    code.append(helper.generateFireCode());
                    code.append(helper.generateTypeConvertFireCode());

                    // update buffer offset after firing each actor once
                    Iterator inputPorts = actor.inputPortList().iterator();
                    while (inputPorts.hasNext()) {
                        IOPort port = (IOPort) inputPorts.next();
View Full Code Here

        code.append(str_director);
        /////
       
        ptolemy.actor.CompositeActor container = (ptolemy.actor.CompositeActor) getComponent()
                .getContainer();
        CodeGeneratorHelper containerHelper = (CodeGeneratorHelper) _getHelper(container);

        // Generate code for creating external initial production.
        Iterator outputPorts = container.outputPortList().iterator();
        while (outputPorts.hasNext()) {
            IOPort outputPort = (IOPort) outputPorts.next();
            int rate = DFUtilities.getTokenInitProduction(outputPort);

            if (rate > 0) {
                for (int i = 0; i < outputPort.getWidthInside(); i++) {
                    if (i < outputPort.getWidth()) {
                        String name = outputPort.getName();

                        if (outputPort.isMultiport()) {
                            name = name + '#' + i;
                        }

                        for (int k = 0; k < rate; k++) {
                            code.append(CodeStream.indent(containerHelper
                                    .getReference(name + "," + k)));
                            code.append(" = ");
                            code.append(containerHelper.getReference("@" + name
                                    + "," + k));
                            code.append(";" + _eol);
                        }
                    }
                }
View Full Code Here

     */
    protected String _createDynamicOffsetVariables(IOPort port)
            throws IllegalActionException {
        StringBuffer code = new StringBuffer();

        CodeGeneratorHelper helper = (CodeGeneratorHelper) _getHelper(port
                .getContainer());

        int width;
        if (port.isInput()) {
            width = port.getWidth();
        } else {
            width = port.getWidthInside();
        }

        if (width != 0) {
            // Declare the read offset variable.
            String channelReadOffset = CodeGeneratorHelper.generateName(port);
            channelReadOffset += "_readOffset";

            // Now replace the concrete offset with the variable.
            for (int i = 0; i < width; i++) {
                helper
                        .setReadOffset(port, i, channelReadOffset + "[" + i
                                + "]");
            }
            channelReadOffset += "[" + width + "]";
            code.append("static int " + channelReadOffset + ";\n");

            // Declare the write offset variable.
            String channelWriteOffset = CodeGeneratorHelper.generateName(port);

            channelWriteOffset += "_writeOffset";

            // Now replace the concrete offset with the variable.
            for (int i = 0; i < width; i++) {
                helper.setWriteOffset(port, i, channelWriteOffset + "[" + i
                        + "]");
            }
            channelWriteOffset += "[" + width + "]";
            code.append("static int " + channelWriteOffset + ";\n");
        }
View Full Code Here

TOP

Related Classes of ptolemy.codegen.kernel.CodeGeneratorHelper$VariableScope

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.