/******************************************************************************* * Copyright (c) 2004, 2008 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 * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.parser.util; /** * @author Doug Schaefer */ public class CharArrayIntMap extends CharTable { private int[] valueTable; public final int undefined; public CharArrayIntMap(int initialSize, int undefined) { super(initialSize); valueTable = new int[capacity()]; this.undefined = undefined; } @Override protected void resize(int size) { int[] oldValueTable = valueTable; valueTable = new int[size]; System.arraycopy(oldValueTable, 0, valueTable, 0, Math.min(size, oldValueTable.length)); super.resize(size); } @Override public void clear() { super.clear(); for( int i = 0; i < capacity(); i++ ) valueTable[i] = undefined; } @Override public Object clone(){ CharArrayIntMap newMap = (CharArrayIntMap) super.clone(); newMap.valueTable = new int[ capacity() ]; System.arraycopy(valueTable, 0, newMap.valueTable, 0, valueTable.length); return newMap; } public int put(char[] key, int start, int length, int value) { int i = addIndex(key, start, length); int oldvalue = valueTable[i]; valueTable[i] = value; return oldvalue; } public int put(char[] key, int value) { return put(key, 0, key.length, value); } public int get(char[] key, int start, int length) { int i = lookup(key, start, length); if (i >= 0) return valueTable[i]; return undefined; } public int get(int pos) { if( pos < 0 || pos > currEntry ) return undefined; return valueTable[pos]; } public int getKeyLocation(char[] key, int start, int length) { int i = lookup(key, start, length); if (i >= 0) return i; return undefined; } public int get(char[] image) { return get( image, 0, image.length ); } /** * Puts all mappings of map into this map. The keys are not cloned. * @since 5.0 */ public void putAll(CharArrayIntMap map) { resize(size() + map.size()); for(int i=0; i<=map.currEntry; i++) { put(map.keyTable[i], map.valueTable[i]); } } }