use mutex::{Mutex, MutexGuard};
use raw_condvar::{RawCondvar};
pub struct Condvar {
raw: RawCondvar,
}
impl Condvar {
pub const fn new() -> Condvar {
Condvar { raw: RawCondvar::new() }
}
pub fn wait<'a, T>(&self, guard: MutexGuard<'a, T>) -> MutexGuard<'a, T> {
self.wait2(guard.as_mutex(), guard)
}
pub fn wait2<'a, 'b, T, U>(&self, mutex: &'a Mutex<T>,
guard: MutexGuard<'b, U>) -> MutexGuard<'a, T> {
let lock = mutex.as_lock();
let guard = guard.into_lock_guard();
let guard = self.raw.wait2(lock, guard);
mutex.existing_lock(guard)
}
pub fn signal(&self, n: usize) {
self.raw.signal(n);
}
}