use std::sync::{Arc, Condvar, Mutex};

pub trait New {
    fn new() -> Self;
}

pub struct MutexQueue<T : New> {
    pub mutex : Arc<Mutex<()>>,
    pub cond: Arc<Condvar>,
    pub data: T
}

impl <T : New> MutexQueue<T> {
    fn new() -> MutexQueue<T> {
        MutexQueue {
            mutex : Arc::new(Mutex::new(())),
            cond: Arc::new(Condvar::new()),
            data: T::new()
        }
    }
}
