Bit[] bits = input.getInputValues();
for (int i = 0; i < length; i++)
{
- if (Bit.Z.equals(bits[i]) || newValues[i].equals(bits[i]))
- continue;
- else if (Bit.Z.equals(newValues[i]))
- newValues[i] = bits[i];
- else
- newValues[i] = Bit.X;
+ newValues[i] = newValues[i].combineWith(bits[i]);
}
}
*/
public WireEnd createEnd()
{
- return new WireEnd();
+ return new WireEnd(false);
+ }
+
+ /**
+ * Create a {@link WireEnd} object, which is tied to this {@link Wire}. This {@link WireEnd} cannot written to.
+ */
+ public WireEnd createReadOnlyEnd()
+ {
+ return new WireEnd(true);
}
private void registerInput(WireEnd toRegister)
private boolean open;
private Bit[] inputValues;
- private WireEnd()
+ private WireEnd(boolean readOnly)
{
super();
open = true;
initValues();
- registerInput(this);
+ if (!readOnly)
+ registerInput(this);
}
private void initValues()
{
- inputValues = Bit.Z.makeArray(length);
+ inputValues = Bit.U.makeArray(length);
}
/**
*/
public void feedSignals(Bit... newValues)
{
- if (newValues.length == length)
- {
- feedSignals(0, newValues);
- } else
+ if (newValues.length != length)
throw new IllegalArgumentException(
String.format("Attempted to input %d bits instead of %d bits.", newValues.length, length));
+ feedSignals(0, newValues);
}
/**
@Override
public String toString()
{
- return Arrays.toString(values);
+ return Arrays.toString(inputValues);
// return String.format("%s \nFeeding: %s", WireArray.this.toString(), Arrays.toString(inputValues));
}
- public void disconnect()
+ public void close()
{
inputs.remove(this);
open = false;