values = U.toVector(length);\r
}\r
\r
- private void recalculateSingleInput()\r
- {\r
- setNewValues(inputs.get(0).getInputValues());\r
- }\r
-\r
- private void recalculateMultipleInputs()\r
- {\r
- BitVectorMutator mutator = BitVectorMutator.empty();\r
- for (ReadWriteEnd wireArrayEnd : inputs)\r
- mutator.join(wireArrayEnd.getInputValues());\r
- setNewValues(mutator.toBitVector());\r
- }\r
-\r
private void setNewValues(BitVector newValues)\r
{\r
if (values.equals(newValues))\r
\r
void recalculate()\r
{\r
- switch (inputs.size())\r
- {\r
- case 0:\r
+ if (inputs.size() == 0)\r
setNewValues(BitVector.of(Bit.U, length));\r
- break;\r
- case 1:\r
- recalculateSingleInput();\r
- break;\r
- default:\r
- recalculateMultipleInputs();\r
+ else\r
+ {\r
+ BitVectorMutator mutator = BitVectorMutator.empty();\r
+ for (ReadWriteEnd wireArrayEnd : inputs)\r
+ mutator.join(wireArrayEnd.getInputValues());\r
+ setNewValues(mutator.toBitVector());\r
}\r
}\r
\r
+ /**\r
+ * 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.\r
+ * WARNING! Use this with care! The preferred way of writing the values is ReadWriteEnd.feedSignals(BitVector)\r
+ * \r
+ * @param values The values the <code>Wire</code> will have immediately after this method is called\r
+ */\r
+ public void forceValues(BitVector values)\r
+ {\r
+ setNewValues(values);\r
+ }\r
+\r
/**\r
* The {@link Wire} is interpreted as an unsigned integer with n bits.\r
* \r