Package serp.bytecode.lowlevel

# Class ConstantPool

java.lang.Object
serp.bytecode.lowlevel.ConstantPool

All Implemented Interfaces:
  `VisitAcceptor`

public class ConstantPool extends Object implements VisitAcceptor
A bytecode constant pool, containing entries for all strings, constants, classes, etc referenced in the class structure and method opcodes. In keeping with the low-level bytecode representation, all pool indexes are 1-based and `LongEntry`s and `DoubleEntry`s each occupy two indexes in the pool.

Author:
  Abe White

## Constructor Summary

Constructors
Constructor
Description
`ConstantPool()`
Default constructor.

## Method Summary

Modifier and Type
Method
Description
`void`
`acceptVisit(BCVisitor visit)`
Accept a visit from a `BCVisitor`, calling the appropriate methods to notify the visitor that it has entered this entity, and to provide it with the proper callbacks for each sub-entity owned by this one.
`int`
`addEntry(Entry entry)`
Add an entry to the pool.
`void`
`clear()`
Clear all entries from the pool.
`int`
`findClassEntry(String name, boolean add)`
Return the constant pool index of the `ClassEntry` for the given class name, or 0 if it does not exist.
`int`
`findDoubleEntry(double value, boolean add)`
Return the constant pool index of the `DoubleEntry` for the given value, or 0 if it does not exist.
`int`
`findFieldEntry(String owner, String name, String desc, boolean add)`
Return the constant pool index of the `FieldEntry` for the given name, descriptor, and owner class name.
`int`
`findFloatEntry(float value, boolean add)`
Return the constant pool index of the `FloatEntry` for the given value, or 0 if it does not exist.
`int`
`findIntEntry(int value, boolean add)`
Return the constant pool index of the `IntEntry` for the given value, or 0 if it does not exist.
`int`
`findInterfaceMethodEntry(String owner, String name, String desc, boolean add)`
Return the constant pool index of the `InterfaceMethodEntry` for the given name, descriptor, and owner class name.
`int`
`findInvokeDynamicEntry(int bootstrapMethodIndex, String name, String desc, boolean add)`
`int`
`findLongEntry(long value, boolean add)`
Return the constant pool index of the `LongEntry` for the given value, or 0 if it does not exist.
`int`
`findMethodEntry(String owner, String name, String desc, boolean add)`
Return the constant pool index of the `MethodEntry` for the given name, descriptor, and owner class name.
`int`
`findNameAndTypeEntry(String name, String desc, boolean add)`
Return the constant pool index of the `NameAndTypeEntry` for the given name and descriptor, or 0 if it does not exist.
`int`
`findStringEntry(String value, boolean add)`
Return the constant pool index of the `StringEntry` for the given string value, or 0 if it does not exist.
`int`
`findUTF8Entry(String value, boolean add)`
Return the index of the `UTF8Entry` with the given value, or 0 if it does not exist.
`Entry[]`
`getEntries()`
Return all the entries in the pool.
`Entry`
`getEntry(int index)`
Retrieve the entry at the specified 1-based index.
`int`
`indexOf(Entry entry)`
Return the index of the given entry, or 0 if it is not in the pool.
`void`
`read(DataInput in)`
Fill the constant pool from the given bytecode stream.
`boolean`
`removeEntry(Entry entry)`
Remove the given entry from the pool.
`int`
`size()`
Return the number of places occupied in the pool, including the fact that long and double entries occupy two places.
`void`
`write(DataOutput out)`
Write the constant pool to the given bytecode stream.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### ConstantPool

public ConstantPool()
Default constructor.

## Method Details

### getEntries

public Entry[] getEntries()
Return all the entries in the pool.

### getEntry

public Entry getEntry(int index)
Retrieve the entry at the specified 1-based index.

Throws:
  `IndexOutOfBoundsException` - if index is invalid, including the case that it points to the second slot of a long or double entry

### indexOf

public int indexOf(Entry entry)
Return the index of the given entry, or 0 if it is not in the pool.

