#![license = "MIT"]
#![deny(missing_docs)]
#![deny(warnings)]
use std::comm::Receiver;
pub struct Intertwined<T: Send> {
receiver: Receiver<T>
}
pub trait Intertwine<T> {
fn intertwine(self) -> Intertwined<T>;
}
impl<T: Send, I: Iterator<T> + Send, II: Iterator<I>> Intertwine<T> for II {
fn intertwine(mut self) -> Intertwined<T> {
let (tx, rx) = channel();
for mut iterator in self {
let tx = tx.clone();
spawn(proc() {
for x in iterator {
if tx.send_opt(x).is_err() { break }
}
});
}
Intertwined {
receiver: rx
}
}
}
impl<T: Send> Iterator<T> for Intertwined<T> {
fn next(&mut self) -> Option<T> { self.receiver.recv_opt().ok() }
}