com.oracle.truffle.api.nodes.serial

## Interface SerializerConstantPool

    public interface SerializerConstantPool

Experimental API. May change without notice. This interface is used as bridge between the `PostOrderDeserializer`, `PostOrderSerializer` and underlying constant pool implementation. A constant pool stores a value and returns an identifying index, with which the object can later be returned from the pool again. All methods of this class are optional and may throw a `UnsupportedOperationException`.

### Method Summary

Methods
`java.lang.Class<?>` `getClass(int cpi)` Returns the `Class` instance to the given constant pool index.
`double` `getDouble(int cpi)` Returns the stored double value to the given constant pool index from the constant pool.
`float` `getFloat(int cpi)` Returns the stored float value to the given constant pool index from the constant pool.
`int` `getInt(int cpi)` Returns the stored int value to the given constant pool index from the constant pool.
`long` `getLong(int cpi)` Returns the stored long value to the given constant pool index from the constant pool.
`java.lang.Object` `getObject(java.lang.Class<?> clazz, int cpi)` Stores a value in the constant pool that is not a java native type, a java native-wrapper class or a `Class` instance.
`int` `putClass(java.lang.Class<?> value)` Stores a Class instance in the constant pool and returns the constant pool index.
`int` `putDouble(double value)` Stores a double value in the constant pool and returns the constant pool index.
`int` `putFloat(float value)` Stores a float value in the constant pool and returns the constant pool index.
`int` `putInt(int value)` Stores an int value in the constant pool and returns the constant pool index.
`int` `putLong(long value)` Stores a long value in the constant pool and returns the constant pool index.
`int` `putObject(java.lang.Class<?> clazz, java.lang.Object value)` Returns the constant pool index of a value that is not a java native type, a java native-wrapper class or a `Class` instance.

### Method Detail

#### putObject

    int putObject(java.lang.Class<?> clazz,
                java.lang.Object value)
                  throws UnsupportedConstantPoolTypeException

Returns the constant pool index of a value that is not a java native type, a java native-wrapper class or a `Class` instance. The implementor should support all additional types that are necessary to serialize a truffle AST for a specific truffle implementation. If a type is not supported by this constant pool implementation a `UnsupportedConstantPoolTypeException` should be thrown.

Parameters:
  `clazz` - the `Class` of the value
  `value` - the value to be stored. Must be at least a subclass of the given clazz.
Returns:
  the constant pool index
Throws:
  `UnsupportedConstantPoolTypeException` - if a type is not supported for persistence in the constant pool.

#### getObject

    java.lang.Object getObject(java.lang.Class<?> clazz,
                             int cpi)
                               throws UnsupportedConstantPoolTypeException

Stores a value in the constant pool that is not a java native type, a java native-wrapper class or a `Class` instance. The implementor should support all additional types that are necessary to serialize a truffle AST for a specific truffle implementation. If a type is not supported by this constant pool implementation a `UnsupportedConstantPoolTypeException` should be thrown.

Parameters:
  `clazz` - the `Class` of the value in the constant pool.
  `cpi` - the previously returned index
Returns:
  the value stored inside the constant pool
Throws:
  `UnsupportedConstantPoolTypeException` - if a type is not supported for persistence in the constant pool.
  `java.lang.IllegalArgumentException` - if the provided cpi is not a valid constant pool index.

#### putClass

    int putClass(java.lang.Class<?> value)

Stores a Class instance in the constant pool and returns the constant pool index.

Parameters:
  `value` - the class to store
Returns:
  the new or existing constant pool index of the Class

#### getClass

    java.lang.Class<?> getClass(int cpi)

Returns the `Class` instance to the given constant pool index.

Parameters:
  `cpi` - the constant pool index
Returns:
  stored value
Throws:
  `java.lang.IllegalArgumentException` - if the constant pool indes is invalid.

#### putInt

    int putInt(int value)

Stores an int value in the constant pool and returns the constant pool index.

Parameters:
  `value` - the value to store
Returns:
  the new or existing constant pool index of the value

#### getInt

    int getInt(int cpi)

Returns the stored int value to the given constant pool index from the constant pool.

Parameters:
  `cpi` - the constant pool index
Returns:
  stored value
Throws:
  `java.lang.IllegalArgumentException` - if the constant pool index is invalid.

#### putLong

    int putLong(long value)

Stores a long value in the constant pool and returns the constant pool index.

Parameters:
  `value` - the value to store
Returns:
  the new or existing constant pool index of the value

#### getLong

    long getLong(int cpi)

Returns the stored long value to the given constant pool index from the constant pool.

Parameters:
  `cpi` - the constant pool index
Returns:
  the stored value
Throws:
  `java.lang.IllegalArgumentException` - if the constant pool index is invalid.

#### putDouble

    int putDouble(double value)

Stores a double value in the constant pool and returns the constant pool index.

Parameters:
  `value` - the value to store
Returns:
  the new or existing constant pool index of the value

#### getDouble

    double getDouble(int cpi)

Returns the stored double value to the given constant pool index from the constant pool.

Parameters:
  `cpi` - the constant pool index
Returns:
  the stored value
Throws:
  `java.lang.IllegalArgumentException` - if the constant pool index is invalid.

#### putFloat

    int putFloat(float value)

Stores a float value in the constant pool and returns the constant pool index.

Parameters:
  `value` - the value to store
Returns:
  the new or existing constant pool index of the value

#### getFloat

    float getFloat(int cpi)

Returns the stored float value to the given constant pool index from the constant pool.

Parameters:
  `cpi` - the constant pool index
Returns:
  the stored value
Throws:
  `java.lang.IllegalArgumentException` - if the constant pool index is invalid.