Added forceValues(...) method to Wire
authorFabian Stemmler <stemmler@in.tum.de>
Wed, 26 Jun 2019 13:51:57 +0000 (15:51 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Wed, 26 Jun 2019 13:51:57 +0000 (15:51 +0200)
net.mograsim.logic.core/src/net/mograsim/logic/core/wires/Wire.java

index 86add62..f424471 100644 (file)
@@ -51,19 +51,6 @@ public class Wire
                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
@@ -75,19 +62,28 @@ public class Wire
 \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