#![allow(clippy::type_complexity)]
#![allow(unused_variables)]
use super::helpers::*;
use crate::dag::DagArmSeed;
use crate::pipeline::{PipelineBuilder, resolve_step};
use crate::{Broadcast, IntoHandler, Local, Res, ResMut, World, fan_out};
#[inline(never)]
pub fn pipe_linear_1(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(add_one, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_2(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_3(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(double, ®)
.then(add_three, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_5(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(double, ®)
.then(add_three, ®)
.then(square, ®)
.then(sub_ten, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_10(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(double, ®)
.then(add_three, ®)
.then(square, ®)
.then(sub_ten, ®)
.then(shr_one, ®)
.then(xor_mask, ®)
.then(add_seven, ®)
.then(triple, ®)
.then(add_forty_two, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_20(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(double, ®)
.then(add_three, ®)
.then(square, ®)
.then(sub_ten, ®)
.then(shr_one, ®)
.then(xor_mask, ®)
.then(add_seven, ®)
.then(triple, ®)
.then(add_forty_two, ®)
.then(add_one, ®)
.then(double, ®)
.then(add_three, ®)
.then(square, ®)
.then(sub_ten, ®)
.then(shr_one, ®)
.then(xor_mask, ®)
.then(add_seven, ®)
.then(triple, ®)
.then(add_forty_two, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_0_params(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(double, ®)
.then(add_three, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_linear_mixed_arity(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(add_res_a, ®)
.then(write_res_a, ®)
.then(add_both, ®)
.then(three_params, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_guard_basic(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.guard(|x: &u64| *x > 10, ®)
.inspect(|_x: &u64| {}, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_guard_then(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.guard(|x: &u64| *x > 10, ®)
.map(double, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_filter_basic(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.guard(|x: &u64| *x > 10, ®)
.filter(|x: &u64| *x < 1000, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_dedup(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dedup()
.inspect(|_x: &u64| {}, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_dedup_chain(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dedup()
.map(double, ®)
.unwrap_or_else(|| 0, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_guard_large_type(world: &mut World, input: [u8; 256]) -> Option<[u8; 256]> {
let reg = world.registry();
let mut p = PipelineBuilder::<[u8; 256]>::new()
.then(|x: [u8; 256]| x, ®)
.guard(|x: &[u8; 256]| x[0] > 0, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_map(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.map(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_and_then(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.and_then(checked_double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_filter(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.filter(|x: &u64| *x < 1000, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_inspect(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.inspect(|_x: &u64| {}, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_on_none(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.on_none(|| {}, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_ok_or(world: &mut World, input: u64) -> Result<u64, u32> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.ok_or(42u32);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_ok_or_else(world: &mut World, input: u64) -> Result<u64, u32> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.ok_or_else(|| 42u32, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_unwrap_or(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_unwrap_or_else(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.unwrap_or_else(|| 0, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_map_filter(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.map(double, ®)
.filter(|x: &u64| *x < 1000, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_map_and_then(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.map(double, ®)
.and_then(checked_double, ®)
.unwrap_or_else(|| 0, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_filter_inspect_unwrap(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.filter(|x: &u64| *x < 1000, ®)
.inspect(|_x: &u64| {}, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_triple_filter(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.filter(|x: &u64| *x < 10000, ®)
.filter(|x: &u64| *x > 5, ®)
.filter(|x: &u64| x & 1 == 0, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_map_5x(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.map(add_one, ®)
.map(double, ®)
.map(add_three, ®)
.map(square, ®)
.map(sub_ten, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_guard_skip_10(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 100, ®)
.map(add_one, ®)
.map(double, ®)
.map(add_three, ®)
.map(square, ®)
.map(sub_ten, ®)
.map(shr_one, ®)
.map(xor_mask, ®)
.map(add_seven, ®)
.map(triple, ®)
.map(add_forty_two, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_filter_skip_chain(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.filter(|x: &u64| *x < 50, ®)
.map(add_one, ®)
.map(double, ®)
.map(add_three, ®)
.map(square, ®)
.map(sub_ten, ®)
.map(shr_one, ®)
.map(xor_mask, ®)
.map(add_seven, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_map(world: &mut World, input: u64) -> Result<u64, u32> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.map(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_and_then(world: &mut World, input: u64) -> Result<u64, u32> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.and_then(try_parse, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_catch(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
fn log_error(_err: u32) {}
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.catch(log_error, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_map_err(world: &mut World, input: u64) -> Result<u64, u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.map_err(|e: u32| e as u64, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_or_else(world: &mut World, input: u64) -> Result<u64, u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.or_else(|e: u32| Err(e as u64), ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_inspect(world: &mut World, input: u64) -> Result<u64, u32> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.inspect(|_x: &u64| {}, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_inspect_err(world: &mut World, input: u64) -> Result<u64, u32> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.inspect_err(|_e: &u32| {}, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_ok(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(try_parse, ®).ok();
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_unwrap_or(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_unwrap_or_else(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.unwrap_or_else(|e: u32| e as u64, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_map_and_then(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.map(double, ®)
.and_then(try_parse, ®)
.unwrap_or_else(|e: u32| e as u64, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_map_err_or_else(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.map_err(|e: u32| e as u64, ®)
.or_else(|e: u64| Ok::<u64, u64>(e), ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_inspect_both(world: &mut World, input: u64) -> Option<u64> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.inspect(|_v: &u64| {}, ®)
.inspect_err(|_e: &u32| {}, ®)
.ok();
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_catch_then_option(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn log_error(_err: u32) {}
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.catch(log_error, ®)
.map(double, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_map_5x(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.map(add_one, ®)
.map(double, ®)
.map(add_three, ®)
.map(square, ®)
.map(sub_ten, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_err_skip_10(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.map(add_one, ®)
.map(double, ®)
.map(add_three, ®)
.map(square, ®)
.map(sub_ten, ®)
.map(shr_one, ®)
.map(xor_mask, ®)
.map(add_seven, ®)
.map(triple, ®)
.map(add_forty_two, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_res_catch_skip_chain(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn log_error(_err: u32) {}
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.catch(log_error, ®)
.map(add_one, ®)
.map(double, ®)
.map(add_three, ®)
.map(square, ®)
.map(sub_ten, ®)
.map(shr_one, ®)
.map(xor_mask, ®)
.map(add_seven, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_guard_unwrap(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.guard(|x: &u64| *x > 10, ®)
.unwrap_or(0)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_guard_ok_or_unwrap(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.ok_or(0u32)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_result_ok_unwrap(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.ok()
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_result_catch_unwrap(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn log_error(_err: u32) {}
let mut p = PipelineBuilder::<u64>::new()
.then(try_parse, ®)
.catch(log_error, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_guard_ok_or_catch_unwrap(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn log_error(_err: u32) {}
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.ok_or(0u32)
.catch(log_error, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_full_lifecycle(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn log_error(_err: u32) {}
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.guard(|x: &u64| *x > 0, ®)
.ok_or(0u32)
.map(double, ®)
.catch(log_error, ®)
.unwrap_or(0)
.then(add_three, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_route_basic(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let on_true = PipelineBuilder::<u64>::new().then(double, ®);
let on_false = PipelineBuilder::<u64>::new().then(add_one, ®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.route(|x: &u64| *x > 100, ®, on_true, on_false)
.then(add_three, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_route_nested_2(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let arm_a = PipelineBuilder::<u64>::new().then(double, ®);
let arm_b = PipelineBuilder::<u64>::new().then(triple, ®);
let arm_c = PipelineBuilder::<u64>::new().then(add_one, ®);
let inner_false = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
|x: &u64| *x > 50,
®,
arm_b,
arm_c,
);
let mut p = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
|x: &u64| *x > 100,
®,
arm_a,
inner_false,
);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_route_heavy_arms(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let arm_t = PipelineBuilder::<u64>::new()
.then(double, ®)
.then(add_three, ®)
.then(square, ®)
.then(sub_ten, ®)
.then(shr_one, ®);
let arm_f = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(triple, ®)
.then(xor_mask, ®)
.then(add_seven, ®)
.then(add_forty_two, ®);
let mut p = PipelineBuilder::<u64>::new().then(add_one, ®).route(
|x: &u64| *x > 100,
®,
arm_t,
arm_f,
);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_switch_basic(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(add_one, ®).then(
|x: u64| {
if x > 100 {
x.wrapping_mul(2)
} else {
x.wrapping_add(1)
}
},
®,
);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_switch_3way(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(
|x: u64| match x % 3 {
0 => x.wrapping_mul(2),
1 => x.wrapping_add(10),
_ => x.wrapping_sub(5),
},
®,
);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_switch_resolve_step(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut arm_big = resolve_step(double, ®);
let mut arm_small = resolve_step(add_one, ®);
let mut p = PipelineBuilder::<u64>::new().then(
move |world: &mut World, x: u64| {
if x > 100 {
arm_big(world, x)
} else {
arm_small(world, x)
}
},
®,
);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_start_switch(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p =
PipelineBuilder::<u64>::new().then(|x: u64| x.wrapping_mul(2).wrapping_add(1), ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat2_start(world: &mut World, input: (u32, u32)) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<(u32, u32)>::new()
.splat()
.then(splat_add, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat2_mid(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(split_u64, ®)
.splat()
.then(splat_add, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat3(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(split_3, ®)
.splat()
.then(splat_3, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat4(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(split_4, ®)
.splat()
.then(splat_4, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat5(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(split_5, ®)
.splat()
.then(splat_5, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat_with_params(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn splat_with_res(a: Res<ResA>, x: u32, y: u32) -> u64 {
x as u64 + y as u64 + a.0
}
let mut p = PipelineBuilder::<u64>::new()
.then(split_u64, ®)
.splat()
.then(splat_with_res, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat_then_guard(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(split_u64, ®)
.splat()
.then(splat_add, ®)
.guard(|x: &u64| *x > 10, ®)
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_bool_not(world: &mut World, input: u64) -> bool {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(is_even, ®).not();
p.run(world, input)
}
#[inline(never)]
pub fn pipe_bool_and(world: &mut World, input: u64) -> bool {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(is_even, ®)
.and(|| true, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_bool_or(world: &mut World, input: u64) -> bool {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(is_even, ®)
.or(|| false, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_bool_xor(world: &mut World, input: u64) -> bool {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(is_even, ®)
.xor(|| true, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_bool_chain(world: &mut World, input: u64) -> bool {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(is_even, ®)
.and(|| true, ®)
.or(|| false, ®)
.not()
.xor(|| true, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_bool_guard_integration(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(is_even, ®)
.and(|| true, ®)
.guard(|b: &bool| *b, ®)
.unwrap_or(false)
.then(|b: bool| if b { 1u64 } else { 0u64 }, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_cloned_copy_type(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn take_ref(x: u64) -> &'static u64 {
Box::leak(Box::new(x))
}
let mut p = PipelineBuilder::<u64>::new()
.then(take_ref, ®)
.cloned()
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_tap_basic(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.tap(|_x: &u64| {}, ®)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_tap_multiple(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.tap(|_x: &u64| {}, ®)
.then(add_one, ®)
.tap(|_x: &u64| {}, ®)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_tee_basic(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let side = DagArmSeed::<u64>::new().then(ref_consume, ®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.tee(side)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_tee_heavy(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let side = DagArmSeed::<u64>::new()
.then(ref_add_one, ®)
.then(ref_double, ®)
.then(ref_add_three, ®)
.then(ref_square, ®)
.then(ref_consume, ®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.tee(side)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_tap_with_world(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.tap(
|w: &mut World, x: &u64| {
let _ = w.resource::<ResA>().0.wrapping_add(*x);
},
®,
)
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_dispatch_handler(world: &mut World, input: u64) {
let reg = world.registry();
let handler = consume_val.into_handler(®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dispatch(handler);
p.run(world, input);
}
#[inline(never)]
pub fn pipe_world_res(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(add_res_a, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_res_mut(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(write_res_a, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_res_res_mut(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_res_a, ®)
.then(write_res_a, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_3_params(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(three_params, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_mixed_chain(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.then(add_res_a, ®)
.then(write_res_a, ®)
.then(double, ®)
.then(add_both, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_opt_ok_or_chain(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(|x: u64| x, ®)
.guard(|x: &u64| *x > 0, ®)
.ok_or(0u32)
.map(double, ®)
.and_then(try_parse, ®)
.unwrap_or_else(|e: u32| e as u64, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_nested_option(world: &mut World, input: u64) -> Option<Option<u64>> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.map(checked_double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_trans_result_in_option(world: &mut World, input: u64) -> Option<Result<u64, u32>> {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_positive, ®)
.map(try_parse, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_route_nested_3(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let arm_a = PipelineBuilder::<u64>::new().then(double, ®);
let arm_b = PipelineBuilder::<u64>::new().then(triple, ®);
let arm_c = PipelineBuilder::<u64>::new().then(add_one, ®);
let arm_d = PipelineBuilder::<u64>::new().then(add_seven, ®);
let inner2 = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
|x: &u64| *x > 25,
®,
arm_c,
arm_d,
);
let inner1 = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
|x: &u64| *x > 50,
®,
arm_b,
inner2,
);
let mut p = PipelineBuilder::<u64>::new().then(|x: u64| x, ®).route(
|x: &u64| *x > 100,
®,
arm_a,
inner1,
);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_splat_large_types(world: &mut World, input: u64) -> u64 {
fn make_pair(x: u64) -> ([u8; 64], [u8; 64]) {
let mut a = [0u8; 64];
let mut b = [0u8; 64];
a[0] = x as u8;
b[0] = (x >> 8) as u8;
(a, b)
}
fn combine_pair(a: [u8; 64], b: [u8; 64]) -> u64 {
a[0] as u64 + b[0] as u64
}
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(make_pair, ®)
.splat()
.then(combine_pair, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_cloned_bare(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn take_ref(x: u64) -> &'static u64 {
Box::leak(Box::new(x))
}
let mut p = PipelineBuilder::<u64>::new()
.then(take_ref, ®)
.cloned()
.then(double, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_cloned_option(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn maybe_ref(x: u64) -> Option<&'static u64> {
if x > 0 {
Some(Box::leak(Box::new(x)))
} else {
None
}
}
let mut p = PipelineBuilder::<u64>::new()
.then(maybe_ref, ®)
.cloned()
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_cloned_result(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn try_ref(x: u64) -> Result<&'static u64, u32> {
if x < 10_000 {
Ok(Box::leak(Box::new(x)))
} else {
Err(x as u32)
}
}
let mut p = PipelineBuilder::<u64>::new()
.then(try_ref, ®)
.cloned()
.unwrap_or(0);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_cloned_large_type(world: &mut World, input: u64) -> [u8; 256] {
let reg = world.registry();
fn make_ref(x: u64) -> &'static [u8; 256] {
let mut arr = [0u8; 256];
arr[0] = x as u8;
Box::leak(Box::new(arr))
}
let mut p = PipelineBuilder::<u64>::new().then(make_ref, ®).cloned();
p.run(world, input)
}
#[inline(never)]
pub fn pipe_dispatch_fanout2(world: &mut World, input: u64) {
let reg = world.registry();
fn sink_a(mut a: ResMut<ResA>, x: &u64) {
a.0 = a.0.wrapping_add(*x);
}
fn sink_b(mut a: ResMut<ResB>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u32);
}
let h1 = sink_a.into_handler(®);
let h2 = sink_b.into_handler(®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dispatch(fan_out!(h1, h2));
p.run(world, input);
}
#[inline(never)]
pub fn pipe_dispatch_fanout4(world: &mut World, input: u64) {
let reg = world.registry();
fn sink_a(mut a: ResMut<ResA>, x: &u64) {
a.0 = a.0.wrapping_add(*x);
}
fn sink_b(mut a: ResMut<ResB>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u32);
}
fn sink_c(mut a: ResMut<ResC>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u16);
}
fn sink_d(mut a: ResMut<ResD>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u8);
}
let h1 = sink_a.into_handler(®);
let h2 = sink_b.into_handler(®);
let h3 = sink_c.into_handler(®);
let h4 = sink_d.into_handler(®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dispatch(fan_out!(h1, h2, h3, h4));
p.run(world, input);
}
#[inline(never)]
pub fn pipe_dispatch_fanout8(world: &mut World, input: u64) {
let reg = world.registry();
fn s1(mut a: ResMut<ResA>, x: &u64) {
a.0 = a.0.wrapping_add(*x);
}
fn s2(mut a: ResMut<ResB>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u32);
}
fn s3(mut a: ResMut<ResC>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u16);
}
fn s4(mut a: ResMut<ResD>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u8);
}
fn s5(mut a: ResMut<ResF>, x: &u64) {
a.0 = a.0.wrapping_add(*x);
}
fn s6(mut a: ResMut<ResG>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u32);
}
fn s7(mut a: ResMut<ResH>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u16);
}
fn s8(mut a: ResMut<ResE>, x: &u64) {
a.0 += *x as f64;
}
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dispatch(fan_out!(
s1.into_handler(®),
s2.into_handler(®),
s3.into_handler(®),
s4.into_handler(®),
s5.into_handler(®),
s6.into_handler(®),
s7.into_handler(®),
s8.into_handler(®)
));
p.run(world, input);
}
#[inline(never)]
pub fn pipe_dispatch_broadcast(world: &mut World, input: u64) {
let reg = world.registry();
fn sink_a(mut a: ResMut<ResA>, x: &u64) {
a.0 = a.0.wrapping_add(*x);
}
fn sink_b(mut a: ResMut<ResB>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u32);
}
fn sink_c(mut a: ResMut<ResC>, x: &u64) {
a.0 = a.0.wrapping_add(*x as u16);
}
let mut bc = Broadcast::<u64>::new();
bc.add(sink_a.into_handler(®));
bc.add(sink_b.into_handler(®));
bc.add(sink_c.into_handler(®));
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dispatch(bc);
p.run(world, input);
}
#[inline(never)]
pub fn pipe_dispatch_mid_then_continue(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let handler = consume_val.into_handler(®);
let mut p = PipelineBuilder::<u64>::new()
.then(add_one, ®)
.dispatch(handler)
.then(|_unit: ()| 42u64, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_local(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
fn count_calls(mut count: Local<u64>, x: u64) -> u64 {
*count += 1;
x.wrapping_add(*count)
}
let mut p = PipelineBuilder::<u64>::new().then(count_calls, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_5_params(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(five_params, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_8_params(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new().then(eight_params, ®);
p.run(world, input)
}
#[inline(never)]
pub fn pipe_world_res_branch(world: &mut World, input: u64) -> u64 {
let reg = world.registry();
let mut p = PipelineBuilder::<u64>::new()
.then(add_res_a, ®)
.then(add_one, ®);
p.run(world, input)
}