values = U.toVector(length);
}
- private void recalculateSingleInput()
- {
- setNewValues(inputs.get(0).getInputValues());
- }
-
- private void recalculateMultipleInputs()
- {
- BitVectorMutator mutator = BitVectorMutator.empty();
- for (ReadWriteEnd wireArrayEnd : inputs)
- mutator.join(wireArrayEnd.getInputValues());
- setNewValues(mutator.get());
- }
-
private void setNewValues(BitVector newValues)
{
if (values.equals(newValues))
void recalculate()
{
- switch (inputs.size())
- {
- case 0:
+ if (inputs.size() == 0)
setNewValues(BitVector.of(Bit.U, length));
- break;
- case 1:
- recalculateSingleInput();
- break;
- default:
- recalculateMultipleInputs();
+ else
+ {
+ BitVectorMutator mutator = BitVectorMutator.empty();
+ for (ReadWriteEnd wireArrayEnd : inputs)
+ mutator.join(wireArrayEnd.getInputValues());
+ setNewValues(mutator.toBitVector());
}
}
+ /**
+ * Forces a Wire to take on specific values. If the new values differ from the old ones, the observers of the Wire will be notified.
+ * WARNING! Use this with care! The preferred way of writing the values is ReadWriteEnd.feedSignals(BitVector)
+ *
+ * @param values The values the <code>Wire</code> will have immediately after this method is called
+ */
+ public void forceValues(BitVector values)
+ {
+ setNewValues(values);
+ }
+
/**
* The {@link Wire} is interpreted as an unsigned integer with n bits.
*
return val;
}
+ /**
+ * Returns the least significant bit (LSB)
+ */
public Bit getValue()
{
return getValue(0);
}
+ /**
+ * Returns the least significant bit (LSB) of the given index
+ */
public Bit getValue(int index)
{
- return values.getBit(index);
+ return values.getLSBit(index);
}
public BitVector getValues(int start, int end)
}
/**
- * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}.
+ * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}.Returns the least
+ * significant bit (LSB)
*/
public Bit getInputValue()
{
/**
* @return The value which the {@link ReadEnd} is currently feeding into the associated {@link Wire} at the indexed {@link Bit}.
+ * Returns the least significant bit (LSB)
+ *
*/
public Bit getInputValue(int index)
{
- return inputValues.getBit(index);
+ return inputValues.getLSBit(index);
}
/**
*/
public BitVector getInputValues()
{
- return getInputValues(0, length);
+ return inputValues;
}
public BitVector getInputValues(int start, int end)
continue;
mutator.join(wireEnd.inputValues);
}
- return mutator.get();
+ return mutator.toBitVector();
}
@Override