瀏覽代碼

Better way to check if substates are already there

Baglio Tabifata 4 年之前
父節點
當前提交
c748422a66
共有 2 個文件被更改,包括 9 次插入1 次删除
  1. 5 1
      src/net/hkzlab/dupal/boardio/DuPALAnalyzer.java
  2. 4 0
      src/net/hkzlab/palanalisys/MacroState.java

+ 5 - 1
src/net/hkzlab/dupal/boardio/DuPALAnalyzer.java

@@ -123,7 +123,7 @@ public class DuPALAnalyzer {
     }
 
     private MacroState analyzeMacroState(MacroState ms) {
-        if(ms.ssMap.size() < ms.substates.length) {
+        if(!ms.ss_ready) {
             logger.info("Generating all possible substates for macro state ["+ms+"]");
             genAllMSSubStates(ms);
         } else {
@@ -245,6 +245,10 @@ public class DuPALAnalyzer {
             generateSubState(ms, idx, idx_mask);
         }
 
+        ms.ss_ready = true;
+
+        logger.info("Macrostate ["+ms+"] now has "+ms.ssMap.size()+" substates in array of size " + ms.substates.length);
+
         writePINs(0);
     }
 

+ 4 - 0
src/net/hkzlab/palanalisys/MacroState.java

@@ -5,6 +5,8 @@ import java.util.HashMap;
 public class MacroState {
     public static final String MS_PRE_TAG = "MS_";
 
+    public boolean ss_ready = false;
+
     public final String tag;
     public final int rpins;
     public final int rpin_status;
@@ -21,6 +23,8 @@ public class MacroState {
         links = new StateLink[1 << inPins]; // Create space for the future links out of this
         substates = new SubState[1 << inPins]; // Create space for substates (each output pin is 3-state, but as they're triggered via input changes, we can have at most 2^inPins)
         ssMap = new HashMap<>(); // Prepare the hashmap we'll use to avoid substate duplicates
+
+        ss_ready = false;
     }
 
     @Override