RPNXCortado
C++23 JVM class-file, bytecode, validation, and JAR toolkit
Loading...
Searching...
No Matches
rpnx::cortado::constant_pool_builder Class Reference

Interns constant-pool entries while retaining deterministic first-insertion order. More...

#include <builders.hpp>

Public Member Functions

 constant_pool_builder ()=default
 Constructs an empty constant pool.
 
 constant_pool_builder (std::vector< constant_pool_entry > entries)
 Initializes an interner from an exact existing pool.
 
constant_pool_index intern (constant_pool_entry entry)
 Interns an exact constant-pool entry.
 
constant_pool_index add_utf8 (std::string_view bytes)
 Interns a modified-UTF-8 byte sequence.
 
constant_pool_index add_class (std::string_view internal_name)
 Interns a CONSTANT_Class and its name.
 
constant_pool_index add_string (std::string_view bytes)
 Interns a CONSTANT_String and its modified-UTF-8 payload.
 
constant_pool_index add_name_and_type (std::string_view name, std::string_view descriptor)
 Interns a CONSTANT_NameAndType.
 
constant_pool_index add_fieldref (std::string_view owner, std::string_view name, std::string_view descriptor)
 Interns a CONSTANT_Fieldref.
 
constant_pool_index add_methodref (std::string_view owner, std::string_view name, std::string_view descriptor)
 Interns a CONSTANT_Methodref.
 
constant_pool_index add_interface_methodref (std::string_view owner, std::string_view name, std::string_view descriptor)
 Interns a CONSTANT_InterfaceMethodref.
 
constant_pool_entry const & entry_at (constant_pool_index index) const
 Returns an exact entry by logical constant-pool index.
 
std::string_view utf8_at (constant_pool_index index) const
 Returns modified-UTF-8 bytes by logical constant-pool index.
 
std::vector< constant_pool_entry > const & entries () const noexcept
 Returns the exact current entry sequence.
 
std::vector< constant_pool_entrybuild () const
 Copies the exact current entry sequence.
 

Detailed Description

Interns constant-pool entries while retaining deterministic first-insertion order.

Logical indexes include the reserved slot after every long or double. Re-interning an equal entry returns its original index without changing the sequence. Returned entry references remain valid only until the next operation that may grow the pool.

Definition at line 182 of file builders.hpp.

Constructor & Destructor Documentation

◆ constant_pool_builder()

rpnx::cortado::constant_pool_builder::constant_pool_builder ( std::vector< constant_pool_entry > entries)
explicit

Initializes an interner from an exact existing pool.

Parameters
entriesExisting entry sequence in logical order without explicit reserved-slot values.
Exceptions
validation_errorif the sequence cannot fit in the JVM constant-pool index space.

References entries().

Member Function Documentation

◆ add_class()

constant_pool_index rpnx::cortado::constant_pool_builder::add_class ( std::string_view internal_name)
nodiscard

Interns a CONSTANT_Class and its name.

Parameters
internal_nameSlash-separated class name or array descriptor.
Returns
Index of the matching class_constant.

◆ add_fieldref()

constant_pool_index rpnx::cortado::constant_pool_builder::add_fieldref ( std::string_view owner,
std::string_view name,
std::string_view descriptor )
nodiscard

Interns a CONSTANT_Fieldref.

Parameters
ownerDeclaring class internal name.
nameField name.
descriptorField descriptor.
Returns
Index of the matching fieldref_constant.

◆ add_interface_methodref()

constant_pool_index rpnx::cortado::constant_pool_builder::add_interface_methodref ( std::string_view owner,
std::string_view name,
std::string_view descriptor )
nodiscard

Interns a CONSTANT_InterfaceMethodref.

Parameters
ownerDeclaring interface internal name.
nameMethod name.
descriptorMethod descriptor.
Returns
Index of the matching interface_methodref_constant.

◆ add_methodref()

constant_pool_index rpnx::cortado::constant_pool_builder::add_methodref ( std::string_view owner,
std::string_view name,
std::string_view descriptor )
nodiscard

Interns a CONSTANT_Methodref.

Parameters
ownerDeclaring class internal name.
nameMethod name.
descriptorMethod descriptor.
Returns
Index of the matching methodref_constant.

◆ add_name_and_type()

constant_pool_index rpnx::cortado::constant_pool_builder::add_name_and_type ( std::string_view name,
std::string_view descriptor )
nodiscard

Interns a CONSTANT_NameAndType.

Parameters
nameMember name bytes.
descriptorField or method descriptor bytes.
Returns
Index of the matching name_and_type_constant.

◆ add_string()

constant_pool_index rpnx::cortado::constant_pool_builder::add_string ( std::string_view bytes)
nodiscard

Interns a CONSTANT_String and its modified-UTF-8 payload.

Parameters
bytesExact string contents, copied during the call.
Returns
Index of the matching string_constant.

◆ add_utf8()

constant_pool_index rpnx::cortado::constant_pool_builder::add_utf8 ( std::string_view bytes)
nodiscard

Interns a modified-UTF-8 byte sequence.

Parameters
bytesExact modified-UTF-8 payload, copied during the call.
Returns
Index of the matching utf8_constant.

◆ build()

std::vector< constant_pool_entry > rpnx::cortado::constant_pool_builder::build ( ) const
nodiscard

Copies the exact current entry sequence.

Returns
Owning entry sequence suitable for class_file::constant_pool.

References build().

Referenced by build().

◆ entries()

std::vector< constant_pool_entry > const & rpnx::cortado::constant_pool_builder::entries ( ) const
nodiscardnoexcept

Returns the exact current entry sequence.

Returns
Non-owning view of entries without explicit reserved-slot values.

Referenced by constant_pool_builder().

◆ entry_at()

constant_pool_entry const & rpnx::cortado::constant_pool_builder::entry_at ( constant_pool_index index) const
nodiscard

Returns an exact entry by logical constant-pool index.

Parameters
indexNonzero occupied logical pool slot.
Returns
Reference to the corresponding entry.
Exceptions
validation_errorif the index is zero, out of range, or a reserved second slot.

◆ intern()

constant_pool_index rpnx::cortado::constant_pool_builder::intern ( constant_pool_entry entry)
nodiscard

Interns an exact constant-pool entry.

Parameters
entryOwning entry value to find or append.
Returns
Stable logical index of the equal entry.
Exceptions
assembly_errorif appending would overflow the constant-pool index space.

◆ utf8_at()

std::string_view rpnx::cortado::constant_pool_builder::utf8_at ( constant_pool_index index) const
nodiscard

Returns modified-UTF-8 bytes by logical constant-pool index.

Parameters
indexIndex expected to identify a utf8_constant.
Returns
View into the owned modified-UTF-8 payload.
Exceptions
validation_errorif the index is invalid or has another constant kind.

The documentation for this class was generated from the following file: