import { DirtyMarkable } from "./"; import { type Buffer } from "./buffer"; import { ConstantType, HandleKind } from "./spec"; export interface Entry { type: ConstantType; index: number; } export interface NumericEntry extends Entry { type: ConstantType.INTEGER | ConstantType.LONG | ConstantType.FLOAT | ConstantType.DOUBLE; value: T; } export interface NumberEntry extends NumericEntry { type: ConstantType.INTEGER | ConstantType.FLOAT | ConstantType.DOUBLE; } export interface LongEntry extends NumericEntry { type: ConstantType.LONG; } export interface ClassEntry extends Entry { type: ConstantType.CLASS; name: number; nameEntry?: UTF8Entry; } export interface UTF8Entry extends Entry, DirtyMarkable { type: ConstantType.UTF8; string: string; bytes: Uint8Array; } export interface StringEntry extends Entry { type: ConstantType.STRING; data: number; dataEntry?: UTF8Entry; } export interface NameTypeEntry extends Entry { type: ConstantType.NAME_AND_TYPE; name: number; nameEntry?: UTF8Entry; type_: number; typeEntry?: UTF8Entry; } export interface RefEntry extends Entry { type: ConstantType.FIELDREF | ConstantType.METHODREF | ConstantType.INTERFACE_METHODREF; ref: number; refEntry?: ClassEntry; nameType: number; nameTypeEntry?: NameTypeEntry; } export interface ModularEntry extends Entry { type: ConstantType.MODULE | ConstantType.PACKAGE; name: number; nameEntry?: UTF8Entry; } export interface DynamicEntry extends Entry { type: ConstantType.DYNAMIC | ConstantType.INVOKE_DYNAMIC; bsmIndex: number; nameType: number; nameTypeEntry?: NameTypeEntry; } export interface HandleEntry extends Entry { type: ConstantType.METHOD_HANDLE; ref: number; refEntry?: RefEntry; kind: HandleKind; } export interface MethodTypeEntry extends Entry { type: ConstantType.METHOD_TYPE; descriptor: number; descriptorEntry?: UTF8Entry; } export type Pool = (Entry | null)[]; export declare const readPool: (buffer: Buffer, flags?: number) => Pool; export declare const writePool: (buffer: Buffer, pool: Pool) => void;