package org.eclipse.jdt.internal.core; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import org.eclipse.jdt.core.IType; | |
public final class TypeVector { | |
static int INITIAL_SIZE = 10; | |
public int size; | |
int maxSize; | |
IType[] elements; | |
public TypeVector() { | |
maxSize = INITIAL_SIZE; | |
size = 0; | |
elements = new IType[maxSize]; | |
} | |
public TypeVector(IType[] types) { | |
this.size = types.length; | |
this.maxSize = this.size + 1; // when an element is added, it assumes that the length is > 0 | |
elements = new IType[this.maxSize]; | |
System.arraycopy(types, 0, elements, 0, this.size); | |
} | |
public TypeVector(IType type) { | |
this.maxSize = INITIAL_SIZE; | |
this.size = 1; | |
elements = new IType[this.maxSize]; | |
elements[0] = type; | |
} | |
public void add(IType newElement) { | |
if (size == maxSize) // knows that size starts <= maxSize | |
System.arraycopy(elements, 0, (elements = new IType[maxSize *= 2]), 0, size); | |
elements[size++] = newElement; | |
} | |
public void addAll(IType[] newElements) { | |
if (size + newElements.length >= maxSize) { | |
maxSize = size + newElements.length; // assume no more elements will be added | |
System.arraycopy(elements, 0, (elements = new IType[maxSize]), 0, size); | |
} | |
System.arraycopy(newElements, 0, elements, size, newElements.length); | |
size += newElements.length; | |
} | |
public boolean contains(IType element) { | |
for (int i = size; --i >= 0;) | |
if (element.equals(elements[i])) | |
return true; | |
return false; | |
} | |
public TypeVector copy() { | |
TypeVector clone = new TypeVector(); | |
int length = this.elements.length; | |
System.arraycopy(this.elements, 0, clone.elements = new IType[length], 0, length); | |
clone.size = this.size; | |
clone.maxSize = this.maxSize; | |
return clone; | |
} | |
public IType elementAt(int index) { | |
return elements[index]; | |
} | |
public IType[] elements() { | |
if (this.size < this.maxSize) { | |
maxSize = size; | |
System.arraycopy(this.elements, 0, (this.elements = new IType[maxSize]), 0, size); | |
} | |
return this.elements; | |
} | |
public IType find(IType element) { | |
for (int i = size; --i >= 0;) | |
if (element == elements[i]) | |
return elements[i]; | |
return null; | |
} | |
public IType remove(IType element) { | |
// assumes only one occurrence of the element exists | |
for (int i = size; --i >= 0;) | |
if (element == elements[i]) { | |
// shift the remaining elements down one spot | |
System.arraycopy(elements, i + 1, elements, i, --size - i); | |
elements[size] = null; | |
return element; | |
} | |
return null; | |
} | |
public void removeAll() { | |
for (int i = size; --i >= 0;) | |
elements[i] = null; | |
size = 0; | |
} | |
public String toString() { | |
StringBuffer buffer = new StringBuffer("["); //$NON-NLS-1$ | |
for (int i = 0; i < size; i++) { | |
buffer.append("\n"); //$NON-NLS-1$ | |
buffer.append(elements[i]); | |
} | |
buffer.append("\n]"); //$NON-NLS-1$ | |
return buffer.toString(); | |
} | |
} |