Manipulate native MoonBit object in MoonBit
Dependencies
///|
let meta = Regular({ ptr_field_offset: 0, n_ptr_fields: 2, tag: 42 })///|
let meta = RefArray({
object_size_shift: 3, // Each element is 1 << 3 = 8 bytes
len: 100,
})///|
let meta = ValArray({ len: 100 })///|
fn my_finalizer(ptr : @c.Pointer[Unit]) -> Unit {
// Clean up resources
println("Finalizing object")
}
///|
let obj = make_external_object(my_finalizer, 64)// Create an external object with a finalizer
fn cleanup(ptr : @c.Pointer[Unit]) -> Unit {
println("Cleaning up external resource")
}
let obj = make_external_object(cleanup, 1024)
// Manually manage reference counts
incref(obj)
// ... use object ...
decref(obj) // Will call finalizer when count reaches 0
// Work with object metadata
let header = object_header(obj)
let meta = header.meta()
match meta {
External(e) => println("External object of size \{e.size}")
_ => ()
}pub struct External {
size : UInt
}type Finalizertype Objectpub struct RefArray {
object_size_shift : UInt
len : UInt
}pub struct Regular {
ptr_field_offset : UInt
n_ptr_fields : UInt
tag : UInt
}pub struct ValArray {
object_size_shift : UInt
len : UInt
}Manipulate native MoonBit object in MoonBit
Dependencies