Class NativeMemoryBindings
Provides type-safe wrappers for Panama FFI memory operations (read, write, grow, size), atomic memory operations (compare-and-swap, load, store, fence, notify, wait), global variable operations (get, set, create, destroy, metadata), table operations (size, get, set, grow, fill, copy, init, destroy), data/element segment operations, and error handling functions.
Hot-path operations (panamaMemoryReadBytes(java.lang.foreign.MemorySegment, java.lang.foreign.MemorySegment, long, long, java.lang.foreign.MemorySegment) and panamaMemoryWriteBytes(java.lang.foreign.MemorySegment, java.lang.foreign.MemorySegment, long, long, java.lang.foreign.MemorySegment)) use
eagerly-initialized volatile MethodHandle fields for invokeExact optimization.
-
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddFunctionBinding(String functionName, FunctionDescriptor descriptor) Registers a native function binding with a given descriptor.<T> TcallNativeFunction(String functionName, Class<T> returnType, Object... args) Calls a native function with type safety.voidClears any stored error state in the native library.intdataSegmentDrop(MemorySegment instancePtr, int dataSegmentIndex) Drops a data segment from memory (data.drop instruction).intelemDrop(MemorySegment instancePtr, int segmentIndex) Drops an element segment (elem.drop instruction).protected Object[]extractValueForNative(ai.tegmentum.wasmtime4j.WasmValue value) Extracts value components from WasmValue for passing to native code.voidfreeErrorMessage(MemorySegment messagePtr) Frees an error message returned by getLastErrorMessage.voidfreeString(MemorySegment stringPtr) Frees a C string allocated by Rust.protected ai.tegmentum.wasmtime4j.panama.NativeBindingsBase.FunctionBindinggetFunctionBinding(String functionName) Gets a registered function binding by name.static NativeMemoryBindingsGets the singleton instance.Gets the last error message from the native library.Gets the method handle for Panama FFI global creation.Gets the method handle for Panama FFI memory creation (simple version).Gets the method handle for async memory creation with config (async resource limiter path).Gets the method handle for Panama FFI memory creation (with configuration).Gets the method handle for Panama FFI table creation.Gets the method handle for Panama FFI 64-bit table creation.Gets the method handle for async table creation (async resource limiter path).Gets the method handle for Panama FFI table creation with initial value.Gets the method handle for Panama FFI table deletion.Gets the method handle for Panama FFI table fill.Gets the method handle for Panama FFI table element get.Gets the method handle for Panama FFI table grow.Gets the method handle for Panama FFI table metadata retrieval.Gets the method handle for Panama FFI table element set.Gets the method handle for Panama FFI table size retrieval.Gets the method handle for table deletion.Gets the method handle for table element get.Gets the method handle for table grow.Gets the method handle for table metadata retrieval.Gets the method handle for table element set.Gets the method handle for table size query.globalCreate(MemorySegment storePtr, int valueType, int isMutable, ai.tegmentum.wasmtime4j.WasmValue initialValue) Creates a new WebAssembly global variable.intglobalCreateImmutable(MemorySegment storePtr, int valueType, MemorySegment initialValuePtr, MemorySegment globalOutPtr) Creates an immutable WebAssembly global.intglobalCreateMutable(MemorySegment storePtr, int valueType, MemorySegment initialValuePtr, MemorySegment globalOutPtr) Creates a mutable WebAssembly global.voidglobalDestroy(MemorySegment globalPtr) Destroys a WebAssembly global.voidglobalGet(MemorySegment globalPtr, MemorySegment valueOutPtr) Gets the value of a WebAssembly global.globalGetDirectAccess(MemorySegment globalPtr) Gets direct access to a global's value for zero-copy operations.intglobalGetTypeInfo(MemorySegment globalPtr, MemorySegment typeInfoOutPtr, MemorySegment mutabilityOutPtr) Gets type information for a WebAssembly global.globalLookupShared(MemorySegment namePtr, MemorySegment registryPtr) Looks up a shared global by name.intglobalRegisterShared(MemorySegment globalPtr, MemorySegment namePtr, MemorySegment registryPtr) Registers a global for cross-module sharing.voidglobalReleaseDirectAccess(MemorySegment globalPtr, MemorySegment directPtr) Releases direct access to a global's value.voidglobalSet(MemorySegment globalPtr, MemorySegment valuePtr) Sets the value of a WebAssembly global.globalType(MemorySegment globalPtr) Gets the type of a WebAssembly global.booleanChecks if the bindings are initialized and available.protected voidMarks this binding set as initialized.intmemoryAtomicAddI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic add on 32-bit value.intmemoryAtomicAddI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic add on 64-bit value.intmemoryAtomicAndI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic AND on 32-bit value.intmemoryAtomicAndI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic AND on 64-bit value.intmemoryAtomicCompareAndSwapI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int expected, int newValue, MemorySegment resultOut) Atomic compare-and-swap on 32-bit value.intmemoryAtomicCompareAndSwapI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long expected, long newValue, MemorySegment resultOut) Atomic compare-and-swap on 64-bit value.intmemoryAtomicFence(MemorySegment memoryPtr, MemorySegment storePtr) Atomic memory fence.intmemoryAtomicLoadI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, MemorySegment resultOut) Atomic load of 32-bit value.intmemoryAtomicLoadI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, MemorySegment resultOut) Atomic load of 64-bit value.intmemoryAtomicNotify(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int count, MemorySegment resultOut) Atomic notify/wake.intmemoryAtomicOrI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic OR on 32-bit value.intmemoryAtomicOrI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic OR on 64-bit value.intmemoryAtomicStoreI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value) Atomic store of 32-bit value.intmemoryAtomicStoreI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value) Atomic store of 64-bit value.intmemoryAtomicWait32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int expected, long timeoutNanos, MemorySegment resultOut) Atomic wait on 32-bit value.intmemoryAtomicWait64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long expected, long timeoutNanos, MemorySegment resultOut) Atomic wait on 64-bit value.intmemoryAtomicXorI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic XOR on 32-bit value.intmemoryAtomicXorI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic XOR on 64-bit value.intClears all memory and store handle registries (for testing purposes).voidmemoryDestroy(MemorySegment memoryPtr) Destroys a validated memory instance and unregisters it from the handle registry.intpanamaGlobalCreate(MemorySegment storePtr, int valueType, int mutability, ai.tegmentum.wasmtime4j.WasmValue value, MemorySegment namePtr, MemorySegment globalPtrPtr) Creates a new WebAssembly global with a WasmValue (Panama FFI version).voidpanamaGlobalDestroy(MemorySegment globalPtr) Destroys a WebAssembly global (Panama FFI version).intpanamaGlobalGet(MemorySegment globalPtr, MemorySegment storePtr, MemorySegment i32ValueOutPtr, MemorySegment i64ValueOutPtr, MemorySegment f32ValueOutPtr, MemorySegment f64ValueOutPtr, MemorySegment refIdPresentOutPtr, MemorySegment refIdOutPtr, MemorySegment v128BytesOutPtr) Gets the value of a WebAssembly global (Panama FFI version).intpanamaGlobalMetadata(MemorySegment globalPtr, MemorySegment valueTypePtr, MemorySegment mutabilityPtr) Gets metadata for a WebAssembly global (Panama FFI version).intpanamaGlobalSet(MemorySegment globalPtr, MemorySegment storePtr, int valueType, int i32Value, long i64Value, double f32Value, double f64Value, int refIdPresent, long refId, MemorySegment v128BytesPtr) Sets the value of a WebAssembly global (Panama FFI version).intpanamaGlobalSet(MemorySegment globalPtr, MemorySegment storePtr, ai.tegmentum.wasmtime4j.WasmValue value) Sets a WebAssembly global value using WasmValue (Panama FFI version).intpanamaMemoryGetData(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment dataPtrOutPtr, MemorySegment sizeOutPtr) Gets raw pointer to WASM linear memory for zero-copy access.intpanamaMemoryGetMaximum(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment maximumOutPtr) Gets memory type maximum pages (Panama FFI version).intpanamaMemoryGetMinimum(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment minimumOutPtr) Gets memory type minimum pages (Panama FFI version).intpanamaMemoryGetPageSizeLog2(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment pageSizeLog2OutPtr) Gets memory type page size log2 (Panama FFI version).intpanamaMemoryGrow(MemorySegment memoryPtr, MemorySegment storePtr, long additionalPages, MemorySegment previousPagesOutPtr) Grows memory by additional pages (Panama FFI version).intpanamaMemoryGrow64(MemorySegment memoryPtr, MemorySegment storePtr, long additionalPages, MemorySegment previousPagesOutPtr) Grows memory by additional pages using 64-bit addressing (Panama FFI version).intpanamaMemoryGrowAsync(MemorySegment memoryPtr, MemorySegment storePtr, long additionalPages, MemorySegment previousPagesOutPtr) Grows memory asynchronously through the async resource limiter (Panama FFI version).intpanamaMemoryInit(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment instancePtr, int destOffset, int dataSegmentIndex, int srcOffset, int length) Initializes memory from a data segment (memory.init instruction).intpanamaMemoryIs64Bit(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment is64BitOutPtr) Checks if memory uses 64-bit addressing (Memory64 proposal).intpanamaMemoryIsShared(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment isSharedOutPtr) Checks if memory is shared between threads (Panama FFI version).intpanamaMemoryReadBytes(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long length, MemorySegment bufferPtr) Reads bytes from memory (Panama FFI version).intpanamaMemorySizeBytes(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment sizeOutPtr) Gets memory size in bytes (Panama FFI version).intpanamaMemorySizePages(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment sizeOutPtr) Gets memory size in pages (Panama FFI version).intpanamaMemorySizePages64(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment sizeOutPtr) Gets memory size in pages using 64-bit return value (Panama FFI version).intpanamaMemoryWriteBytes(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long length, MemorySegment bufferPtr) Writes bytes to memory (Panama FFI version).intpanamaTableCopy(MemorySegment tablePtr, MemorySegment storePtr, int dst, int src, int count) Copies elements within a table (same table).intpanamaTableCopyFrom(MemorySegment dstTablePtr, MemorySegment storePtr, int dst, MemorySegment srcTablePtr, int src, int count) Copies elements from one table to another.intpanamaTableGrowAsync(MemorySegment tablePtr, MemorySegment storePtr, int delta, int elementType, int refIdPresent, long refId, MemorySegment oldSizeOut) Grows a table asynchronously through the async resource limiter (Panama FFI version).intpanamaTableInit(MemorySegment tablePtr, MemorySegment storePtr, MemorySegment instancePtr, int destIndex, int srcIndex, int count, int segmentIndex) Initializes a table from an element segment (table.init instruction).booleantableSupports64BitAddressing(MemorySegment tablePtr, MemorySegment storePtr) Checks if a table supports 64-bit addressing (Table64).protected voidvalidatePointer(MemorySegment pointer, String name) Validates that a pointer is not null.protected voidvalidateSize(long size, String name) Validates that a size is positive.
-
Method Details
-
getInstance
Gets the singleton instance.- Returns:
- the singleton instance
- Throws:
RuntimeException- if initialization fails
-
panamaMemoryInit
public int panamaMemoryInit(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment instancePtr, int destOffset, int dataSegmentIndex, int srcOffset, int length) Initializes memory from a data segment (memory.init instruction).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeinstancePtr- pointer to the instancedestOffset- destination offset in memorydataSegmentIndex- data segment indexsrcOffset- source offset in segmentlength- number of bytes to copy- Returns:
- 0 on success, non-zero on error
-
dataSegmentDrop
Drops a data segment from memory (data.drop instruction).- Parameters:
instancePtr- pointer to the instancedataSegmentIndex- data segment index to drop- Returns:
- 0 on success, non-zero on error
-
panamaMemorySizePages
public int panamaMemorySizePages(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment sizeOutPtr) Gets memory size in pages (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storesizeOutPtr- pointer to store the size in pages- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGrow
public int panamaMemoryGrow(MemorySegment memoryPtr, MemorySegment storePtr, long additionalPages, MemorySegment previousPagesOutPtr) Grows memory by additional pages (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeadditionalPages- number of pages to growpreviousPagesOutPtr- pointer to store the previous size in pages- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGrow64
public int panamaMemoryGrow64(MemorySegment memoryPtr, MemorySegment storePtr, long additionalPages, MemorySegment previousPagesOutPtr) Grows memory by additional pages using 64-bit addressing (Panama FFI version).This supports Memory64 proposal for memories larger than 4GB.
- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeadditionalPages- number of pages to grow (64-bit)previousPagesOutPtr- pointer to store the previous size in pages (64-bit)- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGrowAsync
public int panamaMemoryGrowAsync(MemorySegment memoryPtr, MemorySegment storePtr, long additionalPages, MemorySegment previousPagesOutPtr) Grows memory asynchronously through the async resource limiter (Panama FFI version).Requires engine with
asyncSupport(true).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeadditionalPages- number of pages to growpreviousPagesOutPtr- pointer to store the previous size in pages- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryIs64Bit
public int panamaMemoryIs64Bit(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment is64BitOutPtr) Checks if memory uses 64-bit addressing (Memory64 proposal).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeis64BitOutPtr- pointer to store the result (1 if 64-bit, 0 if 32-bit)- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGetMinimum
public int panamaMemoryGetMinimum(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment minimumOutPtr) Gets memory type minimum pages (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeminimumOutPtr- pointer to store the minimum pages (64-bit unsigned)- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGetMaximum
public int panamaMemoryGetMaximum(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment maximumOutPtr) Gets memory type maximum pages (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storemaximumOutPtr- pointer to store the maximum pages (64-bit signed, -1 if unlimited)- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGetPageSizeLog2
public int panamaMemoryGetPageSizeLog2(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment pageSizeLog2OutPtr) Gets memory type page size log2 (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storepageSizeLog2OutPtr- pointer to store the page size log2 (32-bit unsigned)- Returns:
- 0 on success, negative error code on failure
-
panamaMemorySizePages64
public int panamaMemorySizePages64(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment sizeOutPtr) Gets memory size in pages using 64-bit return value (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storesizeOutPtr- pointer to store the size in pages (64-bit)- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryReadBytes
public int panamaMemoryReadBytes(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long length, MemorySegment bufferPtr) Reads bytes from memory (Panama FFI version).This method uses an eagerly-initialized
MethodHandleforinvokeExactoptimization on the hot path, falling back to the genericcallNativeFunctionpath if the handle is unavailable.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- offset in memory to read fromlength- number of bytes to readbufferPtr- pointer to buffer to read into- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryWriteBytes
public int panamaMemoryWriteBytes(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long length, MemorySegment bufferPtr) Writes bytes to memory (Panama FFI version).This method uses an eagerly-initialized
MethodHandleforinvokeExactoptimization on the hot path, falling back to the genericcallNativeFunctionpath if the handle is unavailable.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- offset in memory to write tolength- number of bytes to writebufferPtr- pointer to buffer to write from- Returns:
- 0 on success, negative error code on failure
-
panamaMemorySizeBytes
public int panamaMemorySizeBytes(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment sizeOutPtr) Gets memory size in bytes (Panama FFI version).- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storesizeOutPtr- pointer to store the size in bytes- Returns:
- 0 on success, negative error code on failure
-
panamaMemoryGetData
public int panamaMemoryGetData(MemorySegment memoryPtr, MemorySegment storePtr, MemorySegment dataPtrOutPtr, MemorySegment sizeOutPtr) Gets raw pointer to WASM linear memory for zero-copy access.This provides direct access to the WebAssembly linear memory without copying, enabling high-performance memory operations.
WARNING: The returned pointer is only valid while:
- The memory instance is alive
- The store is alive
- No memory.grow() operations are performed
After memory.grow(), the pointer may be invalidated and must be re-obtained.
- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storedataPtrOutPtr- pointer to store the raw memory data pointersizeOutPtr- pointer to store the memory size in bytes- Returns:
- 0 on success, negative error code on failure
-
getPanamaMemoryCreate
Gets the method handle for Panama FFI memory creation (simple version).- Returns:
- the method handle, or null if not available
-
getPanamaMemoryCreateWithConfig
Gets the method handle for Panama FFI memory creation (with configuration).- Returns:
- the method handle, or null if not available
-
getPanamaMemoryCreateAsync
Gets the method handle for async memory creation with config (async resource limiter path).- Returns:
- the method handle, or null if not available
-
memoryDestroy
Destroys a validated memory instance and unregisters it from the handle registry.This must be called to properly free native memory pointers obtained from memory creation or instance export lookup.
- Parameters:
memoryPtr- pointer to the validated memory to destroy
-
memoryClearHandleRegistries
public int memoryClearHandleRegistries()Clears all memory and store handle registries (for testing purposes).This function clears both memory and store handle registries to prevent stale handles from interfering with subsequent tests. Should only be called in test teardown after all handles have been properly destroyed.
- Returns:
- 0 on success, negative error code on failure
-
memoryAtomicCompareAndSwapI32
public int memoryAtomicCompareAndSwapI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int expected, int newValue, MemorySegment resultOut) Atomic compare-and-swap on 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryexpected- expected valuenewValue- new value to swap inresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicCompareAndSwapI64
public int memoryAtomicCompareAndSwapI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long expected, long newValue, MemorySegment resultOut) Atomic compare-and-swap on 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryexpected- expected valuenewValue- new value to swap inresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicLoadI32
public int memoryAtomicLoadI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, MemorySegment resultOut) Atomic load of 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryresultOut- pointer to store the value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicLoadI64
public int memoryAtomicLoadI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, MemorySegment resultOut) Atomic load of 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryresultOut- pointer to store the value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicStoreI32
public int memoryAtomicStoreI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value) Atomic store of 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to store- Returns:
- 0 on success, error code otherwise
-
memoryAtomicStoreI64
public int memoryAtomicStoreI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value) Atomic store of 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to store- Returns:
- 0 on success, error code otherwise
-
memoryAtomicAddI32
public int memoryAtomicAddI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic add on 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to addresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicAddI64
public int memoryAtomicAddI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic add on 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to addresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicAndI32
public int memoryAtomicAndI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic AND on 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to ANDresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicOrI32
public int memoryAtomicOrI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic OR on 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to ORresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicXorI32
public int memoryAtomicXorI32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int value, MemorySegment resultOut) Atomic XOR on 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to XORresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicAndI64
public int memoryAtomicAndI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic AND on 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to ANDresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicOrI64
public int memoryAtomicOrI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic OR on 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to ORresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicXorI64
public int memoryAtomicXorI64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long value, MemorySegment resultOut) Atomic XOR on 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryvalue- value to XORresultOut- pointer to store the old value- Returns:
- 0 on success, error code otherwise
-
memoryAtomicFence
Atomic memory fence.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the store- Returns:
- 0 on success, error code otherwise
-
memoryAtomicNotify
public int memoryAtomicNotify(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int count, MemorySegment resultOut) Atomic notify/wake.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memorycount- number of waiters to wakeresultOut- pointer to store number of waiters woken- Returns:
- 0 on success, error code otherwise
-
memoryAtomicWait32
public int memoryAtomicWait32(MemorySegment memoryPtr, MemorySegment storePtr, long offset, int expected, long timeoutNanos, MemorySegment resultOut) Atomic wait on 32-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryexpected- expected valuetimeoutNanos- timeout in nanoseconds (-1 for infinite)resultOut- pointer to store the wait result (0=ok, 1=not-equal, 2=timed-out)- Returns:
- 0 on success, error code otherwise
-
memoryAtomicWait64
public int memoryAtomicWait64(MemorySegment memoryPtr, MemorySegment storePtr, long offset, long expected, long timeoutNanos, MemorySegment resultOut) Atomic wait on 64-bit value.- Parameters:
memoryPtr- pointer to the memorystorePtr- pointer to the storeoffset- byte offset in memoryexpected- expected valuetimeoutNanos- timeout in nanoseconds (-1 for infinite)resultOut- pointer to store the wait result (0=ok, 1=not-equal, 2=timed-out)- Returns:
- 0 on success, error code otherwise
-
globalCreate
public MemorySegment globalCreate(MemorySegment storePtr, int valueType, int isMutable, ai.tegmentum.wasmtime4j.WasmValue initialValue) Creates a new WebAssembly global variable.- Parameters:
storePtr- pointer to the storevalueType- the WebAssembly value type codeisMutable- 1 if mutable, 0 if immutableinitialValue- the initial value for the global- Returns:
- pointer to the created global, or null on failure
-
globalGet
Gets the value of a WebAssembly global.- Parameters:
globalPtr- pointer to the globalvalueOutPtr- pointer to store the global value
-
globalSet
Sets the value of a WebAssembly global.- Parameters:
globalPtr- pointer to the globalvaluePtr- pointer to the new value
-
globalType
Gets the type of a WebAssembly global.- Parameters:
globalPtr- pointer to the global- Returns:
- pointer to the global type
-
globalCreateMutable
public int globalCreateMutable(MemorySegment storePtr, int valueType, MemorySegment initialValuePtr, MemorySegment globalOutPtr) Creates a mutable WebAssembly global.- Parameters:
storePtr- pointer to the storevalueType- the WebAssembly value typeinitialValuePtr- pointer to the initial valueglobalOutPtr- pointer to store the created global- Returns:
- 0 on success, negative error code on failure
-
globalCreateImmutable
public int globalCreateImmutable(MemorySegment storePtr, int valueType, MemorySegment initialValuePtr, MemorySegment globalOutPtr) Creates an immutable WebAssembly global.- Parameters:
storePtr- pointer to the storevalueType- the WebAssembly value typeinitialValuePtr- pointer to the initial valueglobalOutPtr- pointer to store the created global- Returns:
- 0 on success, negative error code on failure
-
globalDestroy
Destroys a WebAssembly global.- Parameters:
globalPtr- pointer to the global to destroy
-
panamaGlobalGet
public int panamaGlobalGet(MemorySegment globalPtr, MemorySegment storePtr, MemorySegment i32ValueOutPtr, MemorySegment i64ValueOutPtr, MemorySegment f32ValueOutPtr, MemorySegment f64ValueOutPtr, MemorySegment refIdPresentOutPtr, MemorySegment refIdOutPtr, MemorySegment v128BytesOutPtr) Gets the value of a WebAssembly global (Panama FFI version).- Parameters:
globalPtr- pointer to the globalstorePtr- pointer to the storei32ValueOutPtr- pointer to store i32 valuei64ValueOutPtr- pointer to store i64 valuef32ValueOutPtr- pointer to store f32 valuef64ValueOutPtr- pointer to store f64 valuerefIdPresentOutPtr- pointer to store reference presence flagrefIdOutPtr- pointer to store reference IDv128BytesOutPtr- pointer to store V128 bytes (16 bytes, can be null)- Returns:
- 0 on success, negative error code on failure
-
panamaGlobalSet
public int panamaGlobalSet(MemorySegment globalPtr, MemorySegment storePtr, int valueType, int i32Value, long i64Value, double f32Value, double f64Value, int refIdPresent, long refId, MemorySegment v128BytesPtr) Sets the value of a WebAssembly global (Panama FFI version).- Parameters:
globalPtr- pointer to the globalstorePtr- pointer to the storevalueType- the value type (0=I32, 1=I64, 2=F32, 3=F64, 4=V128, 5=FuncRef, 6=ExternRef)i32Value- i32 valuei64Value- i64 valuef32Value- f32 valuef64Value- f64 valuerefIdPresent- reference presence flagrefId- reference IDv128BytesPtr- pointer to V128 bytes (16 bytes, can be null)- Returns:
- 0 on success, negative error code on failure
-
panamaGlobalSet
public int panamaGlobalSet(MemorySegment globalPtr, MemorySegment storePtr, ai.tegmentum.wasmtime4j.WasmValue value) Sets a WebAssembly global value using WasmValue (Panama FFI version).- Parameters:
globalPtr- pointer to the globalstorePtr- pointer to the storevalue- the value to set- Returns:
- 0 on success, negative error code on failure
-
globalGetTypeInfo
public int globalGetTypeInfo(MemorySegment globalPtr, MemorySegment typeInfoOutPtr, MemorySegment mutabilityOutPtr) Gets type information for a WebAssembly global.- Parameters:
globalPtr- pointer to the globaltypeInfoOutPtr- pointer to store the type informationmutabilityOutPtr- pointer to store the mutability flag- Returns:
- 0 on success, negative error code on failure
-
panamaGlobalCreate
public int panamaGlobalCreate(MemorySegment storePtr, int valueType, int mutability, ai.tegmentum.wasmtime4j.WasmValue value, MemorySegment namePtr, MemorySegment globalPtrPtr) Creates a new WebAssembly global with a WasmValue (Panama FFI version).- Parameters:
storePtr- pointer to the storevalueType- the value type (0=I32, 1=I64, 2=F32, 3=F64, 4=V128, 5=FuncRef, 6=ExternRef)mutability- mutability flag (0=const, 1=var)value- the initial valuenamePtr- optional name pointer (can be null)globalPtrPtr- pointer to store the created global pointer- Returns:
- 0 on success, negative error code on failure
-
panamaGlobalMetadata
public int panamaGlobalMetadata(MemorySegment globalPtr, MemorySegment valueTypePtr, MemorySegment mutabilityPtr) Gets metadata for a WebAssembly global (Panama FFI version).- Parameters:
globalPtr- pointer to the globalvalueTypePtr- pointer to store the value type codemutabilityPtr- pointer to store the mutability flag- Returns:
- 0 on success, negative error code on failure
-
panamaGlobalDestroy
Destroys a WebAssembly global (Panama FFI version).- Parameters:
globalPtr- pointer to the global
-
globalGetDirectAccess
Gets direct access to a global's value for zero-copy operations.- Parameters:
globalPtr- pointer to the global- Returns:
- pointer to direct value access, or null if not supported
-
globalReleaseDirectAccess
Releases direct access to a global's value.- Parameters:
globalPtr- pointer to the globaldirectPtr- pointer to the direct access handle
-
getPanamaGlobalCreate
Gets the method handle for Panama FFI global creation.- Returns:
- the method handle, or null if not available
-
getTableSize
Gets the method handle for table size query.- Returns:
- the method handle, or null if not available
-
getTableGet
Gets the method handle for table element get.- Returns:
- the method handle, or null if not available
-
getTableSet
Gets the method handle for table element set.- Returns:
- the method handle, or null if not available
-
getTableGrow
Gets the method handle for table grow.- Returns:
- the method handle, or null if not available
-
getTableDelete
Gets the method handle for table deletion.- Returns:
- the method handle, or null if not available
-
getTableMetadata
Gets the method handle for table metadata retrieval.- Returns:
- the method handle, or null if not available
-
getPanamaTableSize
Gets the method handle for Panama FFI table size retrieval.- Returns:
- the method handle, or null if not available
-
getPanamaTableGet
Gets the method handle for Panama FFI table element get.- Returns:
- the method handle, or null if not available
-
getPanamaTableSet
Gets the method handle for Panama FFI table element set.- Returns:
- the method handle, or null if not available
-
getPanamaTableGrow
Gets the method handle for Panama FFI table grow.- Returns:
- the method handle, or null if not available
-
panamaTableGrowAsync
public int panamaTableGrowAsync(MemorySegment tablePtr, MemorySegment storePtr, int delta, int elementType, int refIdPresent, long refId, MemorySegment oldSizeOut) Grows a table asynchronously through the async resource limiter (Panama FFI version).Requires engine with
asyncSupport(true).- Parameters:
tablePtr- pointer to the tablestorePtr- pointer to the storedelta- number of elements to addelementType- element type code (5=FUNCREF, 6=EXTERNREF)refIdPresent- whether a reference ID is provided (0=no, 1=yes)refId- the reference ID for the init valueoldSizeOut- pointer to store the previous size- Returns:
- 0 on success, non-zero on failure
-
getPanamaTableMetadata
Gets the method handle for Panama FFI table metadata retrieval.- Returns:
- the method handle, or null if not available
-
getPanamaTableFill
Gets the method handle for Panama FFI table fill.- Returns:
- the method handle, or null if not available
-
panamaTableCopy
public int panamaTableCopy(MemorySegment tablePtr, MemorySegment storePtr, int dst, int src, int count) Copies elements within a table (same table).This is equivalent to the WebAssembly table.copy instruction when copying within the same table.
- Parameters:
tablePtr- pointer to the tablestorePtr- pointer to the storedst- destination index in the tablesrc- source index in the tablecount- number of elements to copy- Returns:
- 0 on success, non-zero on error
-
panamaTableCopyFrom
public int panamaTableCopyFrom(MemorySegment dstTablePtr, MemorySegment storePtr, int dst, MemorySegment srcTablePtr, int src, int count) Copies elements from one table to another.This is equivalent to the WebAssembly table.copy instruction when copying between different tables.
- Parameters:
dstTablePtr- pointer to the destination tablestorePtr- pointer to the storedst- destination index in the destination tablesrcTablePtr- pointer to the source tablesrc- source index in the source tablecount- number of elements to copy- Returns:
- 0 on success, non-zero on error
-
getPanamaTableDelete
Gets the method handle for Panama FFI table deletion.- Returns:
- the method handle, or null if not available
-
getPanamaTableCreate
Gets the method handle for Panama FFI table creation.- Returns:
- the method handle, or null if not available
-
getPanamaTableCreateWithInit
Gets the method handle for Panama FFI table creation with initial value.- Returns:
- the method handle, or null if not available
-
getPanamaTableCreate64
Gets the method handle for Panama FFI 64-bit table creation.- Returns:
- the method handle, or null if not available
-
getPanamaTableCreateAsync
Gets the method handle for async table creation (async resource limiter path).- Returns:
- the method handle, or null if not available
-
panamaTableInit
public int panamaTableInit(MemorySegment tablePtr, MemorySegment storePtr, MemorySegment instancePtr, int destIndex, int srcIndex, int count, int segmentIndex) Initializes a table from an element segment (table.init instruction).- Parameters:
tablePtr- pointer to the tablestorePtr- pointer to the storeinstancePtr- pointer to the instancedestIndex- destination index in the tablesrcIndex- source index in the element segmentcount- number of elements to copysegmentIndex- element segment index- Returns:
- 0 on success, non-zero on error
-
elemDrop
Drops an element segment (elem.drop instruction).- Parameters:
instancePtr- pointer to the instancesegmentIndex- element segment index to drop- Returns:
- 0 on success, non-zero on error
-
tableSupports64BitAddressing
Checks if a table supports 64-bit addressing (Table64).- Parameters:
tablePtr- pointer to the tablestorePtr- pointer to the store- Returns:
- true if the table supports 64-bit addressing
-
getLastErrorMessage
Gets the last error message from the native library.- Returns:
- pointer to error message string, or null if no error
-
freeErrorMessage
Frees an error message returned by getLastErrorMessage.- Parameters:
messagePtr- pointer to the error message to free
-
freeString
Frees a C string allocated by Rust.- Parameters:
stringPtr- pointer to the C string to free
-
clearErrorState
public void clearErrorState()Clears any stored error state in the native library. -
markInitialized
protected void markInitialized()Marks this binding set as initialized. Subclasses should call this after registering all function bindings and initializing hot-path MethodHandles. -
isInitialized
public boolean isInitialized()Checks if the bindings are initialized and available.- Returns:
- true if initialized, false otherwise
-
addFunctionBinding
Registers a native function binding with a given descriptor.- Parameters:
functionName- the native function symbol namedescriptor- the Panama FunctionDescriptor for the native function
-
getFunctionBinding
protected ai.tegmentum.wasmtime4j.panama.NativeBindingsBase.FunctionBinding getFunctionBinding(String functionName) Gets a registered function binding by name.- Parameters:
functionName- the native function symbol name- Returns:
- the function binding, or null if not registered
-
callNativeFunction
Calls a native function with type safety.- Parameters:
functionName- the name of the functionreturnType- the expected return typeargs- the function arguments- Returns:
- the function result
- Throws:
IllegalStateException- if the function call fails
-
validatePointer
Validates that a pointer is not null.- Parameters:
pointer- the pointer to validatename- the name of the parameter for error messages- Throws:
IllegalArgumentException- if the pointer is null
-
validateSize
Validates that a size is positive.- Parameters:
size- the size to validatename- the name of the parameter for error messages- Throws:
IllegalArgumentException- if the size is not positive
-
extractValueForNative
Extracts value components from WasmValue for passing to native code.- Parameters:
value- the WasmValue to extract components from- Returns:
- array containing [i32Value, i64Value, f32Value, f64Value, refValue]
-