Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Generate CreatedEvents

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.55
diff -u -r1.55 ChangeLog
--- ChangeLog	9 Jan 2003 03:46:22 -0000	1.55
+++ ChangeLog	9 Jan 2003 19:10:16 -0000
@@ -1,3 +1,29 @@
+2003-01-09 Alain Magloire
+
+	Generate CreatedEvent's for Variable, Argument, Expression, Memory, Thread
+	objects when they are created.  This makes it consistent with the generated
+	DestroyedEvent's.
+
+	* src/.../mi/core/cdi/EventManager.java (update): Deal with
+	MI{Register,Memory,Thread,Var}CreatedEvent events.
+	* src/.../mi/core/cdi/model/Ctarget.java (updateState): Fire events
+	when threads are created or destroyed.
+	* src/.../mi/core/cdi/model/MemoryBlock.java: Move here.
+	* src/.../mi/core/cdi/model/Register.java (getID): rename getId() to getID().
+	* src/.../mi/core/cdi/event/CreatedEvent.java: New constructors
+	to deal with MI{Register,Memory,Thread,Var}CreatedEvent.
+
+	* src/.../mi/core/event/MIMemoryCreatedEvent.java: New file.
+	* src/.../mi/core/event/MIRegisterCreatedEvent.java: New file.
+	* src/.../mi/core/event/MIThreadCreatedEvent.java: New file.
+	* src/.../mi/core/event/MIVarCreatedEvent.java: New file.
+	* src/.../mi/core/event/MIBreakpointChangedEvent.java (MIBreakpointChangedEvent):
+	Reuse the constructor.
+	* src/.../mi/core/event/MIBreakpointCreatedEvent.java (MIBreakpointCreatedEvent):
+	Reuse the constructor.
+	* src/.../mi/core/event/MIBreakpointDeletedEvent.java (MIBreakpointDeletedEvent):
+	Reuse the constructor.
+
 2003-01-08 Alain Magloire
 
 	Refactoring, split the org.eclipse.cdt.debug.mi.core.cdi in pacackages
Index: src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java,v
retrieving revision 1.30
diff -u -r1.30 EventManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java	9 Jan 2003 03:46:22 -0000	1.30
+++ src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java	9 Jan 2003 19:10:16 -0000
@@ -24,6 +24,7 @@
 import org.eclipse.cdt.debug.mi.core.cdi.event.ResumedEvent;
 import org.eclipse.cdt.debug.mi.core.cdi.event.SuspendedEvent;
 import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
 import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent;
@@ -35,11 +36,15 @@
 import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIStoppedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
 
 /**
  */
@@ -138,6 +143,14 @@
 					} catch (CDIException e) {
 					}
 				}
