Browse Source

solved false positive breakpoint trigger

Kolja Strohm 6 years ago
parent
commit
bd89aec4e5
4 changed files with 70 additions and 36 deletions
  1. 16 15
      src/bk/BKNodePlacement.java
  2. 13 6
      src/bk/Combine.java
  3. 34 12
      src/bk/Compaction.java
  4. 7 3
      src/bk/ExtremalLayoutCalc.java

+ 16 - 15
src/bk/BKNodePlacement.java

@@ -147,21 +147,22 @@ public class BKNodePlacement extends AnimatedAlgorithm {
             switch( state )
             switch( state )
             {
             {
             case CONFLICTS:
             case CONFLICTS:
-                breakpoint |= !conflictsNode.setSelected( true );
-                    switch( (StageStatus)(ConflictDetection.class.getMethod( fName ).invoke( conftion ) ) )
-                    {
-                    case FINISHED:
-                        inside = false;
-                        conflictsNode.setSelected( false );
-                        breakpoint |= !layout1Node.setSelected( true );
-                        state = State.LAYOUT1;
-                        break;
-                    case BREAKPOINT:
-                        inside = true;
-                        return StageStatus.BREAKPOINT;
-                    case UNFINISHED:
-                        inside = true;
-                    }
+            	if( !conflictsNode.isSelected() )
+            		breakpoint |= !conflictsNode.setSelected( true );
+                switch( (StageStatus)(ConflictDetection.class.getMethod( fName ).invoke( conftion ) ) )
+                {
+                case FINISHED:
+                    inside = false;
+                    conflictsNode.setSelected( false );
+                    breakpoint |= !layout1Node.setSelected( true );
+                    state = State.LAYOUT1;
+                    break;
+                case BREAKPOINT:
+                    inside = true;
+                    return StageStatus.BREAKPOINT;
+                case UNFINISHED:
+                    inside = true;
+                }
                 break;
                 break;
             case LAYOUT1:
             case LAYOUT1:
                 switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 0 ] ) ) )
                 switch( (StageStatus)(ExtremalLayoutCalc.class.getMethod( fName ).invoke( layouts[ 0 ] ) ) )

+ 13 - 6
src/bk/Combine.java

