| /* |
| * Copyright 2000-2013 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.util.containers; |
| |
| @Deprecated // use TLongArrayList instead |
| public class LongArrayList implements Cloneable { |
| private long[] myData; |
| private int mySize; |
| |
| public LongArrayList(int initialCapacity) { |
| myData = new long[initialCapacity]; |
| } |
| |
| public LongArrayList() { |
| this(10); |
| } |
| |
| public void trimToSize() { |
| int oldCapacity = myData.length; |
| if (mySize < oldCapacity){ |
| long[] oldData = myData; |
| myData = new long[mySize]; |
| System.arraycopy(oldData, 0, myData, 0, mySize); |
| } |
| } |
| |
| public void ensureCapacity(int minCapacity) { |
| int oldCapacity = myData.length; |
| if (minCapacity > oldCapacity){ |
| long[] oldData = myData; |
| int newCapacity = (oldCapacity * 3) / 2 + 1; |
| if (newCapacity < minCapacity){ |
| newCapacity = minCapacity; |
| } |
| myData = new long[newCapacity]; |
| System.arraycopy(oldData, 0, myData, 0, mySize); |
| } |
| } |
| |
| public int size() { |
| return mySize; |
| } |
| |
| public boolean isEmpty() { |
| return mySize == 0; |
| } |
| |
| public boolean contains(long elem) { |
| return indexOf(elem) >= 0; |
| } |
| |
| public int indexOf(long elem) { |
| for(int i = 0; i < mySize; i++){ |
| if (elem == myData[i]) return i; |
| } |
| return -1; |
| } |
| |
| public int lastIndexOf(long elem) { |
| for(int i = mySize - 1; i >= 0; i--){ |
| if (elem == myData[i]) return i; |
| } |
| return -1; |
| } |
| |
| @Override |
| public Object clone() { |
| try{ |
| LongArrayList v = (LongArrayList)super.clone(); |
| v.myData = new long[mySize]; |
| System.arraycopy(myData, 0, v.myData, 0, mySize); |
| return v; |
| } |
| catch(CloneNotSupportedException e){ |
| // this shouldn't happen, since we are Cloneable |
| throw new InternalError(); |
| } |
| } |
| |
| public long[] toArray() { |
| long[] result = new long[mySize]; |
| System.arraycopy(myData, 0, result, 0, mySize); |
| return result; |
| } |
| |
| public long[] toArray(long[] a) { |
| if (a.length < mySize){ |
| a = new long[mySize]; |
| } |
| |
| System.arraycopy(myData, 0, a, 0, mySize); |
| |
| return a; |
| } |
| |
| public long get(int index) { |
| checkRange(index); |
| return myData[index]; |
| } |
| |
| public long set(int index, long element) { |
| checkRange(index); |
| |
| long oldValue = myData[index]; |
| myData[index] = element; |
| return oldValue; |
| } |
| |
| public void add(long o) { |
| ensureCapacity(mySize + 1); |
| myData[mySize++] = o; |
| } |
| |
| public void add(int index, long element) { |
| if (index > mySize || index < 0){ |
| throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + mySize); |
| } |
| |
| ensureCapacity(mySize + 1); |
| System.arraycopy(myData, index, myData, index + 1, mySize - index); |
| myData[index] = element; |
| mySize++; |
| } |
| |
| public long remove(int index) { |
| checkRange(index); |
| |
| long oldValue = myData[index]; |
| |
| int numMoved = mySize - index - 1; |
| if (numMoved > 0){ |
| System.arraycopy(myData, index + 1, myData, index,numMoved); |
| } |
| mySize--; |
| |
| return oldValue; |
| } |
| |
| public void clear() { |
| mySize = 0; |
| } |
| |
| protected void removeRange(int fromIndex, int toIndex) { |
| int numMoved = mySize - toIndex; |
| System.arraycopy(myData, toIndex, myData, fromIndex, numMoved); |
| mySize -= (toIndex - fromIndex); |
| } |
| |
| private void checkRange(int index) { |
| if (index >= mySize || index < 0){ |
| throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + mySize); |
| } |
| } |
| } |