// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.debug.core.model;
import static org.chromium.sdk.util.BasicUtil.getSafe;
import static org.chromium.sdk.util.BasicUtil.removeSafe;
import java.util.HashMap;
import java.util.Map;
/**
* A one-to-one map between SDK and UI breakpoints inside one debug target.
*/
public class BreakpointInTargetMap<SDK, UI> {
private final Map<SDK, UI> sdkToUiMap = new HashMap<SDK, UI>();
private final Map<UI, SDK> uiToSdkMap = new HashMap<UI, SDK>();
public BreakpointInTargetMap() {
}
public synchronized SDK getSdkBreakpoint(UI uiBreakpoint) {
return getSafe(uiToSdkMap, uiBreakpoint);
}
public synchronized UI getUiBreakpoint(SDK sdkBreakpoint) {
return getSafe(sdkToUiMap, sdkBreakpoint);
}
public synchronized void add(SDK sdkBreakpoint, UI uiBreakpoint) {
Object conflict1 = uiToSdkMap.put(uiBreakpoint, sdkBreakpoint);
Object conflict2 = sdkToUiMap.put(sdkBreakpoint, uiBreakpoint);
if (conflict1 != null || conflict2 != null) {
throw new RuntimeException();
}
}
public synchronized void remove(UI uiBreakpoint) {
SDK sdkBreakpoint = removeSafe(uiToSdkMap, uiBreakpoint);
if (sdkBreakpoint == null) {
throw new RuntimeException();
}
removeSafe(sdkToUiMap, sdkBreakpoint);
}
public synchronized void clear() {
sdkToUiMap.clear();
uiToSdkMap.clear();
}
}