// Generated by `wit-bindgen` 0.43.0. DO NOT EDIT!
///|
/// `pollable` represents a single I/O event which may be ready, or not.
pub(all) struct Pollable(Int) derive(Show, Eq)
///|
/// Drops a resource handle.
pub fn Pollable::drop(self : Pollable) -> Unit {
let Pollable(resource) = self
wasmImportResourceDropPollable(resource)
}
///|
/// Return the readiness of a pollable. This function never blocks.
///
/// Returns `true` when the pollable is ready, and `false` otherwise.
pub fn Pollable::ready(self : Pollable) -> Bool {
let Pollable(handle) = self
let result : Int = wasmImportMethodPollableReady(handle)
return result != 0
}
///|
/// `block` returns immediately if the pollable is ready, and otherwise
/// blocks until ready.
///
/// This function is equivalent to calling `poll.poll` on a list
/// containing only this pollable.
pub fn Pollable::block(self : Pollable) -> Unit {
let Pollable(handle) = self
wasmImportMethodPollableBlock(handle)
}
///|
/// Poll for completion on a set of pollables.
///
/// This function takes a list of pollables, which identify I/O sources of
/// interest, and waits until one or more of the events is ready for I/O.
///
/// The result `list` contains one or more indices of handles in the
/// argument list that is ready for I/O.
///
/// If the list contains more elements than can be indexed with a `u32`
/// value, this function traps.
///
/// A timeout can be implemented by adding a pollable from the
/// wasi-clocks API to the list.
///
/// This function does not return a `result`; polling in itself does not
/// do any I/O so it doesn't fail. If any of the I/O sources identified by
/// the pollables has an error, it is indicated by marking the source as
/// being reaedy for I/O.
pub fn poll(in_ : Array[Pollable]) -> FixedArray[UInt] {
let address = @ffi.malloc(in_.length() * 4)
for index = 0; index < in_.length(); index = index + 1 {
let element : Pollable = in_[index]
let base = address + index * 4
let Pollable(handle) = element
@ffi.store32(base + 0, handle)
}
let return_area = @ffi.malloc(8)
wasmImportPoll(address, in_.length(), return_area)
let result = @ffi.ptr2uint_array(
@ffi.load32(return_area + 0),
@ffi.load32(return_area + 4),
)
@ffi.free(address)
@ffi.free(return_area)
return result
}