/** * Generate the preinitialize code. Declare temporary variables. * * @return The preinitialize code. * @exception IllegalActionException If the code stream encounters an error in processing the * specified code block(s). */ public String generatePreinitializeCode() throws IllegalActionException { // Automatically append the "preinitBlock" by default. super.generatePreinitializeCode(); ptolemy.actor.lib.PublisherTest actor = (ptolemy.actor.lib.PublisherTest) getComponent(); if (actor.input.getWidth() > 1) { ArrayList args = new ArrayList(); args.add(Integer.valueOf(0)); for (int i = 0; i < actor.input.getWidth(); i++) { args.set(0, Integer.valueOf(i)); _codeStream.appendCodeBlock("TokenPreinitBlock", args); } } for (int i = 0; i < actor.input.getWidth(); i++) { if (!isPrimitive(actor.input.getType())) { // One of the channels is not primitive, so we will // later call TokenBlock($channel), so we define // toleranceToken for our use. _codeStream.appendCodeBlock("toleranceTokenPreinitBlock"); break; } } return processCode(_codeStream.toString()); }
/** * Generate the initialize code. Declare the variable state. * * @return The initialize code. * @exception IllegalActionException */ public String generateInitializeCode() throws IllegalActionException { super.generateInitializeCode(); ptolemy.actor.lib.PublisherTest actor = (ptolemy.actor.lib.PublisherTest) getComponent(); for (int i = 0; i < actor.input.getWidth(); i++) { if (!isPrimitive(actor.input.getType())) { // One of the channels is not primitive, so we will // later call TokenBlock($channel), so we define // toleranceToken for our use. _codeStream.appendCodeBlock("toleranceTokenInitBlock"); break; } } return processCode(_codeStream.toString()); }
/** * Generate fire code. The method reads in <code>fireBlock</code> from PublisherTest.c, replaces * macros with their values and returns the processed code block. * * @return The generated code. * @exception IllegalActionException If the code stream encounters an error in processing the * specified code block(s). */ protected String _generateFireCode() throws IllegalActionException { super._generateFireCode(); ptolemy.actor.lib.PublisherTest actor = (ptolemy.actor.lib.PublisherTest) getComponent(); ArrayList args = new ArrayList(); args.add(Integer.valueOf(0)); for (int i = 0; i < actor.input.getWidth(); i++) { if (actor.output.numberOfSinks() > 0) { // Only transfer output if someone is listening to // this publisher. args.set(0, Integer.valueOf(i)); _codeStream.appendCodeBlock("fireBlock", args); } else { System.out.println("Warning, no one is listening to " + actor.getFullName()); } } String multiChannel = ""; String inputType = ""; if (actor.input.getWidth() > 1) { // If we have multiple inputs, use different blocks multiChannel = "MultiChannel"; // args.add(codeGenType(actor.input.getType())); } for (int i = 0; i < actor.input.getWidth(); i++) { args.set(0, Integer.valueOf(i)); if (isPrimitive(actor.input.getType())) { inputType = codeGenType(actor.input.getType()); } else { inputType = "Token"; } _codeStream.appendCodeBlock(inputType + "Block" + multiChannel, args); } return processCode(_codeStream.toString()); }