/** * Consume a single IntToken on the input. Produce <i>numberOfBits</i> BooleanTokens on the output * port which is the bitwise representation of the input IntToken. The most significant bit (the * sign bit) is the first boolean token send out. The least significant bit is the last boolean * token send out. * * @exception IllegalActionException If there is no director. or if the input integer is out of * range. */ public final void fire() throws IllegalActionException { super.fire(); int rate = ((IntToken) numberOfBits.getToken()).intValue(); BooleanToken[] bits = new BooleanToken[rate]; IntToken token = (IntToken) (input.get(0)); int integer = token.intValue(); if (integer < 0) { if (integer < -(1 << (rate - 1))) { throw new IllegalActionException(this, "integer is out of range."); } bits[0] = new BooleanToken(true); // integer = (int)(2147483648L + integer); integer = ((1 << (rate - 1)) + integer); } else { if (integer > ((1 << (rate - 1)) - 1)) { throw new IllegalActionException(this, "integer is out of range."); } bits[0] = new BooleanToken(false); } for (int i = rate - 1; i > 0; i--) { int remainder = integer % 2; integer = integer / 2; if (remainder == 0) { bits[i] = new BooleanToken(false); } else { bits[i] = new BooleanToken(true); } } output.send(0, bits, bits.length); }