1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#![feature(in_band_lifetimes)] mod consumer; mod producer; mod scheduler; pub use consumer::{Fanout, Mapper}; pub use producer::{IntoIteratorProducer, Producer}; pub use scheduler::Scheduler; #[macro_export] macro_rules! run_pipeline_reversed { ($producer:expr) => { let scheduler = Scheduler::new(); $producer.add_to_scheduler(&scheduler); scheduler.run(4); }; ($node1:expr=>$node2:expr$(=>$node:expr)*) => { let local_node = $node1; let mut new_consumer = $node2.pipe(&local_node); run_pipeline_reversed!(new_consumer$(=>$node)*); }; } #[macro_export] macro_rules! run_pipeline { (;$($reversed:expr)=>+) => {run_pipeline_reversed!($($reversed)=>*)}; ($first:expr$(=>$original:expr)*$(;$($reversed:expr)=>*)?) => {run_pipeline!($($original)=>*;$first$($(=>$reversed)*)*)}; }