+			} else if (miEvent instanceof MIVarCreatedEvent) {
+				cdiList.add(new CreatedEvent(session, (MIVarCreatedEvent)miEvent));
+			} else if (miEvent instanceof MIRegisterCreatedEvent) {
+				cdiList.add(new CreatedEvent(session, (MIRegisterCreatedEvent)miEvent));
+			} else if (miEvent instanceof MIThreadCreatedEvent) {
+				cdiList.add(new CreatedEvent(session, (MIThreadCreatedEvent)miEvent));
+			} else if (miEvent instanceof MIMemoryCreatedEvent) {
+				cdiList.add(new CreatedEvent(session, (MIMemoryCreatedEvent)miEvent));
 			}
 		}
 
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java	9 Jan 2003 03:46:22 -0000	1.13
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,189 +0,0 @@
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MIFormat;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
-import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory;
-import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIMemory;
-
-/**
- */
-public class MemoryBlock extends CObject implements ICDIMemoryBlock {
-
-	MIDataReadMemoryInfo mem;
-	String expression;
-	boolean frozen;
-	boolean dirty;
-
-	public MemoryBlock(CTarget target, String exp, MIDataReadMemoryInfo info) {
-		super(target);
-		expression = exp;
-		mem = info;
-		frozen = true;
-	}
-
-	/**
-	 * @return the expression use to create the block.
-	 */
-	public String getExpression() {
-		return expression;
-	}
-
-	/**
-	 * Reset the internal MIDataReadMemoryInfo.
-	 */
-	public void setMIDataReadMemoryInfo(MIDataReadMemoryInfo m) {
-		mem = m;
-	}
-
-	/**
-	 * @return the internal MIDataReadMemoryInfo.
-	 */
-	public MIDataReadMemoryInfo getMIDataReadMemoryInfo() {
-		return mem;
-	}
-
-	/**
-	 * @return true if any address in the array is within the block.
-	 */
-	public boolean contains(Long[] adds) {
-		for (int i = 0; i < adds.length; i++) {
-			if (contains(adds[i])) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/**
-	 * @return true if the address is within the block.
-	 */
-	public boolean contains(Long addr) {
-		long start = getStartAddress();
-		long length = getLength();
-		if (start <= addr.longValue() && addr.longValue() <= start + length) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Use by the EventManager to check fire events when doing refresh().
-	 */
-	public boolean isDirty() {
-		return dirty;
-	}
-
-	/**
-	 * Use by the EventManager to check fire events when doing refresh().
-	 */
-	public void setDirty(boolean d) {
-		dirty = d;
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getBytes()
-	 */
-	public byte[] getBytes() throws CDIException {
-		MIMemory[] miMem = mem.getMemories();
-		List aList = new ArrayList();
-		for (int i = 0; i < miMem.length; i++) {
-			long[] data = miMem[i].getData();
-			for (int j = 0; j < data.length; j++) {
-					aList.add(new Long(data[j]));
-			}
-		}
-		byte[] bytes = new byte[aList.size()];
-		for (int i = 0; i < aList.size(); i++) {
-			Long l = (Long)aList.get(i);
-			bytes[i] = l.byteValue();
-		}
-		return bytes;
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#refresh()
-	 */
-	public void refresh() throws CDIException {
-		MemoryManager mgr = (MemoryManager)getCTarget().getCSession().getMemoryManager();
-		setDirty(true);
-		Long[] addresses = mgr.update(this, null);
-		// Check if this affects other blocks.
-		if (addresses.length > 0) {
-			MemoryBlock[] blocks = mgr.listMemoryBlocks();
-			for (int i = 0; i < blocks.length; i++) {
-				if (! blocks[i].equals(this) && blocks[i].contains(addresses)) {
-					blocks[i].setDirty(true);
-					mgr.update(blocks[i], null);
-				}
-			}
-		}
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getLength()
-	 */
-	public long getLength() {
-		return mem.getTotalBytes();
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getStartAddress()
-	 */
-	public long getStartAddress() {
-		return mem.getAddress();
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#isFrozen()
-	 */
-	public boolean isFrozen() {
-		return frozen;
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setFrozen(boolean)
-	 */
-	public void setFrozen(boolean frozen) {
-		this.frozen = frozen;
-	}
-
-	/**
-	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setValue(long, byte[])
-	 */
-	public void setValue(long offset, byte[] bytes) throws CDIException {
-		if (offset >= getLength() || offset + bytes.length > getLength()) {
-			throw new CDIException("Bad Offset");
-		}
-		MISession mi = getCTarget().getCSession().getMISession();
-		CommandFactory factory = mi.getCommandFactory();
-		for (int i = 0; i < bytes.length; i++) {
-			long l = new Byte(bytes[i]).longValue() & 0xff;
-			String value = "0x" + Long.toHexString(l);
-			MIDataWriteMemory mw = factory.createMIDataWriteMemory(offset + i,
-				expression, MIFormat.HEXADECIMAL, 1, value);
-			try {
-				mi.postCommand(mw);
-				MIInfo info = mw.getMIInfo();
-				if (info == null) {
-					throw new CDIException("No answer");
-				}
-			} catch (MIException e) {
-				throw new MI2CDIException(e);
-			}
-		}
-		// If the assign was succesfull fire a MIChangedEvent() via refresh.
-		refresh();
-	}
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java,v
retrieving revision 1.13
diff -u -r1.13 MemoryManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java	5 Dec 2002 15:59:43 -0000	1.13
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java	9 Jan 2003 19:10:16 -0000
@@ -14,10 +14,12 @@
 import org.eclipse.cdt.debug.mi.core.MIException;
 import org.eclipse.cdt.debug.mi.core.MIFormat;
 import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
 import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
 import org.eclipse.cdt.debug.mi.core.command.MIDataReadMemory;
 import org.eclipse.cdt.debug.mi.core.event.MIEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
 
 /**
@@ -76,7 +78,7 @@
 	/**
 	 * @return the registers MemoryBlock.
 	 */
-	MemoryBlock[] listMemoryBlocks() {
+	public MemoryBlock[] listMemoryBlocks() {
 		return (MemoryBlock[])blockList.toArray(new MemoryBlock[0]);
 	}
 
@@ -150,6 +152,8 @@
 		MIDataReadMemoryInfo info = createMIDataReadMemoryInfo(address, length);
 		ICDIMemoryBlock block = new MemoryBlock(getCSession().getCTarget(), address, info);
 		blockList.add(block);
+		MISession mi = getCSession().getMISession();
+		mi.fireEvent(new MIMemoryCreatedEvent(block.getStartAddress(), block.getLength()));
 		return block;
 	}
 
Index: src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java,v
retrieving revision 1.4
diff -u -r1.4 RegisterManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java	9 Jan 2003 03:46:22 -0000	1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java	9 Jan 2003 19:10:16 -0000
@@ -18,6 +18,7 @@
 import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames;
 import org.eclipse.cdt.debug.mi.core.event.MIEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo;
 import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo;
 
@@ -64,7 +65,7 @@
 	public Register getRegister(int regno) throws CDIException {
 		Register[] regs = getRegisters();
 		for (int i = 0; i < regs.length; i++) {
-			if (regs[i].getId() == regno) {
+			if (regs[i].getID() == regno) {
 				return regs[i];
 			}
 		}
@@ -86,6 +87,8 @@
 		if (reg == null) {
 			reg = new Register(getCSession().getCTarget(), regObject);
 			regList.add(reg);
+			MISession mi = getCSession().getMISession();
+			mi.fireEvent(new MIRegisterCreatedEvent(reg.getName(), reg.getID()));
 		}
 		return reg;
 	}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java,v
retrieving revision 1.13
diff -u -r1.13 VariableManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java	9 Jan 2003 03:46:22 -0000	1.13
+++ src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java	9 Jan 2003 19:10:16 -0000
@@ -27,6 +27,7 @@
 import org.eclipse.cdt.debug.mi.core.command.MIVarUpdate;
 import org.eclipse.cdt.debug.mi.core.event.MIEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.output.MIVar;
 import org.eclipse.cdt.debug.mi.core.output.MIVarChange;
 import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo;
@@ -264,6 +265,9 @@
 			var = new Variable(stack, name, element.miVar);
 			element.variable = var;
 			addElement(element);
+			// Fire an created Event.
+			MISession mi = getCSession().getMISession();
+			mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
 		}
 		return var;
 	}
@@ -277,6 +281,9 @@
 		Variable var = new Variable(stack, name, miVar);
 		element.variable = var;
 		addElement(element);
+		// Fire an created Event.
+		MISession mi = getCSession().getMISession();
+		mi.fireEvent(new MIVarCreatedEvent(miVar.getVarName()));
 		return var;
 	}
 
@@ -289,6 +296,9 @@
 			carg = new Argument(stack, name,element.miVar);
 			element.variable = carg;
 			addElement(element);
+			// Fire an created Event.
+			MISession mi = getCSession().getMISession();
+			mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
 		}
 		return carg;
 	}
@@ -302,6 +312,9 @@
 			cexp = new Expression(stack, name, element.miVar);
 			element.variable = cexp;
 			addElement(element);
+			// Fire an created Event.
+			MISession mi = getCSession().getMISession();
+			mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
 		}
 		return cexp;
 	}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 CreatedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java	9 Jan 2003 03:46:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -4,13 +4,25 @@
  */
 package org.eclipse.cdt.debug.mi.core.cdi.event;
 
+import org.eclipse.cdt.debug.core.cdi.CDIException;
 import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+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.ICDIThread;
 import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
 import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.MemoryManager;
+import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
+import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
 import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Register;
 import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
 
 /**
  */
@@ -27,6 +39,61 @@
 		if (breakpoint != null) {
 			source = breakpoint;
 		} else {
+			source = new CObject(session.getCTarget());
+		}
+	}
+
+	public CreatedEvent(CSession s, MIVarCreatedEvent var) {
+		session = s;
+		VariableManager mgr = session.getVariableManager();
+		String varName = var.getVarName();
+		VariableManager.Element element = mgr.getElement(varName);
+		if (element != null && element.variable != null) {
+			source = element.variable;
+		} else {
+			source = new CObject(session.getCTarget());
+		}
+	}
+
+	public CreatedEvent(CSession s, MIRegisterCreatedEvent var) {
+		session = s;
+		RegisterManager mgr = session.getRegisterManager();
+		int regno = var.getNumber();
+		Register reg = null;
+		try {
+			reg = mgr.getRegister(regno);
+		} catch (CDIException e) {
+		}
+		if (reg != null) {
+			source = reg;
+		} else {
+			source = new CObject(session.getCTarget());
+		}
+	}
+
+	public CreatedEvent(CSession s, MIThreadCreatedEvent ethread) {
+		session = s;
+		CTarget target = (CTarget)session.getCurrentTarget();
+		ICDIThread thread = target.getThread(ethread.getId());
+		if (thread != null) {
+			source = thread;
+		} else {
+			source = new CObject(session.getCTarget());
+		}
+	}
+
+	public CreatedEvent(CSession s, MIMemoryCreatedEvent mblock) {
+		session = s;
+		MemoryManager mgr = (MemoryManager)session.getMemoryManager();
+		ICDIMemoryBlock[] blocks = mgr.listMemoryBlocks();
+		for (int i = 0; i < blocks.length; i++) {
+			if (blocks[i].getStartAddress() == mblock.getAddress() &&
+			    blocks[i].getLength() == mblock.getLength()) {
+				source = blocks[i];
+				break;
+			}
+		}
+		if (source == null) {
 			source = new CObject(session.getCTarget());
 		}
 	}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MemoryChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java	9 Jan 2003 03:46:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -10,7 +10,7 @@
 import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
 import org.eclipse.cdt.debug.mi.core.cdi.CSession;
-import org.eclipse.cdt.debug.mi.core.cdi.MemoryBlock;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
 import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
 
 /**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java,v
retrieving revision 1.1
diff -u -r1.1 CTarget.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java	9 Jan 2003 03:46:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java	9 Jan 2003 19:10:16 -0000
@@ -36,6 +36,7 @@
 import org.eclipse.cdt.debug.mi.core.command.MITargetDetach;
 import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect;
 import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
 import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo;
 import org.eclipse.cdt.debug.mi.core.output.MIInfo;
@@ -144,12 +145,38 @@
 
 		currentThreads = newThreads;
 
+		// Fire CreatedEvent for new threads.
+		if (newThreads != null && newThreads.length > 0) {
+			List cList = new ArrayList(newThreads.length);
+			for (int i = 0; i < newThreads.length; i++) {
+				boolean found = false;
+				for (int j = 0; oldThreads != null && j < oldThreads.length; j++) {
+					if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
+						found = true;
+						break;
+					}
+				}
+				if (!found) {
+					cList.add(new Integer(newThreads[i].getId()));
+				}
+			}
+			if (!cList.isEmpty()) {
+				MIThreadCreatedEvent[] events = new MIThreadCreatedEvent[cList.size()];
+				for (int j = 0; j < events.length; j++) {
+					int id = ((Integer)cList.get(j)).intValue();
+					events[j] = new MIThreadCreatedEvent(id);
+				}
+				MISession miSession = session.getMISession();
+				miSession.fireEvents(events);
+			}
+		}
+
 		// Fire destroyedEvent for old threads.
 		if (oldThreads != null && oldThreads.length > 0) {
 			List dList = new ArrayList(oldThreads.length);
 			for (int i = 0; i < oldThreads.length; i++) {
 				boolean found = false;
-				for (int j = 0; j < newThreads.length; j++) {
+				for (int j = 0; newThreads != null && j < newThreads.length; j++) {
 					if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
 						found = true;
 						break;
@@ -233,6 +260,20 @@
 			currentThreads = getCThreads();
 		}
 		return currentThreads;
+	}
+
+	public ICDIThread getThread(int tid) {
+		CThread th = null;
+		if (currentThreads != null) {
+			for (int i = 0; i < currentThreads.length; i++) {
+				CThread cthread = (CThread)currentThreads[i];
+				if (cthread.getId() == tid) {
+					th = cthread;
+					break;
+				}
+			}
+		}
+		return th;
 	}
 
 	/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java	9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,189 @@
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MIFormat;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.cdi.MemoryManager;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory;
+import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIMemory;
+
+/**
+ */
+public class MemoryBlock extends CObject implements ICDIMemoryBlock {
+
+	MIDataReadMemoryInfo mem;
+	String expression;
+	boolean frozen;
+	boolean dirty;
+
+	public MemoryBlock(CTarget target, String exp, MIDataReadMemoryInfo info) {
+		super(target);
+		expression = exp;
+		mem = info;
+		frozen = true;
+	}
+
+	/**
+	 * @return the expression use to create the block.
+	 */
+	public String getExpression() {
+		return expression;
+	}
+
+	/**
+	 * Reset the internal MIDataReadMemoryInfo.
+	 */
+	public void setMIDataReadMemoryInfo(MIDataReadMemoryInfo m) {
+		mem = m;
+	}
+
+	/**
+	 * @return the internal MIDataReadMemoryInfo.
+	 */
+	public MIDataReadMemoryInfo getMIDataReadMemoryInfo() {
+		return mem;
+	}
+
+	/**
+	 * @return true if any address in the array is within the block.
+	 */
+	public boolean contains(Long[] adds) {
+		for (int i = 0; i < adds.length; i++) {
+			if (contains(adds[i])) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * @return true if the address is within the block.
+	 */
+	public boolean contains(Long addr) {
+		long start = getStartAddress();
+		long length = getLength();
+		if (start <= addr.longValue() && addr.longValue() <= start + length) {
+			return true;
+		}
+		return false;
+	}
+
+	/**
+	 * Use by the EventManager to check fire events when doing refresh().
+	 */
+	public boolean isDirty() {
+		return dirty;
+	}
+
+	/**
+	 * Use by the EventManager to check fire events when doing refresh().
+	 */
+	public void setDirty(boolean d) {
+		dirty = d;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getBytes()
+	 */
+	public byte[] getBytes() throws CDIException {
+		MIMemory[] miMem = mem.getMemories();
+		List aList = new ArrayList();
+		for (int i = 0; i < miMem.length; i++) {
+			long[] data = miMem[i].getData();
+			for (int j = 0; j < data.length; j++) {
+					aList.add(new Long(data[j]));
+			}
+		}
+		byte[] bytes = new byte[aList.size()];
+		for (int i = 0; i < aList.size(); i++) {
+			Long l = (Long)aList.get(i);
+			bytes[i] = l.byteValue();
+		}
+		return bytes;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#refresh()
+	 */
+	public void refresh() throws CDIException {
+		MemoryManager mgr = (MemoryManager)getCTarget().getCSession().getMemoryManager();
+		setDirty(true);
+		Long[] addresses = mgr.update(this, null);
+		// Check if this affects other blocks.
+		if (addresses.length > 0) {
+			MemoryBlock[] blocks = mgr.listMemoryBlocks();
+			for (int i = 0; i < blocks.length; i++) {
+				if (! blocks[i].equals(this) && blocks[i].contains(addresses)) {
+					blocks[i].setDirty(true);
+					mgr.update(blocks[i], null);
+				}
+			}
+		}
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getLength()
+	 */
+	public long getLength() {
+		return mem.getTotalBytes();
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getStartAddress()
+	 */
+	public long getStartAddress() {
+		return mem.getAddress();
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#isFrozen()
+	 */
+	public boolean isFrozen() {
+		return frozen;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setFrozen(boolean)
+	 */
+	public void setFrozen(boolean frozen) {
+		this.frozen = frozen;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setValue(long, byte[])
+	 */
+	public void setValue(long offset, byte[] bytes) throws CDIException {
+		if (offset >= getLength() || offset + bytes.length > getLength()) {
+			throw new CDIException("Bad Offset");
+		}
+		MISession mi = getCTarget().getCSession().getMISession();
+		CommandFactory factory = mi.getCommandFactory();
+		for (int i = 0; i < bytes.length; i++) {
+			long l = new Byte(bytes[i]).longValue() & 0xff;
+			String value = "0x" + Long.toHexString(l);
+			MIDataWriteMemory mw = factory.createMIDataWriteMemory(offset + i,
+				expression, MIFormat.HEXADECIMAL, 1, value);
+			try {
+				mi.postCommand(mw);
+				MIInfo info = mw.getMIInfo();
+				if (info == null) {
+					throw new CDIException("No answer");
+				}
+			} catch (MIException e) {
+				throw new MI2CDIException(e);
+			}
+		}
+		// If the assign was succesfull fire a MIChangedEvent() via refresh.
+		refresh();
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java,v
retrieving revision 1.1
diff -u -r1.1 Register.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java	9 Jan 2003 03:46:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java	9 Jan 2003 19:10:16 -0000
@@ -82,7 +82,7 @@
 	/**
 	 * return the MI regno.
 	 */
-	public int getId() {
+	public int getID() {
 		return regObject.getId();
 	}
 
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MIBreakpointChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java	8 Jan 2003 21:33:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -15,8 +15,7 @@
 	int no;
 
 	public MIBreakpointChangedEvent(int number) {
-		super(0);
-		no = number;
+		this(0, number);
 	}
 
 	public MIBreakpointChangedEvent(int id, int number) {
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MIBreakpointCreatedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java	8 Jan 2003 21:33:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -15,8 +15,7 @@
 	int no;
 
 	public MIBreakpointCreatedEvent(int number) {
-		super(0);
-		no = number;
+		this(0, number);
 	}
 
 	public MIBreakpointCreatedEvent(int id, int number) {
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MIBreakpointDeletedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java	8 Jan 2003 21:33:22 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -15,8 +15,7 @@
 	int no;
 
 	public MIBreakpointDeletedEvent(int number) {
-		super(0);
-		no = number;
+		this(0, number);
 	}
 
 	public MIBreakpointDeletedEvent(int id, int number) {
Index: src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,37 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIMemoryCreatedEvent extends MICreatedEvent {
+
+	long address;
+	long totalBytes;
+
+	public MIMemoryCreatedEvent(long addr, long total) {
+		this(0, addr, total);
+	}
+
+	public MIMemoryCreatedEvent(int token, long addr, long total) {
+		super(token);
+		address = addr;
+		totalBytes = total;
+	}
+
+	public long getAddress() {
+		return address;
+	}
+
+	public long getLength() {
+		return totalBytes;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,37 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIRegisterCreatedEvent extends MICreatedEvent {
+
+	String regName;
+	int regno;
+
+	public MIRegisterCreatedEvent(String name, int number) {
+		this(0, name, number);
+	}
+
+	public MIRegisterCreatedEvent(int token, String name, int number) {
+		super(token);
+		regName = name;
+		regno = number;
+	}
+
+	public String getName() {
+		return regName;
+	}
+
+	public int getNumber() {
+		return regno;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,29 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIThreadCreatedEvent extends MICreatedEvent {
+
+	int tid;
+
+	public MIThreadCreatedEvent(int id) {
+		this(0, id);
+	}
+
+	public MIThreadCreatedEvent(int token, int id) {
+		super(token);
+		tid = id;
+	}
+
+	public int getId() {
+		return tid;
+	}
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java	9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,32 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIVarCreatedEvent extends MICreatedEvent {
+
+	String varName;
+
+	public MIVarCreatedEvent(String var) {
+		super(0);
+		varName = var;
+	}
+
+	public MIVarCreatedEvent(int token, String var) {
+		super(token);
+		varName = var;
+	}
+
+	public String getVarName() {
+		return varName;
+	}
+
+}



Back to the top