X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2Fgates%2FMultiInputGate.java;h=0b4a5d097b3eed8613685d185d4dfd0e0ece251f;hb=cc5749d29d0a2e37262ec10925676c812a2fa734;hp=0a9340c88344104b5d41d65764fed5eb79d5612c;hpb=b1e7855af2dfc15b4d6c1253dd77db02925162f3;p=Mograsim.git diff --git a/era.mi/src/era/mi/logic/components/gates/MultiInputGate.java b/era.mi/src/era/mi/logic/components/gates/MultiInputGate.java index 0a9340c8..0b4a5d09 100644 --- a/era.mi/src/era/mi/logic/components/gates/MultiInputGate.java +++ b/era.mi/src/era/mi/logic/components/gates/MultiInputGate.java @@ -2,8 +2,9 @@ package era.mi.logic.components.gates; import java.util.List; -import era.mi.logic.Bit; import era.mi.logic.components.BasicComponent; +import era.mi.logic.types.BitVector.BitVectorMutator; +import era.mi.logic.types.MutationOperation; import era.mi.logic.wires.Wire.WireEnd; public abstract class MultiInputGate extends BasicComponent @@ -11,9 +12,9 @@ public abstract class MultiInputGate extends BasicComponent protected WireEnd[] in; protected WireEnd out; protected final int length; - protected Operation op; + protected MutationOperation op; - protected MultiInputGate(int processTime, Operation op, WireEnd out, WireEnd... in) + protected MultiInputGate(int processTime, MutationOperation op, WireEnd out, WireEnd... in) { super(processTime); this.op = op; @@ -45,14 +46,9 @@ public abstract class MultiInputGate extends BasicComponent @Override protected void compute() { - Bit[] result = in[0].getValues(); - for (int i = 1; i < in.length; i++) - result = op.execute(result, in[i].getValues()); - out.feedSignals(result); - } - - protected interface Operation - { - public Bit[] execute(Bit[] a, Bit[] b); + BitVectorMutator mutator = BitVectorMutator.empty(); + for (WireEnd w : in) + op.apply(mutator, w.getValues()); + out.feedSignals(mutator.get()); } }