Struct libffi::middle::Builder
[−]
[src]
pub struct Builder { /* fields omitted */ }Provides a builder-style API for constructing CIFs and closures.
To use a builder, first construct it using Builder::new.
The default calling convention is ffi_abi_FFI_DEFAULT_ABI, and the default
function type is extern "C" fn() (or in C, void(*)()). Add
argument types to the function type with the arg
and args methods. Set the result type with
res. Change the calling convention, if necessary,
with abi.
Once the builder is configured, construct a Cif with
into_cif or a closure with
into_closure,
into_closure_mut, or
into_closure_once.
Examples
use std::mem; use std::os::raw::c_void; use libffi::middle::*; use libffi::low; unsafe extern "C" fn lambda_callback<F: Fn(u64, u64) -> u64>( _cif: &low::ffi_cif, result: &mut u64, args: *const *const c_void, userdata: &F) { let args: *const &u64 = mem::transmute(args); let arg1 = **args.offset(0); let arg2 = **args.offset(1); *result = userdata(arg1, arg2); } let lambda = |x: u64, y: u64| x + y; let closure = Builder::new() .arg(Type::u64()) .arg(Type::u64()) .res(Type::u64()) .into_closure(lambda_callback, &lambda); unsafe { let fun: &unsafe extern "C" fn(u64, u64) -> u64 = mem::transmute(closure.code_ptr()); assert_eq!(11, fun(5, 6)); assert_eq!(12, fun(5, 7)); }
Methods
impl Builder[src]
pub fn new() -> Self[src]
Constructs a Builder.
pub fn arg(self, type_: Type) -> Self[src]
Adds a type to the argument type list.
pub fn args<I>(self, types: I) -> Self where
I: IntoIterator<Item = Type>, [src]
I: IntoIterator<Item = Type>,
Adds several types to the argument type list.
pub fn res(self, type_: Type) -> Self[src]
Sets the result type.
pub fn abi(self, abi: FfiAbi) -> Self[src]
Sets the calling convention.
pub fn into_cif(self) -> Cif[src]
Builds a CIF.
pub fn into_closure<U, R>(
self,
callback: Callback<U, R>,
userdata: &U
) -> Closure[src]
self,
callback: Callback<U, R>,
userdata: &U
) -> Closure
Builds an immutable closure.
Arguments
callback— the function to call when the closure is invokeduserdata— the pointer to pass tocallbackalong with the arguments when the closure is called
Result
The new closure.
pub fn into_closure_mut<U, R>(
self,
callback: CallbackMut<U, R>,
userdata: &mut U
) -> Closure[src]
self,
callback: CallbackMut<U, R>,
userdata: &mut U
) -> Closure
Builds a mutable closure.
Arguments
callback— the function to call when the closure is invokeduserdata— the pointer to pass tocallbackalong with the arguments when the closure is called
Result
The new closure.
pub fn into_closure_once<U: Any, R>(
self,
callback: CallbackOnce<U, R>,
userdata: U
) -> ClosureOnce[src]
self,
callback: CallbackOnce<U, R>,
userdata: U
) -> ClosureOnce
Trait Implementations
impl Clone for Builder[src]
fn clone(&self) -> Builder[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
Performs copy-assignment from source. Read more
impl Debug for Builder[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result[src]
Formats the value using the given formatter. Read more