001 package edu.rice.cs.cunit.classFile.constantPool; 002 003 import edu.rice.cs.cunit.classFile.constantPool.APoolInfo; 004 005 import java.util.ArrayList; 006 import java.util.Collection; 007 008 /** 009 * Constant pool. 010 * 011 * @author Mathias Ricken 012 */ 013 public class ConstantPool extends ArrayList<APoolInfo> { 014 /** 015 * Constructs an empty constant pool with the specified initial capacity. 016 * 017 * @param initialCapacity the initial capacity of the constant pool. 018 * 019 * @throws IllegalArgumentException if the specified initial capacity is negative 020 */ 021 public ConstantPool(int initialCapacity) { 022 super(initialCapacity); 023 } 024 025 /** 026 * Constructs an empty constant pool with an initial capacity of ten. 027 */ 028 public ConstantPool() { 029 } 030 031 /** 032 * Constructs a constant pool containing the elements of the specified collection, in the order they are returned 033 * by the collection's iterator. The <tt>ConstantPool</tt> instance has an initial capacity of 110% the size of 034 * the specified collection. 035 * 036 * @param aPoolInfos the collection whose elements are to be placed into this constant pool. 037 * 038 * @throws NullPointerException if the specified collection is null. 039 */ 040 public ConstantPool(Collection<? extends APoolInfo> aPoolInfos) { 041 super(aPoolInfos); 042 } 043 044 /** 045 * Return the index of the pool item in the pool. 046 * 047 * @param item item 048 * 049 * @return index 050 */ 051 public short indexOf(APoolInfo item) { 052 for(int i = 0; i < size(); i++) { 053 if (item == get(i)) { 054 return (short)i; 055 } 056 } 057 throw new AssertionError("Item not in pool: "+item.toStringVerbose()); 058 } 059 }