### addEntry

public int addEntry(Entry entry)
Add an entry to the pool.

Returns:
  the index at which the entry was added

### removeEntry

public boolean removeEntry(Entry entry)
Remove the given entry from the pool.

Returns:
  false if the entry is not in the pool, true otherwise

### clear

public void clear()
Clear all entries from the pool.

### size

public int size()
Return the number of places occupied in the pool, including the fact that long and double entries occupy two places.

### findUTF8Entry

public int findUTF8Entry(String value, boolean add)
Return the index of the `UTF8Entry` with the given value, or 0 if it does not exist.

Parameters:
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findDoubleEntry

public int findDoubleEntry(double value, boolean add)
Return the constant pool index of the `DoubleEntry` for the given value, or 0 if it does not exist.

Parameters:
  `value` - the value to find
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findFloatEntry

public int findFloatEntry(float value, boolean add)
Return the constant pool index of the `FloatEntry` for the given value, or 0 if it does not exist.

Parameters:
  `value` - the value to find
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findIntEntry

public int findIntEntry(int value, boolean add)
Return the constant pool index of the `IntEntry` for the given value, or 0 if it does not exist.

Parameters:
  `value` - the value to find
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findLongEntry

public int findLongEntry(long value, boolean add)
Return the constant pool index of the `LongEntry` for the given value, or 0 if it does not exist.

Parameters:
  `value` - the value to find
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findStringEntry

public int findStringEntry(String value, boolean add)
Return the constant pool index of the `StringEntry` for the given string value, or 0 if it does not exist.

Parameters:
  `value` - the value to find
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findClassEntry

public int findClassEntry(String name, boolean add)
Return the constant pool index of the `ClassEntry` for the given class name, or 0 if it does not exist.

Parameters:
  `name` - the class name in internal form
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findNameAndTypeEntry

public int findNameAndTypeEntry(String name, String desc, boolean add)
Return the constant pool index of the `NameAndTypeEntry` for the given name and descriptor, or 0 if it does not exist.

Parameters:
  `name` - the name of the entity
  `desc` - the descriptor of the entity in internal form
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findFieldEntry

public int findFieldEntry(String owner, String name, String desc, boolean add)
Return the constant pool index of the `FieldEntry` for the given name, descriptor, and owner class name.

Parameters:
  `owner` - the name of the field's owning class in internal form
  `name` - the name of the field
  `desc` - the descriptor of the field in internal form
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findMethodEntry

public int findMethodEntry(String owner, String name, String desc, boolean add)
Return the constant pool index of the `MethodEntry` for the given name, descriptor, and owner class name.

Parameters:
  `owner` - the name of the method's owning class in internal form
  `name` - the name of the method
  `desc` - the descriptor of the method in internal form
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findInterfaceMethodEntry

public int findInterfaceMethodEntry(String owner, String name, String desc, boolean add)
Return the constant pool index of the `InterfaceMethodEntry` for the given name, descriptor, and owner class name.

Parameters:
  `owner` - the name of the method's owning class in internal form
  `name` - the name of the method
  `desc` - the descriptor of the method in internal form
  `add` - if true, the entry will be added if it does not already exist, and the new entry's index returned

### findInvokeDynamicEntry

public int findInvokeDynamicEntry(int bootstrapMethodIndex, String name, String desc, boolean add)

### acceptVisit

public void acceptVisit(BCVisitor visit)
Description copied from interface: `VisitAcceptor`
Accept a visit from a `BCVisitor`, calling the appropriate methods to notify the visitor that it has entered this entity, and to provide it with the proper callbacks for each sub-entity owned by this one.

Specified by:
  `acceptVisit` in interface `VisitAcceptor`

### read

public void read(DataInput in) throws IOException
Fill the constant pool from the given bytecode stream.

Throws:
  `IOException`

### write

public void write(DataOutput out) throws IOException
Write the constant pool to the given bytecode stream.

Throws:
  `IOException`