Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2000, 2009 IBM Corporation 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: IBM Corporation - initial API and implementation /
 
 package org.eclipse.jdt.internal.compiler.util;

Hashtable of {Object --> int }
 
 public final class HashtableOfObjectToInt implements Cloneable {
 
 	// to avoid using Enumerations, walk the individual tables skipping nulls
 	public Object[] keyTable;
 	public int[] valueTable;
 
 	public int elementSize// number of elements in the table
 	int threshold;
 
 	public HashtableOfObjectToInt() {
 		this(13);
 	}
 
 	public HashtableOfObjectToInt(int size) {
 
 		this. = 0;
 		this. = size// size represents the expected number of elements
 		int extraRoom = (int) (size * 1.75f);
 		if (this. == extraRoom)
 			extraRoom++;
 		this. = new Object[extraRoom];
 		this. = new int[extraRoom];
 	}
 
 	public Object clone() throws CloneNotSupportedException {
 		result.elementSize = this.;
 		result.threshold = this.;
 
 		int length = this..length;
 		result.keyTable = new Object[length];
 		System.arraycopy(this., 0, result.keyTable, 0, length);
 
 		length = this..length;
 		result.valueTable = new int[length];
 		System.arraycopy(this., 0, result.valueTable, 0, length);
 		return result;
 	}
 
 	public boolean containsKey(Object key) {
 		int length = this..length,
 			index = (key.hashCode()& 0x7FFFFFFF) % length;
 		Object currentKey;
 		while ((currentKey = this.[index]) != null) {
 			if (currentKey.equals(key))
 				return true;
 			if (++index == length) {
 				index = 0;
 			}
 		}
 		return false;
 	}
 
 	public int get(Object key) {
 		int length = this..length,
 			index = (key.hashCode()& 0x7FFFFFFF) % length;
 		Object currentKey;
 		while ((currentKey = this.[index]) != null) {
 			if (currentKey.equals(key))
 				return this.[index];
 			if (++index == length) {
 				index = 0;
 			}
 		}
 		return -1;
 	}
 
 	public void keysToArray(Object[] array) {
 		int index = 0;
 		for (int i=0, length=this..lengthi<lengthi++) {
 			if (this.[i] != null)
 				array[index++] = this.[i];
 		}
 	}
 
 	public int put(Object keyint value) {
 		int length = this..length,
 			index = (key.hashCode()& 0x7FFFFFFF) % length;
 		Object currentKey;
 		while ((currentKey = this.[index]) != null) {
 			if (currentKey.equals(key))
 				return this.[index] = value;
 			if (++index == length) {
 				index = 0;
			}
		}
		this.[index] = key;
		this.[index] = value;
		// assumes the threshold is never equal to the size of the table
		if (++this. > this.)
		return value;
	}
	public int removeKey(Object key) {
		int length = this..length,
			index = (key.hashCode()& 0x7FFFFFFF) % length;
		Object currentKey;
		while ((currentKey = this.[index]) != null) {
			if (currentKey.equals(key)) {
				int value = this.[index];
				this.[index] = null;
				return value;
			}
			if (++index == length) {
				index = 0;
			}
		}
		return -1;
	}
	private void rehash() {
		HashtableOfObjectToInt newHashtable = new HashtableOfObjectToInt(this. * 2);		// double the number of expected elements
		Object currentKey;
		for (int i = this..length; --i >= 0;)
			if ((currentKey = this.[i]) != null)
				newHashtable.put(currentKeythis.[i]);
		this. = newHashtable.keyTable;
		this. = newHashtable.valueTable;
		this. = newHashtable.threshold;
	}
	public int size() {
		return this.;
	}
	public String toString() {
		String s = ""//$NON-NLS-1$
		Object key;
		for (int i = 0, length = this..lengthi < lengthi++)
			if ((key = this.[i]) != null)
				s += key + " -> " + this.[i] + "\n"//$NON-NLS-2$ //$NON-NLS-1$
		return s;
	}
New to GrepCode? Check out our FAQ X