/* * JacORB - a free Java ORB * * Copyright (C) 1999-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ package org.jacorb.collection.util; import java.util.Enumeration; import java.util.NoSuchElementException; public class DynArray { protected Object elementData[]; protected int elementCount = 0; public DynArray(int initialCapacity) { this.elementData = ArrayFactory.get_array( initialCapacity ); } public DynArray() { this.elementData = new Object[16]; } public void copyInto(Object anArray[]) { System.arraycopy( elementData, 0, anArray, 0, elementCount ); } public void ensureCapacity(int minCapacity) { if (minCapacity > elementData.length) { ensureCapacityHelper(minCapacity); } } private void ensureCapacityHelper(int minCapacity) { Object [] oldData = elementData; elementData = ArrayFactory.get_array( minCapacity ); System.arraycopy(oldData, 0, elementData, 0, elementCount); ArrayFactory.free_array( oldData ); } public void setSize(int newSize) { if (newSize > elementCount) { if (newSize > elementData.length) { ensureCapacityHelper(newSize); } for (int i = newSize ; i >= elementCount ;) { elementData[--i] = null; } } else { for(int i = newSize; i<elementCount; i++ ){ elementData[i] = null; } } elementCount = newSize; } public int capacity() { return elementData.length; } public int size() { return elementCount; } public boolean isEmpty() { return elementCount == 0; } public Enumeration elements() { return new DynArrayEnumerator(this); } public boolean contains(Object elem) { return indexOf(elem, 0) >= 0; } public int indexOf(Object elem) { return indexOf(elem, 0); } public int indexOf(Object elem, int index) { if (index >= elementCount) { throw new ArrayIndexOutOfBoundsException(index); } for (int i = index ; i < elementCount ; i++) { if (elem.equals(elementData[i])) { return i; } } return -1; } public Object elementAt(int index) { return elementData[index]; } public void setElementAt(Object obj, int index) { if (index >= elementCount) { throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount); } elementData[index] = obj; } public void removeElementAt(int index) { if (index >= elementCount || index < 0) { throw new ArrayIndexOutOfBoundsException(index); } int j = elementCount - index - 1; if (j > 0) { System.arraycopy(elementData, index + 1, elementData, index, j); } elementCount--; elementData[elementCount] = null; } public void insertElementAt(Object obj, int index) { int newcount = elementCount + 1; if (index >= newcount) { throw new ArrayIndexOutOfBoundsException(index); } if (newcount > elementData.length) { ensureCapacityHelper(newcount); } System.arraycopy(elementData, index, elementData, index + 1, elementCount - index); elementData[index] = obj; elementCount++; } public void addElement(Object obj) { int newcount = elementCount + 1; if (newcount > elementData.length) { ensureCapacityHelper(newcount); } elementData[elementCount++] = obj; } public boolean removeElement(Object obj) { int i = indexOf(obj); if (i >= 0) { removeElementAt(i); return true; } return false; } public void removeAllElements() { for (int i = 0; i < elementCount; i++) { elementData[i] = null; } elementCount = 0; } public Object firstElement() { if (elementCount == 0) { throw new NoSuchElementException(); } return elementData[0]; } public Object lastElement() { if (elementCount == 0) { throw new NoSuchElementException(); } return elementData[elementCount - 1]; } protected void finalize(){ if( elementData != null ){ ArrayFactory.free_array( elementData ); } } } final class DynArrayEnumerator implements java.util.Enumeration { Object [] data; int count; int elementCount; DynArrayEnumerator(DynArray da) { data = ArrayFactory.get_array( da.elementCount ); elementCount = da.elementCount; System.arraycopy(da.elementData, 0, data, 0, da.elementCount ); count = 0; } public boolean hasMoreElements() { return count < elementCount; } public Object nextElement() { if (count < elementCount) { return data[count++]; } if( data != null ){ ArrayFactory.free_array( data ); } throw new NoSuchElementException("DynArrayEnumerator"); } protected void finalize(){ if( data != null ){ ArrayFactory.free_array( data ); } } }