Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIRegisterValue.java')
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIRegisterValue.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIRegisterValue.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIRegisterValue.java
new file mode 100644
index 00000000000..6aab5736ba5
--- /dev/null
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIRegisterValue.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ * Wind River Systems - Modified for new DSF Reference Implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.dsf.mi.service.command.output;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * GDB/MI register response parsing.
+ */
+public class MIRegisterValue {
+ int number;
+ String value;
+
+ public MIRegisterValue(int n, String v) {
+ number = n;
+ value = v;
+ }
+
+ public int getNumber() {
+ return number;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("number=\"").append(number).append('"'); //$NON-NLS-1$
+ buffer.append(',').append("value=\"" + value + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+ return buffer.toString();
+ }
+
+ /**
+ * Parsing a MIList of the form:
+ * [{number="1",value="0xffff"},{number="xxx",value="yyy"},..]
+ */
+ public static MIRegisterValue[] getMIRegisterValues(MIList miList) {
+ List<MIRegisterValue> aList = new ArrayList<MIRegisterValue>();
+ MIValue[] values = miList.getMIValues();
+ for (int i = 0; i < values.length; i++) {
+ if (values[i] instanceof MITuple) {
+ MIRegisterValue reg = getMIRegisterValue((MITuple)values[i]);
+ if (reg != null) {
+ aList.add(reg);
+ }
+ }
+ }
+ return (aList.toArray(new MIRegisterValue[aList.size()]));
+ }
+
+ /**
+ * Parsing a MITuple of the form:
+ * {number="xxx",value="yyy"}
+ */
+ public static MIRegisterValue getMIRegisterValue(MITuple tuple) {
+ MIResult[] args = tuple.getMIResults();
+ MIRegisterValue arg = null;
+ if (args.length == 2) {
+ // Name
+ String aName = ""; //$NON-NLS-1$
+ MIValue value = args[0].getMIValue();
+ if (value != null && value instanceof MIConst) {
+ aName = ((MIConst)value).getCString();
+ } else {
+ aName = ""; //$NON-NLS-1$
+ }
+
+ // Value
+ String aValue = ""; //$NON-NLS-1$
+ value = args[1].getMIValue();
+ if (value != null && value instanceof MIConst) {
+ aValue = ((MIConst)value).getCString();
+ } else {
+ aValue = ""; //$NON-NLS-1$
+ }
+
+ try {
+ int reg = Integer.parseInt(aName.trim());
+ arg = new MIRegisterValue(reg, aValue.trim());
+ } catch (NumberFormatException e) {
+ }
+ }
+ return arg;
+ }
+}

Back to the top