|
@@ -5,14 +5,12 @@ import java.util.List;
|
|
|
|
|
|
import javax.swing.JTree;
|
|
import javax.swing.JTree;
|
|
|
|
|
|
-import animation.AlgorithmStage;
|
|
|
|
import animation.CodeLine;
|
|
import animation.CodeLine;
|
|
import animation.ControlFlow;
|
|
import animation.ControlFlow;
|
|
import animation.Memory;
|
|
import animation.Memory;
|
|
import animation.PseudoCodeNode;
|
|
import animation.PseudoCodeNode;
|
|
import animation.Memory.MemoryType;
|
|
import animation.Memory.MemoryType;
|
|
import animation.Memory.ReadOnlyMemory;
|
|
import animation.Memory.ReadOnlyMemory;
|
|
-import bk.BKNodePlacement.State;
|
|
|
|
import bk.LayoutType;
|
|
import bk.LayoutType;
|
|
import codelines.DeclareVariable;
|
|
import codelines.DeclareVariable;
|
|
import codelines.ForEachLoop;
|
|
import codelines.ForEachLoop;
|
|
@@ -33,109 +31,97 @@ import lib.TextLayoutHelper;
|
|
* @author kolja and eren
|
|
* @author kolja and eren
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
-public class ConflictDetection implements AlgorithmStage {
|
|
|
|
-
|
|
|
|
- private BKNodePlacement alg;
|
|
|
|
|
|
+public class ConflictDetection {
|
|
|
|
|
|
- public ConflictDetection( BKNodePlacement bknpa )
|
|
|
|
- {
|
|
|
|
- alg = bknpa;
|
|
|
|
|
|
+ public static String buildDebugString( Memory m ) {
|
|
|
|
+ if( m.isSomewhereDefined( "l", MemoryType.LOCAL ) && m.isSomewhereDefined( "i", MemoryType.LOCAL ) &&
|
|
|
|
+ m.<Integer>read( "l", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1 ).size() )
|
|
|
|
+ m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.<Integer>read( "i", MemoryType.LOCAL ) + 1).get(m.<Integer>read( "l", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
+
|
|
|
|
+ if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) && m.isSomewhereDefined( "l1", MemoryType.LOCAL ) &&
|
|
|
|
+ m.<Integer>read( "l1", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.<Integer>read( "i", MemoryType.LOCAL ) + 1).size() ) {
|
|
|
|
+ m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.<Integer>read( "i", MemoryType.LOCAL ) + 1).get(m.<Integer>read( "l1", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) && m.isSomewhereDefined( "k0", MemoryType.LOCAL ) &&
|
|
|
|
+ m.<Integer>read( "k0", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).size()) {
|
|
|
|
+ m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).get(m.<Integer>read( "k0", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) && m.isSomewhereDefined( "k1", MemoryType.LOCAL ) &&
|
|
|
|
+ m.<Integer>read( "k1", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).size() ) {
|
|
|
|
+ m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).get(m.<Integer>read( "k1", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if( m.isSomewhereDefined( "n", MemoryType.LOCAL ) )
|
|
|
|
+ {
|
|
|
|
+ m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).setSelected( null );
|
|
|
|
+ }
|
|
|
|
+ String info = "| i | l | l1 | k0 | k1 | v | n |\n";
|
|
|
|
+ info += "|----|----|----|----|----|-----|-----|\n";
|
|
|
|
+ String i = "null";
|
|
|
|
+ String l = "null";
|
|
|
|
+ String l1 = "null";
|
|
|
|
+ String k0 = "null";
|
|
|
|
+ String k1 = "null";
|
|
|
|
+ String v = "null";
|
|
|
|
+ String n = "null";
|
|
|
|
+ if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) )
|
|
|
|
+ i = "" + m.<Integer>read( "i", MemoryType.LOCAL );
|
|
|
|
+ if( m.isSomewhereDefined( "l", MemoryType.LOCAL ) )
|
|
|
|
+ l = "" + m.<Integer>read( "l", MemoryType.LOCAL );
|
|
|
|
+ if( m.isSomewhereDefined( "l1", MemoryType.LOCAL ) )
|
|
|
|
+ l1 = "" + m.<Integer>read( "l1", MemoryType.LOCAL );
|
|
|
|
+ if( m.isSomewhereDefined( "k0", MemoryType.LOCAL ) )
|
|
|
|
+ k0 = "" + m.<Integer>read( "k0", MemoryType.LOCAL );
|
|
|
|
+ if( m.isSomewhereDefined( "k1", MemoryType.LOCAL ) )
|
|
|
|
+ k1 = "" + m.<Integer>read( "k1", MemoryType.LOCAL );
|
|
|
|
+ if( m.isSomewhereDefined( "v", MemoryType.LOCAL ) && m.<LayeredGraphEdge>read( "v", MemoryType.LOCAL ).getSources().get( 0 ).getName() != null )
|
|
|
|
+ v = "" + m.<LayeredGraphEdge>read( "v", MemoryType.LOCAL ).getSources().get( 0 ).getName();
|
|
|
|
+ if( m.isSomewhereDefined( "n", MemoryType.LOCAL ) && m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).getName() != null )
|
|
|
|
+ n = "" + m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).getName();
|
|
|
|
+ info += "|" + TextLayoutHelper.strToLen( i, 4 ) +
|
|
|
|
+ "|" + TextLayoutHelper.strToLen( l, 4 ) +
|
|
|
|
+ "|" + TextLayoutHelper.strToLen( l1, 4 ) +
|
|
|
|
+ "|" + TextLayoutHelper.strToLen( k0, 4 ) +
|
|
|
|
+ "|" + TextLayoutHelper.strToLen( k1, 4 ) +
|
|
|
|
+ "|" + TextLayoutHelper.strToLen( v, 5 ) +
|
|
|
|
+ "|" + TextLayoutHelper.strToLen( n, 5 ) + "|\n";
|
|
|
|
+ return info;
|
|
}
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
|
- public PseudoCodeNode createPseudocodeTree(JTree tree) {
|
|
|
|
|
|
+ public static PseudoCodeNode mark_conflicts(JTree tree) {
|
|
String vars[] = { "i", "L", "k0", "l", "l1", "k1", "v", "graph", "n" };
|
|
String vars[] = { "i", "L", "k0", "l", "l1", "k1", "v", "graph", "n" };
|
|
String params[] = { "graph" };
|
|
String params[] = { "graph" };
|
|
- @SuppressWarnings("serial")
|
|
|
|
- PseudoCodeNode root = new PseudoCodeNode(TextLayoutHelper.setupPseudoCode("function mark_conflicts( graph )", vars), tree, new FunctionDefinition( params ) ) {
|
|
|
|
- @Override
|
|
|
|
- public String getDebugOutput( Memory m )
|
|
|
|
- {
|
|
|
|
- alg.setAlgorithmState( State.CONFLICTS );
|
|
|
|
- if( m.isSomewhereDefined( "l", MemoryType.LOCAL ) && m.isSomewhereDefined( "i", MemoryType.LOCAL ) &&
|
|
|
|
- m.<Integer>read( "l", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1 ).size() )
|
|
|
|
- m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.<Integer>read( "i", MemoryType.LOCAL ) + 1).get(m.<Integer>read( "l", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
-
|
|
|
|
- if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) && m.isSomewhereDefined( "l1", MemoryType.LOCAL ) &&
|
|
|
|
- m.<Integer>read( "l1", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.<Integer>read( "i", MemoryType.LOCAL ) + 1).size() ) {
|
|
|
|
- m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.<Integer>read( "i", MemoryType.LOCAL ) + 1).get(m.<Integer>read( "l1", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) && m.isSomewhereDefined( "k0", MemoryType.LOCAL ) &&
|
|
|
|
- m.<Integer>read( "k0", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).size()) {
|
|
|
|
- m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).get(m.<Integer>read( "k0", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) && m.isSomewhereDefined( "k1", MemoryType.LOCAL ) &&
|
|
|
|
- m.<Integer>read( "k1", MemoryType.LOCAL ) < m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).size() ) {
|
|
|
|
- m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL).getContainedLayers().get(m.read( "i", MemoryType.LOCAL )).get(m.<Integer>read( "k1", MemoryType.LOCAL )).setSelected(null);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if( m.isSomewhereDefined( "n", MemoryType.LOCAL ) )
|
|
|
|
- {
|
|
|
|
- m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).setSelected( null );
|
|
|
|
- }
|
|
|
|
- String info = "| i | l | l1 | k0 | k1 | v | n |\n";
|
|
|
|
- info += "|----|----|----|----|----|-----|-----|\n";
|
|
|
|
- String i = "null";
|
|
|
|
- String l = "null";
|
|
|
|
- String l1 = "null";
|
|
|
|
- String k0 = "null";
|
|
|
|
- String k1 = "null";
|
|
|
|
- String v = "null";
|
|
|
|
- String n = "null";
|
|
|
|
- if( m.isSomewhereDefined( "i", MemoryType.LOCAL ) )
|
|
|
|
- i = "" + m.<Integer>read( "i", MemoryType.LOCAL );
|
|
|
|
- if( m.isSomewhereDefined( "l", MemoryType.LOCAL ) )
|
|
|
|
- l = "" + m.<Integer>read( "l", MemoryType.LOCAL );
|
|
|
|
- if( m.isSomewhereDefined( "l1", MemoryType.LOCAL ) )
|
|
|
|
- l1 = "" + m.<Integer>read( "l1", MemoryType.LOCAL );
|
|
|
|
- if( m.isSomewhereDefined( "k0", MemoryType.LOCAL ) )
|
|
|
|
- k0 = "" + m.<Integer>read( "k0", MemoryType.LOCAL );
|
|
|
|
- if( m.isSomewhereDefined( "k1", MemoryType.LOCAL ) )
|
|
|
|
- k1 = "" + m.<Integer>read( "k1", MemoryType.LOCAL );
|
|
|
|
- if( m.isSomewhereDefined( "v", MemoryType.LOCAL ) && m.<LayeredGraphEdge>read( "v", MemoryType.LOCAL ).getSources().get( 0 ).getName() != null )
|
|
|
|
- v = "" + m.<LayeredGraphEdge>read( "v", MemoryType.LOCAL ).getSources().get( 0 ).getName();
|
|
|
|
- if( m.isSomewhereDefined( "n", MemoryType.LOCAL ) && m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).getName() != null )
|
|
|
|
- n = "" + m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).getName();
|
|
|
|
- info += "|" + TextLayoutHelper.strToLen( i, 4 ) +
|
|
|
|
- "|" + TextLayoutHelper.strToLen( l, 4 ) +
|
|
|
|
- "|" + TextLayoutHelper.strToLen( l1, 4 ) +
|
|
|
|
- "|" + TextLayoutHelper.strToLen( k0, 4 ) +
|
|
|
|
- "|" + TextLayoutHelper.strToLen( k1, 4 ) +
|
|
|
|
- "|" + TextLayoutHelper.strToLen( v, 5 ) +
|
|
|
|
- "|" + TextLayoutHelper.strToLen( n, 5 ) + "|\n";
|
|
|
|
- return info;
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
- PseudoCodeNode text = new PseudoCodeNode(TextLayoutHelper.setupPseudoCodeStage( "-- mark conflicts in subgraphs --" ), tree, new Comment() );
|
|
|
|
|
|
+ PseudoCodeNode root = new PseudoCodeNode( "function mark_conflicts( graph )", vars, tree, new FunctionDefinition( params ) );
|
|
|
|
+ PseudoCodeNode text = new PseudoCodeNode( "-- mark conflicts in subgraphs --", vars, tree, new Comment() );
|
|
root.add( text );
|
|
root.add( text );
|
|
- PseudoCodeNode foreach = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "foreach n in graph.getContainedNodes() do", vars ), tree, new ForEachLoop<LayeredGraphNode>( "n" ) {
|
|
|
|
|
|
+ PseudoCodeNode foreach = new PseudoCodeNode( "foreach n in graph.getContainedNodes() do", vars, tree, new ForEachLoop<LayeredGraphNode>( "n" ) {
|
|
@Override
|
|
@Override
|
|
protected List<LayeredGraphNode> list(ReadOnlyMemory m) {
|
|
protected List<LayeredGraphNode> list(ReadOnlyMemory m) {
|
|
return m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedNodes();
|
|
return m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedNodes();
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
root.add( foreach );
|
|
root.add( foreach );
|
|
- PseudoCodeNode ifNode = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "if n has subgraph then", vars ), tree, new IfLoop() {
|
|
|
|
|
|
+ PseudoCodeNode ifNode = new PseudoCodeNode( "if n has subgraph then", vars, tree, new IfLoop() {
|
|
@Override
|
|
@Override
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
return m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).getContainedLayers().size() > 0;
|
|
return m.<LayeredGraphNode>read( "n", MemoryType.LOCAL ).getContainedLayers().size() > 0;
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
foreach.add( ifNode );
|
|
foreach.add( ifNode );
|
|
- PseudoCodeNode call = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "call mark_conflicts( n );", vars ), tree, new FunctionCall( root, new String[]{ "n" } ) );
|
|
|
|
|
|
+ PseudoCodeNode call = new PseudoCodeNode( "call mark_conflicts( n );", vars, tree, new FunctionCall( root, new String[]{ "n" } ) );
|
|
ifNode.add( call );
|
|
ifNode.add( call );
|
|
- text = new PseudoCodeNode(TextLayoutHelper.setupPseudoCodeStage( "-- mark conflicts in graph --" ), tree, new Comment() );
|
|
|
|
|
|
+ text = new PseudoCodeNode( "-- mark conflicts in graph --", vars, tree, new Comment() );
|
|
root.add( text );
|
|
root.add( text );
|
|
- PseudoCodeNode init = new PseudoCodeNode(TextLayoutHelper.setupPseudoCode( "L = graph.getContainedLayers();", vars), tree, new DeclareVariable<ArrayList<ArrayList<LayeredGraphNode>>>( "L" ) {
|
|
|
|
|
|
+ PseudoCodeNode init = new PseudoCodeNode( "L = graph.getContainedLayers();", vars, tree, new DeclareVariable<ArrayList<ArrayList<LayeredGraphNode>>>( "L" ) {
|
|
@Override
|
|
@Override
|
|
protected ArrayList<ArrayList<LayeredGraphNode>> value(ReadOnlyMemory m) {
|
|
protected ArrayList<ArrayList<LayeredGraphNode>> value(ReadOnlyMemory m) {
|
|
return m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers();
|
|
return m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers();
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
root.add( init );
|
|
root.add( init );
|
|
- PseudoCodeNode outerLoop = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "for i=1 to |L|-2 do", vars ), tree, new ForLoop( "i" ) {
|
|
|
|
|
|
+ PseudoCodeNode outerLoop = new PseudoCodeNode( "for i=1 to |L|-2 do", vars, tree, new ForLoop( "i" ) {
|
|
@Override
|
|
@Override
|
|
protected int minimum( ReadOnlyMemory m ) {
|
|
protected int minimum( ReadOnlyMemory m ) {
|
|
return 1;
|
|
return 1;
|
|
@@ -146,7 +132,7 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
root.add( outerLoop );
|
|
root.add( outerLoop );
|
|
- PseudoCodeNode line = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "k0 = 0; l = 0;", vars ), tree, new CodeLine() {
|
|
|
|
|
|
+ PseudoCodeNode line = new PseudoCodeNode( "k0 = 0; l = 0;", vars, tree, new CodeLine() {
|
|
@Override
|
|
@Override
|
|
public ControlFlow runForward(Memory m) {
|
|
public ControlFlow runForward(Memory m) {
|
|
m.declare( "k0", 0, MemoryType.LOCAL );
|
|
m.declare( "k0", 0, MemoryType.LOCAL );
|
|
@@ -159,7 +145,7 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
outerLoop.add( line );
|
|
outerLoop.add( line );
|
|
- PseudoCodeNode innerLoop = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "for l1=0 to |L[i+1]|-1 do", vars ), tree, new ForLoop( "l1" ) {
|
|
|
|
|
|
+ PseudoCodeNode innerLoop = new PseudoCodeNode( "for l1=0 to |L[i+1]|-1 do", vars, tree, new ForLoop( "l1" ) {
|
|
@Override
|
|
@Override
|
|
protected int minimum(ReadOnlyMemory m) {
|
|
protected int minimum(ReadOnlyMemory m) {
|
|
return 0;
|
|
return 0;
|
|
@@ -170,7 +156,7 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
outerLoop.add( innerLoop );
|
|
outerLoop.add( innerLoop );
|
|
- ifNode = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "if l1==|L[i+1]|-1 or L[i+1][l1] incident to inner segment between L[i+1] and L[i] then", vars ), tree, new IfLoop() {
|
|
|
|
|
|
+ ifNode = new PseudoCodeNode( "if l1==|L[i+1]|-1 or L[i+1][l1] incident to inner segment between L[i+1] and L[i] then", vars, tree, new IfLoop() {
|
|
@Override
|
|
@Override
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
return m.<Integer>read( "l1", MemoryType.LOCAL ) == m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1).size() - 1 ||
|
|
return m.<Integer>read( "l1", MemoryType.LOCAL ) == m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1).size() - 1 ||
|
|
@@ -178,14 +164,14 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
innerLoop.add( ifNode );
|
|
innerLoop.add( ifNode );
|
|
- line = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "k1 = |L[i]|-1;", vars ), tree, new DeclareVariable<Integer>( "k1" ) {
|
|
|
|
|
|
+ line = new PseudoCodeNode( "k1 = |L[i]|-1;", vars, tree, new DeclareVariable<Integer>( "k1" ) {
|
|
@Override
|
|
@Override
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
return (int)m.<ArrayList<ArrayList<LayeredGraphNode>>>read( "L", MemoryType.LOCAL ).get( m.read( "i", MemoryType.LOCAL ) ).size() - 1;
|
|
return (int)m.<ArrayList<ArrayList<LayeredGraphNode>>>read( "L", MemoryType.LOCAL ).get( m.read( "i", MemoryType.LOCAL ) ).size() - 1;
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
ifNode.add( line );
|
|
ifNode.add( line );
|
|
- PseudoCodeNode innerIfNode = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "if L[i+1][l1] incident to inner segment between L[i+1] and L[i] then", vars ), tree, new IfLoop() {
|
|
|
|
|
|
+ PseudoCodeNode innerIfNode = new PseudoCodeNode( "if L[i+1][l1] incident to inner segment between L[i+1] and L[i] then", vars, tree, new IfLoop() {
|
|
@Override
|
|
@Override
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
return incidentToInnerSegmentBetweenLiPlusOneAndLi( m );
|
|
return incidentToInnerSegmentBetweenLiPlusOneAndLi( m );
|
|
@@ -193,7 +179,7 @@ public class ConflictDetection implements AlgorithmStage {
|
|
} );
|
|
} );
|
|
ifNode.add( innerIfNode );
|
|
ifNode.add( innerIfNode );
|
|
|
|
|
|
- line = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "k1 = pos(pred(L[i+1][l1])[0]);", vars ), tree, new SetVariable<Integer>( "k1" ) {
|
|
|
|
|
|
+ line = new PseudoCodeNode( "k1 = pos(pred(L[i+1][l1])[0]);", vars, tree, new SetVariable<Integer>( "k1" ) {
|
|
@Override
|
|
@Override
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
return (int)m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.read( "i", MemoryType.LOCAL ) ).indexOf(
|
|
return (int)m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.read( "i", MemoryType.LOCAL ) ).indexOf(
|
|
@@ -201,21 +187,21 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
innerIfNode.add( line );
|
|
innerIfNode.add( line );
|
|
- PseudoCodeNode whileLoop = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "while l <= l1 do", vars ), tree, new WhileLoop() {
|
|
|
|
|
|
+ PseudoCodeNode whileLoop = new PseudoCodeNode( "while l <= l1 do", vars, tree, new WhileLoop() {
|
|
@Override
|
|
@Override
|
|
protected boolean condition( ReadOnlyMemory m ) {
|
|
protected boolean condition( ReadOnlyMemory m ) {
|
|
return m.<Integer>read( "l", MemoryType.LOCAL ) <= m.<Integer>read( "l1", MemoryType.LOCAL );
|
|
return m.<Integer>read( "l", MemoryType.LOCAL ) <= m.<Integer>read( "l1", MemoryType.LOCAL );
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
ifNode.add( whileLoop );
|
|
ifNode.add( whileLoop );
|
|
- foreach = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "foreach v in pred(L[i+1][l]) do", vars ), tree, new ForEachLoop<LayeredGraphEdge>( "v" ) {
|
|
|
|
|
|
+ foreach = new PseudoCodeNode( "foreach v in pred(L[i+1][l]) do", vars, tree, new ForEachLoop<LayeredGraphEdge>( "v" ) {
|
|
@Override
|
|
@Override
|
|
protected List<LayeredGraphEdge> list(ReadOnlyMemory m) {
|
|
protected List<LayeredGraphEdge> list(ReadOnlyMemory m) {
|
|
return m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1 ).get( m.read( "l", MemoryType.LOCAL ) ).getIncomingEdges();
|
|
return m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1 ).get( m.read( "l", MemoryType.LOCAL ) ).getIncomingEdges();
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
whileLoop.add( foreach );
|
|
whileLoop.add( foreach );
|
|
- innerIfNode = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "if pos(v) < k0 or pos(v) > k1 then", vars ), tree, new IfLoop() {
|
|
|
|
|
|
+ innerIfNode = new PseudoCodeNode( "if pos(v) < k0 or pos(v) > k1 then", vars, tree, new IfLoop() {
|
|
@Override
|
|
@Override
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
protected boolean condition(ReadOnlyMemory m) {
|
|
int k = m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.read( "i", MemoryType.LOCAL ) ).indexOf( m.<LayeredGraphEdge>read( "v", MemoryType.LOCAL ).getSources().get( 0 ) );
|
|
int k = m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.read( "i", MemoryType.LOCAL ) ).indexOf( m.<LayeredGraphEdge>read( "v", MemoryType.LOCAL ).getSources().get( 0 ) );
|
|
@@ -223,7 +209,7 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
foreach.add( innerIfNode );
|
|
foreach.add( innerIfNode );
|
|
- line = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "mark segment (v,L[i+1][l]);", vars ), tree, new CodeLine() {
|
|
|
|
|
|
+ line = new PseudoCodeNode( "mark segment (v,L[i+1][l]);", vars, tree, new CodeLine() {
|
|
@Override
|
|
@Override
|
|
public ControlFlow runForward(Memory m) {
|
|
public ControlFlow runForward(Memory m) {
|
|
LayeredGraphEdge e = m.read( "v", MemoryType.LOCAL );
|
|
LayeredGraphEdge e = m.read( "v", MemoryType.LOCAL );
|
|
@@ -236,14 +222,14 @@ public class ConflictDetection implements AlgorithmStage {
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
innerIfNode.add( line );
|
|
innerIfNode.add( line );
|
|
- line = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "l = l+1;", vars ), tree, new SetVariable<Integer>( "l" ) {
|
|
|
|
|
|
+ line = new PseudoCodeNode( "l = l+1;", vars, tree, new SetVariable<Integer>( "l" ) {
|
|
@Override
|
|
@Override
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
return (int)m.<Integer>read( "l", MemoryType.LOCAL ) + 1;
|
|
return (int)m.<Integer>read( "l", MemoryType.LOCAL ) + 1;
|
|
}
|
|
}
|
|
} );
|
|
} );
|
|
whileLoop.add( line );
|
|
whileLoop.add( line );
|
|
- line = new PseudoCodeNode( TextLayoutHelper.setupPseudoCode( "k0 = k1;", vars ), tree, new SetVariable<Integer>( "k0" ) {
|
|
|
|
|
|
+ line = new PseudoCodeNode( "k0 = k1;", vars, tree, new SetVariable<Integer>( "k0" ) {
|
|
@Override
|
|
@Override
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
protected Integer value(ReadOnlyMemory m) {
|
|
return (int)m.<Integer>read( "k1", MemoryType.LOCAL );
|
|
return (int)m.<Integer>read( "k1", MemoryType.LOCAL );
|
|
@@ -253,7 +239,7 @@ public class ConflictDetection implements AlgorithmStage {
|
|
return root;
|
|
return root;
|
|
}
|
|
}
|
|
|
|
|
|
- private boolean incidentToInnerSegmentBetweenLiPlusOneAndLi( ReadOnlyMemory m ) {
|
|
|
|
|
|
+ private static boolean incidentToInnerSegmentBetweenLiPlusOneAndLi( ReadOnlyMemory m ) {
|
|
LayeredGraphNode curr = m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1 ).get( m.read( "l1", MemoryType.LOCAL ) );
|
|
LayeredGraphNode curr = m.<LayeredGraphNode>read( "graph", MemoryType.LOCAL ).getContainedLayers().get( m.<Integer>read( "i", MemoryType.LOCAL ) + 1 ).get( m.read( "l1", MemoryType.LOCAL ) );
|
|
for (LayeredGraphEdge e : curr.getIncomingEdges()) {
|
|
for (LayeredGraphEdge e : curr.getIncomingEdges()) {
|
|
if (e.isDummyEdge()) {
|
|
if (e.isDummyEdge()) {
|