// Copyright (c) 2011 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 java.util.HashMap;
import java.util.Map;
/**
* Dual-key map that works with {@link VmResourceId}. Both script name and script id are
* used as keys. No conflicts are really expected -- only guard runtime exceptions are
* provided.
*/
public class VmResourceIdMap<T> {
private final Map<String, T> scriptNameMap = new HashMap<String, T>();
private final Map<Object, T> scriptIdMap = new HashMap<Object, T>();
public T get(VmResourceId resourceId) {
Object scriptId = resourceId.getId();
if (scriptId != null) {
T result = getSafe(scriptIdMap, scriptId);
if (result != null) {
return result;
}
}
return getByName(resourceId.getName());
}
public T getByName(String scriptName) {
if (scriptName != null) {
T result = getSafe(scriptNameMap, scriptName);
if (result != null) {
return result;
}
}
return null;
}
public void put(VmResourceId resourceId, T data) {
Object scriptId = resourceId.getId();
if (scriptId != null) {
Object conflict = scriptIdMap.put(scriptId, data);
if (conflict != null) {
throw new RuntimeException();
}
}
String scriptName = resourceId.getName();
if (scriptName != null) {
Object conflict = scriptNameMap.put(scriptName, data);
if (conflict != null) {
throw new RuntimeException();
}
}
}
public void remove(VmResourceId resourceId) {
Object scriptId = resourceId.getId();
if (scriptId != null) {
scriptIdMap.remove(scriptId);
}
String scriptName = resourceId.getName();
if (scriptName != null) {
scriptNameMap.remove(scriptName);
}
}
public void clear() {
scriptIdMap.clear();
scriptNameMap.clear();
}
}