hirun 0.1.16

A concurrent framework for asynchronous programming based on event-driven, non-blocking I/O mechanism
Documentation
use super::{EventFd, MWriteIdx, NullTokenFactory, SReadIdx, TokenArray};
use crate::Result;
use hipool::{Allocator, PoolAlloc};

type Pipe<'a, T> = super::pipe::Pipe<'a, T, MWriteIdx, SReadIdx, EventFd>;
pub type Receiver<'a, T, A = PoolAlloc> =
    super::pipe::Receiver<'a, T, NullTokenFactory, Pipe<'a, T>, A>;
pub type Sender<'a, T, A = PoolAlloc> = super::pipe::Sender<'a, T, TokenArray, Pipe<'a, T>, A>;
pub type Channel<'a, T, A = PoolAlloc> = (Sender<'a, T, A>, Receiver<'a, T, A>);

pub fn channel<T>(len: usize) -> Result<Channel<'static, T>> {
    channel_in(&PoolAlloc, len)
}

pub fn channel_in<'a, T, A>(alloc: &'a A, len: usize) -> Result<Channel<'a, T, A>>
where
    A: Allocator
{
    let pipe = Pipe::<'a, T>::new_in(alloc, len)?;
    Ok((Sender::new(pipe.clone()), Receiver::new(pipe.clone())))
}