예제 #1
0
  /**
   * 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());
  }
예제 #2
0
  /**
   * 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());
  }
예제 #3
0
  /**
   * 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());
  }