Removed visitor pattern used for one test only
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Tue, 25 Jun 2019 09:23:43 +0000 (11:23 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Tue, 25 Jun 2019 09:23:43 +0000 (11:23 +0200)
12 files changed:
net.mograsim.logic.ui.am2900/test/net/mograsim/logic/ui/am2900/TestableAm2901Impl.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ModelVisitor.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ViewModel.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/Visitable.java [deleted file]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelInterface.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java

index a91ee18..a6eb791 100644 (file)
@@ -5,7 +5,9 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.Objects;
+import java.util.Queue;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -15,18 +17,14 @@ import net.mograsim.logic.core.timeline.Timeline;
 import net.mograsim.logic.core.types.Bit;
 import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.core.types.BitVector.BitVectorMutator;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModel;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.components.GUIBitDisplay;
 import net.mograsim.logic.ui.model.components.GUIComponent;
 import net.mograsim.logic.ui.model.components.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate;
-import net.mograsim.logic.ui.model.components.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.components.SubmodelInterface;
+import net.mograsim.logic.ui.model.components.SubmodelComponent;
 import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
 import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
 import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
 import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
 
@@ -45,9 +43,6 @@ public class TestableAm2901Impl implements TestableAm2901
        private BitDisplay F_0, Cn_4, OVR, F3;
        private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
 
-       private Set<GUIWire> allWires;
-       private Set<GUIComponent> allComponents;
-
        private Set<String> wireDebugChangeSet;
        private boolean debugWires = false;
        public int debugEventThreshold = 10_000;
@@ -136,11 +131,18 @@ public class TestableAm2901Impl implements TestableAm2901
                C.switchOff();
 
                // Debug code
-               allWires = new HashSet<>();
-               allComponents = new HashSet<>();
-               ModelAccumulator accumulator = new ModelAccumulator();
-               accumulator.visit(viewModel);
-               allWires.forEach(w -> w.addRedrawListener(() ->
+               HashSet<GUIWire> wiresIncludingSubmodels = new HashSet<>();
+               Queue<ViewModel> modelsToIterate = new LinkedList<>();
+               modelsToIterate.add(viewModel);
+               while (modelsToIterate.size() > 0)
+               {
+                       ViewModel model = modelsToIterate.poll();
+                       wiresIncludingSubmodels.addAll(model.getWires());
+                       for (GUIComponent comp : model.getComponents())
+                               if (comp instanceof SubmodelComponent)
+                                       modelsToIterate.offer(((SubmodelComponent) comp).submodel);
+               }
+               wiresIncludingSubmodels.forEach(w -> w.addRedrawListener(() ->
                {
                        if (debugWires)
                        {
@@ -345,58 +347,4 @@ public class TestableAm2901Impl implements TestableAm2901
                }
                return mutator.toBitVector();
        }
-
-       class ModelAccumulator implements ModelVisitor
-       {
-               @Override
-               public void visit(GUIWire w)
-               {
-                       allWires.add(w);
-               }
-
-               @Override
-               public void visit(SimpleRectangularGUIGate simpleRectangularGUIGate)
-               {
-                       allComponents.add(simpleRectangularGUIGate);
-               }
-
-               @Override
-               public void visit(SimpleRectangularSubmodelComponent simpleRectangularSubmodelComponent)
-               {
-                       allComponents.add(simpleRectangularSubmodelComponent);
-                       simpleRectangularSubmodelComponent.getWires().forEach(w -> w.accept(this));
-                       simpleRectangularSubmodelComponent.getComponents().forEach(w -> w.accept(this));
-               }
-
-               @Override
-               public void visit(WireCrossPoint wireCrossPoint)
-               {
-                       // nothing
-               }
-
-               @Override
-               public void visit(GUIBitDisplay guiBitDisplay)
-               {
-                       allComponents.add(guiBitDisplay);
-               }
-
-               @Override
-               public void visit(GUIManualSwitch guiManualSwitch)
-               {
-                       allComponents.add(guiManualSwitch);
-               }
-
-               @Override
-               public void visit(SubmodelInterface submodelInterface)
-               {
-                       // nothing
-               }
-
-               @Override
-               public void visit(ViewModel viewModel)
-               {
-                       viewModel.getWires().forEach(w -> w.accept(this));
-                       viewModel.getComponents().forEach(w -> w.accept(this));
-               }
-       }
 }
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ModelVisitor.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/ModelVisitor.java
deleted file mode 100644 (file)
index 668d724..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-package net.mograsim.logic.ui.model;
-
-import net.mograsim.logic.ui.model.components.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate;
-import net.mograsim.logic.ui.model.components.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.components.SubmodelInterface;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-
-public interface ModelVisitor
-{
-       void visit(GUIWire w);
-
-       void visit(SimpleRectangularGUIGate simpleRectangularGUIGate);
-
-       void visit(SimpleRectangularSubmodelComponent simpleRectangularSubmodelComponent);
-
-       void visit(WireCrossPoint wireCrossPoint);
-
-       void visit(GUIBitDisplay guiBitDisplay);
-
-       void visit(GUIManualSwitch guiManualSwitch);
-
-       void visit(SubmodelInterface submodelInterface);
-
-       void visit(ViewModel viewModel);
-}
index 445810a..1f69acf 100644 (file)
@@ -8,7 +8,7 @@ import java.util.function.Consumer;
 import net.mograsim.logic.ui.model.components.GUIComponent;
 import net.mograsim.logic.ui.model.wires.GUIWire;
 
-public class ViewModel implements Visitable
+public class ViewModel
 {
        private final List<GUIComponent> components;
        private final List<GUIComponent> componentsUnmodifiable;
@@ -105,12 +105,6 @@ public class ViewModel implements Visitable
                return wiresUnmodifiable;
        }
 
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
-
        // @formatter:off
        public void addComponentAddedListener     (Consumer<? super GUIComponent> listener) {componentAddedListeners  .add   (listener);}
        public void addComponentRemovedListener   (Consumer<? super GUIComponent> listener) {componentRemovedListeners.add   (listener);}
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/Visitable.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/Visitable.java
deleted file mode 100644 (file)
index b9d457c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.mograsim.logic.ui.model;
-
-public interface Visitable
-{
-       void accept(ModelVisitor mv);
-}
index c4d8df3..82b3bbb 100644 (file)
@@ -8,7 +8,6 @@ import net.mograsim.logic.core.LogicObservable;
 import net.mograsim.logic.core.LogicObserver;
 import net.mograsim.logic.core.components.BitDisplay;
 import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.wires.Pin;
 import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
@@ -77,12 +76,6 @@ public class GUIBitDisplay extends GUIComponent
                return inputPin;
        }
 
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
-
        static
        {
                ViewLogicModelAdapter.addComponentAdapter(new BitDisplayAdapter());
index 2c8324a..6e566c4 100644 (file)
@@ -12,7 +12,6 @@ import java.util.function.Supplier;
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.Visitable;
 import net.mograsim.logic.ui.model.wires.Pin;
 
 /**
@@ -21,7 +20,7 @@ import net.mograsim.logic.ui.model.wires.Pin;
  * 
  * @author Daniel Kirschten
  */
-public abstract class GUIComponent implements Visitable
+public abstract class GUIComponent
 {
        /**
         * The model this component is a part of.
index 563f928..43c7199 100644 (file)
@@ -9,7 +9,6 @@ import net.mograsim.logic.core.LogicObserver;
 import net.mograsim.logic.core.components.ManualSwitch;
 import net.mograsim.logic.core.types.BitVectorFormatter;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.wires.Pin;
 import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
@@ -90,12 +89,6 @@ public class GUIManualSwitch extends GUIComponent
                return outputPin;
        }
 
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
-
        static
        {
                ViewLogicModelAdapter.addComponentAdapter(new ManualSwitchAdapter());
index 7beafe1..d263f6d 100644 (file)
@@ -8,7 +8,6 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.wires.MovablePin;
 import net.mograsim.logic.ui.model.wires.Pin;
@@ -83,10 +82,4 @@ public class SimpleRectangularGUIGate extends GUIComponent
                m.put(kLogicWidth, logicWidth);
                return m;
        }
-
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
 }
\ No newline at end of file
index 2fd94c6..59d800a 100644 (file)
@@ -12,7 +12,6 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.wires.MovablePin;
 import net.mograsim.logic.ui.model.wires.Pin;
@@ -156,10 +155,4 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                throw new UnsupportedOperationException(
                                "Can't set the size of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
        }
-
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
 }
\ No newline at end of file
index d08c937..8f448a8 100644 (file)
@@ -2,7 +2,6 @@ package net.mograsim.logic.ui.model.components;
 
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 
 public class SubmodelInterface extends GUIComponent
@@ -16,10 +15,4 @@ public class SubmodelInterface extends GUIComponent
        public void render(GeneralGC gc, Rectangle visibleRegion)
        {// nothing to do here
        }
-
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
 }
\ No newline at end of file
index e920444..08b1d42 100644 (file)
@@ -13,16 +13,14 @@ import net.mograsim.logic.core.LogicObserver;
 import net.mograsim.logic.core.types.BitVectorFormatter;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;
 import net.mograsim.logic.ui.ColorHelper;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.Visitable;
 
 /**
  * A wire connecting exactly two {@link Pin}s.
  * 
  * @author Daniel Kirschten
  */
-public class GUIWire implements Visitable
+public class GUIWire
 {
        /**
         * The model this wire is a part of.
@@ -325,10 +323,4 @@ public class GUIWire implements Visitable
        {
                return "GUIWire [" + pin1 + "---" + pin2 + ", value=" + (end == null ? "null" : end.getValues()) + "]";
        }
-
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
 }
\ No newline at end of file
index 22868cc..f79cf9a 100644 (file)
@@ -9,7 +9,6 @@ import net.mograsim.logic.core.LogicObserver;
 import net.mograsim.logic.core.types.BitVectorFormatter;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;
 import net.mograsim.logic.ui.ColorHelper;
-import net.mograsim.logic.ui.model.ModelVisitor;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.components.GUIComponent;
 import net.mograsim.logic.ui.model.components.SimpleRectangularGUIGate;
@@ -83,10 +82,4 @@ public class WireCrossPoint extends GUIComponent
                m.put(SimpleRectangularGUIGate.kLogicWidth, logicWidth);
                return m;
        }
-
-       @Override
-       public void accept(ModelVisitor mv)
-       {
-               mv.visit(this);
-       }
 }
\ No newline at end of file