7779af673abb521e99c18f99ba12139792eeeaf3
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / util / CompoundNameVector.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v0.5 
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v05.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  ******************************************************************************/
11 package net.sourceforge.phpdt.internal.compiler.util;
12
13 public final class CompoundNameVector {
14         static int INITIAL_SIZE = 10;
15     
16         public int size;
17         int maxSize;
18         char[][][] elements;
19 public CompoundNameVector() {
20         maxSize = INITIAL_SIZE;
21         size = 0;
22         elements = new char[maxSize][][];
23 }
24 public void add(char[][] newElement) {
25         if (size == maxSize)    // knows that size starts <= maxSize
26                 System.arraycopy(elements, 0, (elements = new char[maxSize *= 2][][]), 0, size);
27         elements[size++] = newElement;
28 }
29 public void addAll(char[][][] newElements) {
30         if (size + newElements.length >= maxSize) {
31                 maxSize = size + newElements.length;    // assume no more elements will be added
32                 System.arraycopy(elements, 0, (elements = new char[maxSize][][]), 0, size);
33         }
34         System.arraycopy(newElements, 0, elements, size, newElements.length);
35         size += newElements.length;
36 }
37 public boolean contains(char[][] element) {
38         for (int i = size; --i >= 0;)
39                 if (CharOperation.equals(element, elements[i]))
40                         return true;
41         return false;
42 }
43 public char[][] elementAt(int index) {
44         return elements[index];
45 }
46 public char[][] remove(char[][] element) {
47         // assumes only one occurrence of the element exists
48         for (int i = size; --i >= 0;)
49                 if (element == elements[i]) {
50                         // shift the remaining elements down one spot
51                         System.arraycopy(elements, i + 1, elements, i, --size - i);
52                         elements[size] = null;
53                         return element;
54                 }
55         return null;
56 }
57 public void removeAll() {
58         for (int i = size; --i >= 0;)
59                 elements[i] = null;
60         size = 0;
61 }
62 public String toString() {
63         StringBuffer buffer = new StringBuffer();
64         for (int i = 0; i < size; i++) {
65                 buffer.append(CharOperation.toString(elements[i])).append("\n"); //$NON-NLS-1$
66         }
67         return buffer.toString();
68 }
69 }