Skip to content

DominicBurkart/funfun

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

funfun

Build Status Coverage Status Codecov Coverage Status Crates.io Rust Documentation

spawn_fn!

spawn_fn! Takes a closure or function and its arguments, runs the closure or function with the passed arguments in a new thread, and returns the thread's hook.

let eg = box_fn!(|x: i32| -> i32 {x + 2});
let also = box_fn!(|x: i32, y: i32| -> i32 {x + y});

let mut v1 = Vec::new();
for i1 in 0..10000 {
    let i2 = i1 + 10;
    v1.push(spawn_fn!(eg, i1));
    v1.push(spawn_fn!(also, i1, i2)); // woohoo multi-arity!
}
v1.push(spawn_fn!(||{println!("accepts closures to run in their own thread!"); 1}));

for res in v1.into_iter() {
    res.join();
}

box_fn!

box_fn! Boxes a closure and returns an Rc pointer.

type T = BoxFn<Fn(&str) -> String>;
struct F {
    c: T
}
let c: T = box_fn!(|s: &str| -> String {s.to_string()});
let mut f = F { c };
f.c = box_fn!(
    |d: &str| -> String {"reassign once".to_string()}
);
f.c = box_fn!(
    |_: &str| {"and again".to_string()}
);

arc_fn!

arc_fn! Boxes a closure and returns an Arc pointer. Slower than an Rc pointer, but allows derivation of traits like Clone.

type T = ArcFn<Fn(&str) -> String>;
#[derive(Clone)]
struct F {
    c: T
}
let c: T = arc_fn!(|s: &str| -> String {s.to_string()});
let mut f = F { c };
f.c = arc_fn!(
    |d: &str| -> String {"reassign once".to_string()}
);
f.c = arc_fn!(
    |_: &str| {"and again".to_string()}
);

Releases

No releases published

Packages

No packages published

Languages