Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Added functionality to process ICDIMemoryChangedEvent

Added a functionality to process ICDIMemoryChangedEvent

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision 1.23
diff -u -r1.23 ChangeLog
--- ChangeLog 20 Oct 2002 23:21:38 -0000 1.23
+++ ChangeLog 21 Oct 2002 03:34:45 -0000
@@ -1,3 +1,8 @@
+2002-10-20 Mikhail Khodjaiants
+ Added a functionality needed to process ICDIMemoryChangedEvent.
+ * IFormattedMemoryBlock.java
+ * CFormattedMemoryBlock.java
+
 2002-10-20 Alain Magloire
 
  * src/.../cdi/model/CTarget.java (getMemoryBlock): Remove
Index: src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java,v
retrieving revision 1.3
diff -u -r1.3 IFormattedMemoryBlock.java
--- src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java 17 Oct 2002 23:17:01 -0000 1.3
+++ src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java 21 Oct 2002 03:34:45 -0000
@@ -87,4 +87,10 @@
        int numberOfColumns,
        char paddingChar ) throws DebugException;
  void dispose();
+
+ Long[] getChangedAddresses();

+ boolean isFrozen();

+ void setFrozen( boolean frozen );
 }
Index: src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java,v
retrieving revision 1.3
diff -u -r1.3 CFormattedMemoryBlock.java
--- src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 18 Oct 2002 21:54:37 -0000 1.3
+++ src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 21 Oct 2002 03:34:46 -0000
@@ -12,8 +12,15 @@
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlockRow;
 import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.internal.core.CDebugUtils;
+import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.DebugException;
 
 /**
@@ -21,7 +28,9 @@
  *
  * @since: Oct 15, 2002
  */
-public class CFormattedMemoryBlock extends CDebugElement implements IFormattedMemoryBlock
+public class CFormattedMemoryBlock extends CDebugElement
+           implements IFormattedMemoryBlock,
+             ICDIEventListener
 {
  class CFormattedMemoryBlockRow implements IFormattedMemoryBlockRow
  {
@@ -73,6 +82,7 @@
  private boolean fDisplayAscii = true;
  private char fPaddingChar = '.';
  private List fRows = null;
+ private Long[] fChangedAddresses = new Long[0];
 
  /**
   * Constructor for CFormattedMemoryBlock.
@@ -95,6 +105,7 @@
   fNumberOfColumns = numberOfColumns;
   fDisplayAscii = false;
   fPaddingChar = 0;
+  getCDISession().getEventManager().addEventListener( this );
  }
 
  /**
@@ -119,6 +130,7 @@
   fNumberOfColumns = numberOfColumns;
   fDisplayAscii = true;
   fPaddingChar = paddingChar;  
+  getCDISession().getEventManager().addEventListener( this );
  }
 
  /* (non-Javadoc)
@@ -189,6 +201,11 @@
   }
   return (IFormattedMemoryBlockRow[])fRows.toArray( new IFormattedMemoryBlockRow[fRows.size()] );
  }

+ private void resetRows()
+ {
+  fRows = null;
+ }
 
  /* (non-Javadoc)
   * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#nextRowAddress()
@@ -326,6 +343,7 @@
    }
    fCDIMemoryBlock = null;
   }
+  getCDISession().getEventManager().removeEventListener( this );
  }
 
  /* (non-Javadoc)
@@ -364,5 +382,87 @@
    sb.append( ( Character.isISOControl( (char)bytes[i] ) || bytes[i] < 0 ) ? getPaddingCharacter() : (char)bytes[i] );
   }
   return sb.toString();
+ }
+
+ /**
+  * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvent(ICDIEvent)
+  */
+ public void handleDebugEvent( ICDIEvent event )
+ {
+  ICDIObject source = event.getSource();
+  if (source == null)
+   return;
+
+  if ( source.getTarget().equals( getCDITarget() ) )
+  {
+   if ( event instanceof ICDIResumedEvent )
+   {
+    if ( source instanceof ICDITarget )
+    {
+     handleResumedEvent( (ICDIResumedEvent)event );
+    }
+   }
+   else if ( event instanceof ICDIMemoryChangedEvent )
+   {
+    if ( source instanceof ICDIMemoryBlock && source.equals( getCDIMemoryBlock() ) )
+    {
+     handleChangedEvent( (ICDIMemoryChangedEvent)event );
+    }
+   }
+  }
+ }
+
+ protected ICDIMemoryBlock getCDIMemoryBlock()
+ {
+  return fCDIMemoryBlock;
+ }
+
+ protected void setCDIMemoryBlock( ICDIMemoryBlock cdiMemoryBlock )
+ {
+  fCDIMemoryBlock = cdiMemoryBlock;
+ }

+ private void handleResumedEvent( ICDIResumedEvent event )
+ {
+  resetChangedAddresses();
+  fireChangeEvent( DebugEvent.CONTENT );
+ }

+ private void handleChangedEvent( ICDIMemoryChangedEvent event )
+ {
+  resetRows();  
+  setChangedAddresses( event.getAddresses() );
+  fireChangeEvent( DebugEvent.CONTENT );
+ }

+ public Long[] getChangedAddresses()
+ {
+  return fChangedAddresses;
+ }
+
+ protected void setChangedAddresses( Long[] changedAddresses )
+ {
+  fChangedAddresses = changedAddresses;
+ }

+ protected void resetChangedAddresses()
+ {
+  fChangedAddresses = new Long[0];
+ }
+
+ /**
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#isFrozen()
+  */
+ public boolean isFrozen()
+ {
+  return getCDIMemoryBlock().isFrozen();
+ }
+
+ /**
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#setFrozen(boolean)
+  */
+ public void setFrozen( boolean frozen )
+ {
+  getCDIMemoryBlock().setFrozen( frozen );
  }
 }


Back to the top