@@ -51,10 +51,12 @@ public class Combine implements AlgorithmStage {
 	
 	
 	@Override
 	@Override
 	public StageStatus forwardStep() {
 	public StageStatus forwardStep() {
+		breakPoint = false;
 		if( state == State.ALIGN )
 		if( state == State.ALIGN )
 		{
 		{
 		    inside = false;
 		    inside = false;
-		    breakPoint = !alignNode.setSelected( true );
+		    if( !alignNode.isSelected() )
+		    	breakPoint |= !alignNode.setSelected( true );
 			int tblw = (int)graph.getWidth( LayoutType.TOP_BOTTOM_LEFT );
 			int tblw = (int)graph.getWidth( LayoutType.TOP_BOTTOM_LEFT );
 			int tbrw = (int)graph.getWidth( LayoutType.TOP_BOTTOM_RIGHT );
 			int tbrw = (int)graph.getWidth( LayoutType.TOP_BOTTOM_RIGHT );
 			int btlw = (int)graph.getWidth( LayoutType.BOTTOM_TOP_LEFT );
 			int btlw = (int)graph.getWidth( LayoutType.BOTTOM_TOP_LEFT );
@@ -87,7 +89,9 @@ public class Combine implements AlgorithmStage {
 			actions.add( 0, () -> {
 			actions.add( 0, () -> {
                 inside = false;
                 inside = false;
                 setNode.setSelected( false );
                 setNode.setSelected( false );
-                breakPoint = !alignNode.setSelected( true );
+                breakPoint = false;
+    		    if( !alignNode.isSelected() )
+    		    	breakPoint |= !alignNode.setSelected( true );
 				state = State.ALIGN;
 				state = State.ALIGN;
 				graph.setColor( null, null );
 				graph.setColor( null, null );
 				//MainView.frame.setSize( MainView.frame.getWidth() + 1, MainView.frame.getHeight() );
 				//MainView.frame.setSize( MainView.frame.getWidth() + 1, MainView.frame.getHeight() );
@@ -95,7 +99,8 @@ public class Combine implements AlgorithmStage {
 			});
 			});
 			state = State.SET_COORDINATES;
 			state = State.SET_COORDINATES;
             alignNode.setSelected( false );
             alignNode.setSelected( false );
-            breakPoint |= !setNode.setSelected( true );
+		    if( !setNode.isSelected() )
+		    	breakPoint |= !setNode.setSelected( true );
             breakPoint |= !loopNode.setSelected( true );
             breakPoint |= !loopNode.setSelected( true );
 		}
 		}
 		else
 		else
@@ -121,9 +126,11 @@ public class Combine implements AlgorithmStage {
 			int oldX = (int)current.getX( LayoutType.COMBINED );
 			int oldX = (int)current.getX( LayoutType.COMBINED );
 			current.setX( (positions.get( 1 ) + positions.get( 2 )) / 2, true, LayoutType.COMBINED );
 			current.setX( (positions.get( 1 ) + positions.get( 2 )) / 2, true, LayoutType.COMBINED );
 			actions.add( 0, () -> {
 			actions.add( 0, () -> {
-                inside = true; 
-                breakPoint = !setNode.setSelected( true );
-                breakPoint |= !loopNode.setSelected( true );
+                inside = true;
+                breakPoint = false;
+    		    if( !setNode.isSelected() )
+    		    	breakPoint |= !setNode.setSelected( true );
+    		    breakPoint |= !loopNode.setSelected( true );
 				vIndex--;
 				vIndex--;
 				current.setX( oldX, true, LayoutType.COMBINED );
 				current.setX( oldX, true, LayoutType.COMBINED );
 				current.setSelected( null );
 				current.setSelected( null );

+ 34 - 12
src/bk/Compaction.java

@@ -83,11 +83,13 @@ public class Compaction implements AlgorithmStage{
 	
 	
 	@Override
 	@Override
 	public StageStatus forwardStep() {
 	public StageStatus forwardStep() {
+		breakPoint = false;
 		int acSize = actions.size();
 		int acSize = actions.size();
 		if( state == CompactionState.PLACE_BLOCKS ) // blöcke platzieren
 		if( state == CompactionState.PLACE_BLOCKS ) // blöcke platzieren
 		{
 		{
 		    inside = true;
 		    inside = true;
-		    breakPoint = !placeNode.setSelected( true );
+		    if( !placeNode.isSelected() )
+		    	breakPoint = !placeNode.setSelected( true );
 		    breakPoint |= !placeLoopNode.setSelected( true );
 		    breakPoint |= !placeLoopNode.setSelected( true );
 			if( stack.size() == 0 ) // äußere schleife, placeblocks bisher nicht aufgerufen
 			if( stack.size() == 0 ) // äußere schleife, placeblocks bisher nicht aufgerufen
 			{
 			{
@@ -111,7 +113,8 @@ public class Compaction implements AlgorithmStage{
 				    // wechsele in die phase des Blöckeshiftens
 				    // wechsele in die phase des Blöckeshiftens
 		            placeNode.setSelected( false );
 		            placeNode.setSelected( false );
 		            placeLoopNode.setSelected( false );
 		            placeLoopNode.setSelected( false );
-		            breakPoint |= !applyNode.setSelected( true );
+				    if( !applyNode.isSelected() )
+				    	breakPoint |= !applyNode.setSelected( true );
 		            breakPoint |= !applyLoopNode.setSelected( true );
 		            breakPoint |= !applyLoopNode.setSelected( true );
 					state = CompactionState.APPLY_SHIFT;
 					state = CompactionState.APPLY_SHIFT;
 					inside = false;
 					inside = false;
@@ -119,7 +122,9 @@ public class Compaction implements AlgorithmStage{
 					actions.add( 0, ()-> {
 					actions.add( 0, ()-> {
 	                    applyNode.setSelected( false );
 	                    applyNode.setSelected( false );
 	                    applyLoopNode.setSelected( false );
 	                    applyLoopNode.setSelected( false );
-	                    breakPoint = !placeNode.setSelected( true );
+	                    breakPoint = false;
+					    if( !placeNode.isSelected() )
+					    	breakPoint |= !placeNode.setSelected( true );
 	                    breakPoint |= !placeLoopNode.setSelected( true );
 	                    breakPoint |= !placeLoopNode.setSelected( true );
 						vIndex = oldVIndex;
 						vIndex = oldVIndex;
 						inside = false;
 						inside = false;
@@ -139,7 +144,9 @@ public class Compaction implements AlgorithmStage{
 					
 					
 					// die "undo"-action
 					// die "undo"-action
 					actions.add( 0, ()-> {
 					actions.add( 0, ()-> {
-                        breakPoint = !placeNode.setSelected( true );
+	                    breakPoint = false;
+					    if( !placeNode.isSelected() )
+					    	breakPoint |= !placeNode.setSelected( true );
                         breakPoint |= !placeLoopNode.setSelected( true );
                         breakPoint |= !placeLoopNode.setSelected( true );
 					    inside = true;
 					    inside = true;
 						stack.get( 0 ).v.setX( oldX, false, layout );
 						stack.get( 0 ).v.setX( oldX, false, layout );
@@ -176,7 +183,9 @@ public class Compaction implements AlgorithmStage{
 		                    
 		                    
 		                    // die "undo"-action
 		                    // die "undo"-action
 							actions.add( 0, ()-> {
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
 							    inside = true;
 							    inside = true;
 								stack.get( 0 ).v.setX( oldX, false, layout );
 								stack.get( 0 ).v.setX( oldX, false, layout );
@@ -190,7 +199,9 @@ public class Compaction implements AlgorithmStage{
 						    // tue nix
 						    // tue nix
 							sf.w.setSelected( layout );
 							sf.w.setSelected( layout );
 							actions.add( 0, ()-> {
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
                                 inside = true;
                                 inside = true;
 								stack.get( 0 ).u = null;
 								stack.get( 0 ).u = null;
@@ -207,7 +218,9 @@ public class Compaction implements AlgorithmStage{
                             System.out.println( "return place_block( " + sf.v + " )" );
                             System.out.println( "return place_block( " + sf.v + " )" );
 							stack.remove( 0 );
 							stack.remove( 0 );
 							actions.add( 0, ()-> {
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
                                 inside = true;
                                 inside = true;
 								stack.add( 0, sf );
 								stack.add( 0, sf );
@@ -218,7 +231,9 @@ public class Compaction implements AlgorithmStage{
 						else
 						else
 						{ //nur "undo aktion" hinzufügen
 						{ //nur "undo aktion" hinzufügen
 							actions.add( 0, ()-> {
 							actions.add( 0, ()-> {
-		                        breakPoint = !placeNode.setSelected( true );
+			                    breakPoint = false;
+							    if( !placeNode.isSelected() )
+							    	breakPoint |= !placeNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
 		                        breakPoint |= !placeLoopNode.setSelected( true );
                                 inside = true;
                                 inside = true;
 								sf.w = oldW;
 								sf.w = oldW;
@@ -266,7 +281,9 @@ public class Compaction implements AlgorithmStage{
 					    System.out.println( "return place_block( " + sf.v + " )" );
 					    System.out.println( "return place_block( " + sf.v + " )" );
 						stack.remove( 0 );
 						stack.remove( 0 );
 						actions.add( 0, ()-> {
 						actions.add( 0, ()-> {
-	                        breakPoint = !placeNode.setSelected( true );
+		                    breakPoint = false;
+						    if( !placeNode.isSelected() )
+						    	breakPoint |= !placeNode.setSelected( true );
 	                        breakPoint |= !placeLoopNode.setSelected( true );
 	                        breakPoint |= !placeLoopNode.setSelected( true );
                             inside = true;
                             inside = true;
 							stack.add( 0, sf );
 							stack.add( 0, sf );
@@ -281,7 +298,9 @@ public class Compaction implements AlgorithmStage{
 					else
 					else
 					{ //nur "undo aktion" hinzufügen
 					{ //nur "undo aktion" hinzufügen
 						actions.add( 0, ()-> {
 						actions.add( 0, ()-> {
-	                        breakPoint = !placeNode.setSelected( true );
+		                    breakPoint = false;
+						    if( !placeNode.isSelected() )
+						    	breakPoint |= !placeNode.setSelected( true );
 	                        breakPoint |= !placeLoopNode.setSelected( true );
 	                        breakPoint |= !placeLoopNode.setSelected( true );
                             inside = true;
                             inside = true;
 							stack.get( 0 ).v.setSink(  oldSink, layout );
 							stack.get( 0 ).v.setSink(  oldSink, layout );
@@ -298,7 +317,8 @@ public class Compaction implements AlgorithmStage{
 		else if( state == CompactionState.APPLY_SHIFT )// "Compute absolute coordinates"
 		else if( state == CompactionState.APPLY_SHIFT )// "Compute absolute coordinates"
 		{
 		{
             inside = true;
             inside = true;
-            breakPoint = !applyNode.setSelected( true );
+		    if( !applyNode.isSelected() )
+		    	breakPoint |= !applyNode.setSelected( true );
             breakPoint |= !applyLoopNode.setSelected( true );
             breakPoint |= !applyLoopNode.setSelected( true );
 		    if( vIndex >= graph.getContainedNodes().size() )
 		    if( vIndex >= graph.getContainedNodes().size() )
 		    {
 		    {
@@ -317,7 +337,9 @@ public class Compaction implements AlgorithmStage{
 				v.setX( v.getX( layout ) + v.getSink( layout ).getShift( layout ), true, layout );
 				v.setX( v.getX( layout ) + v.getSink( layout ).getShift( layout ), true, layout );
 			actions.add( 0, ()-> {
 			actions.add( 0, ()-> {
                 inside = true;
                 inside = true;
-                breakPoint = !applyNode.setSelected( true );
+                breakPoint = false;
+			    if( !applyNode.isSelected() )
+			    	breakPoint |= !applyNode.setSelected( true );
                 breakPoint |= !applyLoopNode.setSelected( true );
                 breakPoint |= !applyLoopNode.setSelected( true );
 				v.setX( oldX, oldDef, layout );
 				v.setX( oldX, oldDef, layout );
 				v.setSelected( layout );
 				v.setSelected( layout );

+ 7 - 3
src/bk/ExtremalLayoutCalc.java

@@ -135,7 +135,8 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         try {
         try {
             if( status == LayoutState.BLOCK_CALCULATION )
             if( status == LayoutState.BLOCK_CALCULATION )
             {
             {
-                breakpoint |= !bcNode.setSelected( true );
+            	if( !bcNode.isSelected() )
+            		breakpoint |= !bcNode.setSelected( true );
                 switch( (StageStatus)(BlockCalc.class.getMethod( fName ).invoke( bc ) ) )
                 switch( (StageStatus)(BlockCalc.class.getMethod( fName ).invoke( bc ) ) )
                 {
                 {
                 case FINISHED:
                 case FINISHED:
@@ -154,6 +155,7 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
             }
             }
             if( status == LayoutState.COMPACTION )
             if( status == LayoutState.COMPACTION )
             {
             {
+            	if( !cpNode.isSelected() )
                 breakpoint |= !cpNode.setSelected( true );
                 breakpoint |= !cpNode.setSelected( true );
                 switch( (StageStatus)(Compaction.class.getMethod( fName ).invoke( cp ) ) )
                 switch( (StageStatus)(Compaction.class.getMethod( fName ).invoke( cp ) ) )
                 {
                 {
@@ -190,7 +192,8 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
         try {
         try {
             if( status == LayoutState.BLOCK_CALCULATION )
             if( status == LayoutState.BLOCK_CALCULATION )
             {
             {
-                breakpoint |= !bcNode.setSelected( true );
+            	if( !bcNode.isSelected() )
+            		breakpoint |= !bcNode.setSelected( true );
                 switch( (StageStatus)(BlockCalc.class.getMethod( fName ).invoke( bc ) ) )
                 switch( (StageStatus)(BlockCalc.class.getMethod( fName ).invoke( bc ) ) )
                 {
                 {
                 case FINISHED:
                 case FINISHED:
@@ -206,7 +209,8 @@ public class ExtremalLayoutCalc implements AlgorithmStage {
             }
             }
             if( status == LayoutState.COMPACTION )
             if( status == LayoutState.COMPACTION )
             {
             {
-                breakpoint |= !cpNode.setSelected( true );
+            	if( !cpNode.isSelected() )
+            		breakpoint |= !cpNode.setSelected( true );
                 switch( (StageStatus)(Compaction.class.getMethod( fName ).invoke( cp ) ) )
                 switch( (StageStatus)(Compaction.class.getMethod( fName ).invoke( cp ) ) )
                 {
                 {
                 case FINISHED:
                 case FINISHED: