/*******************************************************************************
* Copyright (c) 2008 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
*******************************************************************************/
package org.eclipse.cdt.debug.mi.core.output;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class CLICatchInfo extends MIInfo {
MIBreakpoint[] breakpoints;
public CLICatchInfo(MIOutput record) {
super(record);
parse();
}
/**
* sample output: Catchpoint 3 (catch)
*/
protected void parse() {
List aList = new ArrayList();
try {
if (isDone()) {
MIOutput out = getMIOutput();
MIOOBRecord[] oobs = out.getMIOOBRecords();
for (int i = 0; i < oobs.length; i++) {
if (oobs[i] instanceof MIConsoleStreamOutput) {
MIStreamRecord cons = (MIStreamRecord) oobs[i];
String str = cons.getString();
// We are interested in the signal info
if (parseCatchpoint(str.trim(), aList))
break;
}
}
}
} finally {
breakpoints = (MIBreakpoint[]) aList.toArray(new MIBreakpoint[aList.size()]);
}
}
private boolean parseCatchpoint(String str, List aList) {
if (str.length() == 0)
return false;
if (str.startsWith("Catchpoint ")) { //$NON-NLS-1$
int bn = 0;
StringTokenizer tokenizer = new StringTokenizer(str);
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
String sub = tokenizer.nextToken();
switch (i) {
case 0: // first column is "Signal"
break;
case 1: // second column is number
bn = Integer.parseInt(sub);
break;
}
}
MITuple tuple = new MITuple();
MIBreakpoint m = new MIBreakpoint(tuple);
m.setNumber(bn);
aList.add(m);
return true;
}
return false;
}
public MIBreakpoint[] getMIBreakpoints() {
if (breakpoints == null) {
parse();
}
return breakpoints;
}
}