|
@@ -41,6 +41,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
private PseudoCodeNode placeLoopNode;
|
|
|
private PseudoCodeNode applyNode;
|
|
|
private PseudoCodeNode applyLoopNode;
|
|
|
+ private boolean breakPoint;
|
|
|
private boolean inside;
|
|
|
|
|
|
|
|
@@ -86,8 +87,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
if( state == CompactionState.PLACE_BLOCKS ) // blöcke platzieren
|
|
|
{
|
|
|
inside = true;
|
|
|
- placeNode.setSelected( true );
|
|
|
- placeLoopNode.setSelected( true );
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
if( stack.size() == 0 ) // äußere schleife, placeblocks bisher nicht aufgerufen
|
|
|
{
|
|
|
ArrayList< LayeredGraphNode > nodes = graph.getContainedNodes();
|
|
@@ -110,16 +111,16 @@ public class Compaction implements AlgorithmStage{
|
|
|
// wechsele in die phase des Blöckeshiftens
|
|
|
placeNode.setSelected( false );
|
|
|
placeLoopNode.setSelected( false );
|
|
|
- applyNode.setSelected( true );
|
|
|
- applyLoopNode.setSelected( true );
|
|
|
+ breakPoint |= !applyNode.setSelected( true );
|
|
|
+ breakPoint |= !applyLoopNode.setSelected( true );
|
|
|
state = CompactionState.APPLY_SHIFT;
|
|
|
inside = false;
|
|
|
vIndex = 0;
|
|
|
actions.add( 0, ()-> {
|
|
|
applyNode.setSelected( false );
|
|
|
applyLoopNode.setSelected( false );
|
|
|
- placeNode.setSelected( true );
|
|
|
- placeLoopNode.setSelected( true );
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
vIndex = oldVIndex;
|
|
|
inside = false;
|
|
|
state = CompactionState.PLACE_BLOCKS;
|
|
@@ -138,6 +139,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
|
|
|
// die "undo"-action
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
stack.get( 0 ).v.setX( oldX, false, layout );
|
|
|
stack.get( 0 ).v.setSelected( layout );
|
|
@@ -173,6 +176,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
|
|
|
// die "undo"-action
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
stack.get( 0 ).v.setX( oldX, false, layout );
|
|
|
stack.get( 0 ).v.setSelected( layout );
|
|
@@ -185,6 +190,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
// tue nix
|
|
|
sf.w.setSelected( layout );
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
stack.get( 0 ).u = null;
|
|
|
});
|
|
@@ -200,6 +207,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
System.out.println( "return place_block( " + sf.v + " )" );
|
|
|
stack.remove( 0 );
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
stack.add( 0, sf );
|
|
|
sf.w = oldW;
|
|
@@ -209,6 +218,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
else
|
|
|
{ //nur "undo aktion" hinzufügen
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
sf.w = oldW;
|
|
|
sf.w.setSelected( layout );
|
|
@@ -255,6 +266,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
System.out.println( "return place_block( " + sf.v + " )" );
|
|
|
stack.remove( 0 );
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
stack.add( 0, sf );
|
|
|
stack.get( 0 ).v.setSink( oldSink, layout );
|
|
@@ -268,6 +281,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
else
|
|
|
{ //nur "undo aktion" hinzufügen
|
|
|
actions.add( 0, ()-> {
|
|
|
+ breakPoint = !placeNode.setSelected( true );
|
|
|
+ breakPoint |= !placeLoopNode.setSelected( true );
|
|
|
inside = true;
|
|
|
stack.get( 0 ).v.setSink( oldSink, layout );
|
|
|
sinkOfU.setShift( oldShift, layout );
|
|
@@ -283,6 +298,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
else if( state == CompactionState.APPLY_SHIFT )// "Compute absolute coordinates"
|
|
|
{
|
|
|
inside = true;
|
|
|
+ breakPoint = !applyNode.setSelected( true );
|
|
|
+ breakPoint |= !applyLoopNode.setSelected( true );
|
|
|
if( vIndex >= graph.getContainedNodes().size() )
|
|
|
{
|
|
|
inside = false;
|
|
@@ -300,8 +317,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
v.setX( v.getX( layout ) + v.getSink( layout ).getShift( layout ), true, layout );
|
|
|
actions.add( 0, ()-> {
|
|
|
inside = true;
|
|
|
- applyNode.setSelected( true );
|
|
|
- applyLoopNode.setSelected( true );
|
|
|
+ breakPoint = !applyNode.setSelected( true );
|
|
|
+ breakPoint |= !applyLoopNode.setSelected( true );
|
|
|
v.setX( oldX, oldDef, layout );
|
|
|
v.setSelected( layout );
|
|
|
vIndex--;
|
|
@@ -316,6 +333,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
}
|
|
|
if( actions.size() != acSize + 1 )
|
|
|
System.out.println( "ERROR" );
|
|
|
+ if( breakPoint )
|
|
|
+ return StageStatus.BREAKPOINT;
|
|
|
return StageStatus.UNFINISHED;
|
|
|
}
|
|
|
|
|
@@ -330,6 +349,8 @@ public class Compaction implements AlgorithmStage{
|
|
|
}
|
|
|
actions.get( 0 ).reverse();
|
|
|
actions.remove( 0 );
|
|
|
+ if( breakPoint )
|
|
|
+ return StageStatus.BREAKPOINT;
|
|
|
return StageStatus.UNFINISHED;
|
|
|
}
|
|
|
|
|
@@ -353,7 +374,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
{
|
|
|
CompactionState oldState = state;
|
|
|
StageStatus stage = StageStatus.UNFINISHED;
|
|
|
- while( state == oldState && stage != StageStatus.FINISHED )
|
|
|
+ while( state == oldState && stage == StageStatus.UNFINISHED )
|
|
|
stage = forwardStep();
|
|
|
return stage;
|
|
|
}
|
|
@@ -366,7 +387,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
if( !inside )
|
|
|
{
|
|
|
StageStatus status = StageStatus.UNFINISHED;
|
|
|
- while( status != StageStatus.FINISHED )
|
|
|
+ while( status == StageStatus.UNFINISHED )
|
|
|
status = forwardStep();
|
|
|
return status;
|
|
|
}
|
|
@@ -374,7 +395,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
{
|
|
|
CompactionState oldState = state;
|
|
|
StageStatus stage = StageStatus.UNFINISHED;
|
|
|
- while( state == oldState && stage != StageStatus.FINISHED )
|
|
|
+ while( state == oldState && stage == StageStatus.UNFINISHED )
|
|
|
stage = forwardStep();
|
|
|
return stage;
|
|
|
}
|
|
@@ -386,7 +407,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
{
|
|
|
CompactionState oldState = state;
|
|
|
StageStatus stage = StageStatus.UNFINISHED;
|
|
|
- while( state == oldState && stage != StageStatus.FINISHED )
|
|
|
+ while( state == oldState && stage == StageStatus.UNFINISHED )
|
|
|
stage = backwardStep();
|
|
|
return stage;
|
|
|
}
|
|
@@ -399,7 +420,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
if( !inside )
|
|
|
{
|
|
|
StageStatus status = StageStatus.UNFINISHED;
|
|
|
- while( status != StageStatus.FINISHED )
|
|
|
+ while( status == StageStatus.UNFINISHED )
|
|
|
status = backwardStep();
|
|
|
return status;
|
|
|
}
|
|
@@ -407,7 +428,7 @@ public class Compaction implements AlgorithmStage{
|
|
|
{
|
|
|
CompactionState oldState = state;
|
|
|
StageStatus stage = StageStatus.UNFINISHED;
|
|
|
- while( state == oldState && stage != StageStatus.FINISHED )
|
|
|
+ while( state == oldState && stage == StageStatus.UNFINISHED )
|
|
|
stage = backwardStep();
|
|
|
return stage;
|
|
|
}
|