removed not working backtrack loop detection

This commit is contained in:
hneemann 2017-06-11 18:08:45 +02:00
parent 553cba9d25
commit 6c5ff1cd92
5 changed files with 21 additions and 22 deletions

View File

@ -7,8 +7,6 @@ import de.neemann.digital.lang.Lang;
import java.util.*;
import static de.neemann.digital.core.Model.MAX_LOOP_COUNTER;
/**
* Used to analyse on which inputs a given output depends.
* So you only have to take into account the inputs, a given outputs
@ -30,7 +28,7 @@ public class DependencyAnalyser {
dependencyMap = new HashMap<>();
for (Signal s : modelAnalyser.getInputs()) {
Set<ObservableValue> effected = new HashSet<>();
backtracking(s.getValue(), effected, MAX_LOOP_COUNTER);
backtracking(s.getValue(), effected);
dependencyMap.put(s, effected);
}
}
@ -50,19 +48,18 @@ public class DependencyAnalyser {
return list;
}
private void backtracking(ObservableValue value, Set<ObservableValue> effected, int depth) throws PinException, BacktrackException {
effected.add(value);
private void backtracking(ObservableValue value, Set<ObservableValue> effected) throws PinException, BacktrackException {
if (!effected.contains(value)) {
effected.add(value);
if (depth < 0)
throw new BacktrackException(Lang.get("err_backtrackLoopFound"));
for (Observer o : value) {
if ((o instanceof NodeInterface)) {
ObservableValues outputs = ((NodeInterface) o).getOutputs();
for (ObservableValue co : outputs)
backtracking(co, effected, depth - 1);
} else
throw new BacktrackException(Lang.get("err_backtrackOf_N_isImpossible", o.getClass().getSimpleName()));
for (Observer o : value) {
if ((o instanceof NodeInterface)) {
ObservableValues outputs = ((NodeInterface) o).getOutputs();
for (ObservableValue co : outputs)
backtracking(co, effected);
} else
throw new BacktrackException(Lang.get("err_backtrackOf_N_isImpossible", o.getClass().getSimpleName()));
}
}
}

View File

@ -284,9 +284,6 @@ public class ModelAnalyser {
tt.addResult(s.getName(), e);
}
// for now only checks for circular dependencies
new DependencyAnalyser(this);
model.init();
for (int row = 0; row < rows; row++) {
bitsetter.fill(row);

View File

@ -1,14 +1,16 @@
package de.neemann.digital.core.wiring.bus;
import de.neemann.digital.core.NodeInterface;
import de.neemann.digital.core.ObservableValue;
import de.neemann.digital.core.Observer;
import de.neemann.digital.core.ObservableValues;
import de.neemann.digital.draw.elements.PinException;
import java.util.Arrays;
/**
* This observer is added to all outputs connected together
*/
public final class CommonBusValue extends ObservableValue implements Observer {
public final class CommonBusValue extends ObservableValue implements NodeInterface {
private final BusModelStateObserver obs;
private final PullResistor resistor;
private final ObservableValue[] inputs;
@ -76,4 +78,9 @@ public final class CommonBusValue extends ObservableValue implements Observer {
+ "inputs=" + Arrays.toString(inputs)
+ "', -->" + super.toString() + " }";
}
@Override
public ObservableValues getOutputs() throws PinException {
return new ObservableValues(this);
}
}

View File

@ -539,7 +539,6 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
<string name="err_invalidTransmissionGateState">Die Steuereingänge eines Transmission-Gates müssen invertiert beschaltet werden!</string>
<string name="err_nameUsedTwice_N">Signal {0} wurde mehrfach verwendet!</string>
<string name="err_errorParsingTestdata">Fehler beim Einlesen der Testdaten.</string>
<string name="err_backtrackLoopFound">Die Schaltung enthält ungepufferte zirkuläre Abhängigkeiten.</string>
<string name="err_backtrackOf_N_isImpossible">Die Modelkomponente {0} kann nicht analysiert werden.</string>
<string name="key_AddrBits">Adress-Bits</string>

View File

@ -529,7 +529,6 @@ The names of the variables may not be unique.</string>
<string name="err_invalidTransmissionGateState">The two control inputs of a transmission gate must be inverted!</string>
<string name="err_nameUsedTwice_N">Signal {0} is used twice!</string>
<string name="err_errorParsingTestdata">Error parsing the test data.</string>
<string name="err_backtrackLoopFound">The circuit contains unbuffered circular dependencies.</string>
<string name="err_backtrackOf_N_isImpossible">The model component {0} can not be analysed.</string>
<string name="key_AddrBits">Address Bits</string>