mod binheap;
pub use self::binheap::BinHeap;
pub trait ItemPriQueue<K, V> {
type Item;
fn is_empty(&self) -> bool;
fn clear(&mut self);
fn push(&mut self, key: K, value: V) -> Self::Item;
fn decrease_key(&mut self, item: &mut Self::Item, value: V) -> bool;
fn pop_min(&mut self) -> Option<(K, V)>;
fn value(&self, item: &Self::Item) -> &V;
}
impl<'a, P, K, V> ItemPriQueue<K, V> for &'a mut P
where
P: ItemPriQueue<K, V>,
{
type Item = P::Item;
fn is_empty(&self) -> bool {
(**self).is_empty()
}
fn clear(&mut self) {
(**self).clear()
}
fn push(&mut self, key: K, value: V) -> Self::Item {
(**self).push(key, value)
}
fn decrease_key(&mut self, item: &mut Self::Item, value: V) -> bool {
(**self).decrease_key(item, value)
}
fn pop_min(&mut self) -> Option<(K, V)> {
(**self).pop_min()
}
fn value(&self, item: &Self::Item) -> &V {
(**self).value(item)
}
}