/******************************************************************************* * Copyright (c) 2010 Freescale Semiconductor 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: * Freescale Semiconductor - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.gdb.internal.eventbkpts; import java.util.HashMap; import java.util.Map; import org.eclipse.cdt.gdb.eventbkpts.IEventBreakpointConstants; public class GdbCatchpoints { /** Map which services {@link #eventToGdbCatchpointKeyword(String)} */ private static final Map<String, String> sIdToKeyword = new HashMap<String, String>(); static { // these Ids are also referenced in mi.ui plugin as contribution // to event breakpoints selector sIdToKeyword.put(IEventBreakpointConstants.EVENT_TYPE_CATCH, "catch"); //$NON-NLS-1$ sIdToKeyword.put(IEventBreakpointConstants.EVENT_TYPE_THROW, "throw"); //$NON-NLS-1$ sIdToKeyword.put(IEventBreakpointConstants.EVENT_TYPE_EXEC, "exec"); //$NON-NLS-1$ sIdToKeyword.put(IEventBreakpointConstants.EVENT_TYPE_FORK, "fork"); //$NON-NLS-1$ sIdToKeyword.put(IEventBreakpointConstants.EVENT_TYPE_VFORK, "vfork"); //$NON-NLS-1$ sIdToKeyword.put(IEventBreakpointConstants.EVENT_TYPE_SYSCALL, "syscall"); //$NON-NLS-1$ } /** * Get the gdb catchpoint event keyword associated with the given * {@link IEventBreakpointConstants} event type ID. Answer will be, e.g., * "catch", "throw", "fork", etc. * * @param event * an EVENT_TYPE_XXXX constant from IEventBreakpointConstants * @return the gdb keyword for [event]; null if [event] is unrecognized */ public static String eventToGdbCatchpointKeyword(String event) { String keyword = sIdToKeyword.get(event); assert keyword != null : "unexpected catchpoint event id"; return keyword; } /** * An inversion of the lookup done by * {@link #eventToGdbCatchpointKeyword(String)} * * @param keyword * a gdb catchpoint keyword, e.g., "catch", "throw", "fork" * @return the EVENT_TYPE_XXXX constant from IEventBreakpointConstants * associated with [keyword], or null if not recognized */ public static String gdbCatchpointKeywordToEvent(String keyword) { for (String eventId : sIdToKeyword.keySet()) { String thisKeyword = sIdToKeyword.get(eventId); if (thisKeyword.equals(keyword)) { return eventId; } } // Don't assert. Caller may be using us to determine if a token is a // catchpoint keyword. He may have parsed the keyword out from gdb/mi // output. return null; } }