use frame::{self, Frame}; use slab::Slab; use std::marker::PhantomData; /// Buffers frames for multiple streams. #[derive(Debug)] pub struct Buffer { slab: Slab>, } /// A sequence of frames in a `Buffer` #[derive(Debug)] pub struct Deque { indices: Option, _p: PhantomData, } /// Tracks the head & tail for a sequence of frames in a `Buffer`. #[derive(Debug, Default)] struct Indices { head: usize, tail: usize, } #[derive(Debug)] struct Slot { frame: Frame, next: usize, } impl Buffer { pub fn new() -> Self { Buffer { slab: Slab::new(), } } } impl Deque { pub fn new() -> Self { Deque { indices: None, _p: PhantomData, } } pub fn is_empty(&self) -> bool { self.indices.is_none() } pub fn push_back(&mut self, buf: &mut Buffer, val: Frame) { unimplemented!(); } pub fn pop_front(&mut self, buf: &mut Buffer) -> Option> { unimplemented!(); } }