use super::*;
#[derive(Eq,PartialEq,Ord,PartialOrd)]
struct Key<'a>{
x: u64,
s: &'a str
}
impl <'a> Comparable<(u64,String)> for Key<'a>
{
fn compare(&self, k: &(u64, String)) -> Ordering {
let o = self.x.compare(&k.0);
if o != Ordering::Equal { return o; }
self.s.compare(&k.1)
}
}
impl <'a> Equivalent<(u64,String)> for Key<'a>
{
fn equivalent(&self, k: &(u64, String)) -> bool {
self.x == k.0 && self.s == k.1
}
}
#[test]
fn test_comparable() {
let mut m = BTreeMap::<(u64,String), u64>::new();
m.insert( (99, String::from("hello")), 98 );
m.insert( (99, String::from("george")), 98 );
println!("m={:?}", m);
let x = m.get( &Key{x:99,s:"hello"} );
println!("x={:?}", x);
let start = &Key{x:99,s:"aaa"};
let end = &Key{x:100,s:"hello"};
for (k,v) in m.range::<Key,_>( start..end )
{
println!("k={:?} v={:?}", k, v );
}
}