|
@@ -11,6 +11,7 @@ import animation.CodeLine;
|
|
|
import animation.ControlFlow;
|
|
|
import animation.Memory;
|
|
|
import animation.PseudoCodeNode;
|
|
|
+import bk.BKNodePlacement.State;
|
|
|
import bk.ExtremalLayoutCalc.LayoutType;
|
|
|
import codelines.DeclareVariable;
|
|
|
import codelines.ForEachLoop;
|
|
@@ -40,26 +41,58 @@ public class ConflictDetection implements AlgorithmStage {
|
|
|
|
|
|
@Override
|
|
|
public PseudoCodeNode createPseudocodeTree(JTree tree) {
|
|
|
- String vars[] = { "i", "L", "k0", "l", "l1", "k1", "k", "v", "graph" };
|
|
|
+ String vars[] = { "i", "L", "k0", "l", "l1", "k1", "k", "v", "graph", "n" };
|
|
|
String params[] = { "graph" };
|
|
|
- PseudoCodeNode root = new PseudoCodeNode(TextLayoutHelper.setupPseudoCode("function mark_conflicts( graph )", vars), tree, new FunctionDefinition( params ), alg );
|
|
|
+ @SuppressWarnings("serial")
|
|
|
+ PseudoCodeNode root = new PseudoCodeNode(TextLayoutHelper.setupPseudoCode("function mark_conflicts( graph )", vars), tree, new FunctionDefinition( params ), alg ) {
|
|
|
+ @Override
|
|
|
+ protected void hiddenActionWithoutSideEffects( Memory m )
|
|
|
+ {
|
|
|
+ ((BKNodePlacement)alg).setState( State.CONFLICTS );
|
|
|
+
|
|
|
+ if( m.isSomewhereDefined( "l", false ) && m.isSomewhereDefined( "i", false ) &&
|
|
|
+ m.<Integer>read( "l", false ) < m.<LayeredGraphNode>read( "graph", false).getContainedLayers().get( m.<Integer>read( "i", false ) + 1 ).size() )
|
|
|
+ m.<LayeredGraphNode>read( "graph", false).getContainedLayers().get(m.<Integer>read( "i", false ) + 1).get(m.<Integer>read( "l", false )).setSelected(null);
|
|
|
+
|
|
|
+ if( m.isSomewhereDefined( "i", false ) && m.isSomewhereDefined( "l1", false ) ) {
|
|
|
+ m.<LayeredGraphNode>read( "graph", false).getContainedLayers().get(m.<Integer>read( "i", false ) + 1).get(m.<Integer>read( "l1", false )).setSelected(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ if( m.isSomewhereDefined( "i", false ) && m.isSomewhereDefined( "k0", false ) ) {
|
|
|
+ m.<LayeredGraphNode>read( "graph", false).getContainedLayers().get(m.<Integer>read( "i", false ) + 1).get(m.<Integer>read( "k0", false )).setSelected(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ if( m.isSomewhereDefined( "i", false ) && m.isSomewhereDefined( "k1", false ) ) {
|
|
|
+ m.<LayeredGraphNode>read( "graph", false).getContainedLayers().get(m.<Integer>read( "i", false ) + 1).get(m.<Integer>read( "k1", false )).setSelected(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ if( m.isSomewhereDefined( "i", false ) && m.isSomewhereDefined( "k", false ) ) {
|
|
|
+ m.<LayeredGraphNode>read( "graph", false).getContainedLayers().get(m.<Integer>read( "i", false ) + 1).get(m.<Integer>read( "k", false )).setSelected(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ if( m.isSomewhereDefined( "n", false ) )
|
|
|
+ {
|
|
|
+ m.<LayeredGraphNode>read( "n", false ).setSelected( null );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
PseudoCodeNode text = new PseudoCodeNode(TextLayoutHelper.setupPseudoCodeStage( "-- mark conflicts in subgrapfhs --" ), tree, new Kommentar(), alg );
|
|
|
root.add( text );
|
|
|
- PseudoCodeNode foreach = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "foreach v in graph.getContainedNodes() do", vars ), tree, new ForEachLoop<LayeredGraphNode>( "v" ) {
|
|
|
+ PseudoCodeNode foreach = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "foreach n in graph.getContainedNodes() do", vars ), tree, new ForEachLoop<LayeredGraphNode>( "n" ) {
|
|
|
@Override
|
|
|
protected List<LayeredGraphNode> list(Memory m) {
|
|
|
return m.<LayeredGraphNode>read( "graph", false ).getContainedNodes();
|
|
|
}
|
|
|
}, alg );
|
|
|
root.add( foreach );
|
|
|
- PseudoCodeNode ifNode = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "if v has subgraph then", vars ), tree, new IfLoop() {
|
|
|
+ PseudoCodeNode ifNode = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "if n has subgraph then", vars ), tree, new IfLoop() {
|
|
|
@Override
|
|
|
protected boolean condition(Memory m) {
|
|
|
- return m.<LayeredGraphNode>read( "v", false ).getContainedLayers().size() > 0;
|
|
|
+ return m.<LayeredGraphNode>read( "n", false ).getContainedLayers().size() > 0;
|
|
|
}
|
|
|
}, alg );
|
|
|
foreach.add( ifNode );
|
|
|
- PseudoCodeNode call = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "call mark_conflicts( v );", vars ), tree, new FunctionCall( root, new String[]{ "v" } ), alg );
|
|
|
+ PseudoCodeNode call = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "call mark_conflicts( n );", vars ), tree, new FunctionCall( root, new String[]{ "n" } ), alg );
|
|
|
ifNode.add( call );
|
|
|
text = new PseudoCodeNode(TextLayoutHelper.setupPseudoCodeStage( "-- mark conflicts in graph --" ), tree, new Kommentar(), alg );
|
|
|
root.add( text );
|