79 lines
2.2 KiB
Java
79 lines
2.2 KiB
Java
/*******************************************************************************
|
|
* Copyright (c) 2002 - 2006 IBM Corporation.
|
|
* 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:
|
|
* IBM Corporation - initial API and implementation
|
|
*******************************************************************************/
|
|
package com.ibm.wala.util.collections;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.NoSuchElementException;
|
|
|
|
import com.ibm.wala.util.debug.Assertions;
|
|
import com.ibm.wala.util.debug.UnimplementedError;
|
|
import com.ibm.wala.util.intset.OrdinalSetMapping;
|
|
|
|
/**
|
|
* A bit set mapping based on an immutable object array. This is not terribly efficient, but is useful for prototyping.
|
|
*/
|
|
public class ObjectArrayMapping<T> implements OrdinalSetMapping<T> {
|
|
|
|
final private T[] array;
|
|
|
|
/**
|
|
* A mapping from object to Integer
|
|
*/
|
|
final private HashMap<T, Integer> map = HashMapFactory.make();
|
|
|
|
public ObjectArrayMapping(final T[] array) {
|
|
if (array == null) {
|
|
throw new IllegalArgumentException("null array");
|
|
}
|
|
this.array = array;
|
|
for (int i = 0; i < array.length; i++) {
|
|
map.put(array[i], Integer.valueOf(i));
|
|
}
|
|
}
|
|
|
|
public T getMappedObject(int n) throws NoSuchElementException {
|
|
try {
|
|
return array[n];
|
|
} catch (ArrayIndexOutOfBoundsException e) {
|
|
throw new IllegalArgumentException("invalid n: " + n);
|
|
}
|
|
}
|
|
|
|
public int getMappedIndex(Object o) {
|
|
if (map.get(o) == null) {
|
|
return -1;
|
|
}
|
|
return map.get(o).intValue();
|
|
}
|
|
|
|
public boolean hasMappedIndex(Object o) {
|
|
return map.get(o) != null;
|
|
}
|
|
|
|
public Iterator<T> iterator() {
|
|
return map.keySet().iterator();
|
|
}
|
|
|
|
public int add(Object o) throws UnimplementedError {
|
|
Assertions.UNREACHABLE();
|
|
return 0;
|
|
}
|
|
|
|
public int getMaximumIndex() {
|
|
return array.length - 1;
|
|
}
|
|
|
|
public int getSize() {
|
|
return map.size();
|
|
}
|
|
}
|