Struct refid::RefId [−][src]
Expand description
Newtype for references (or smart pointers) where equality is defined by the address (or address range) pointed to
Caveats / Notes
- Empty address ranges are always considered equal, disregarding different base addresses (and Rust’s rules on wide-pointer comparison).
- Working with trait objects may cause surprising behavior due to Rust’s pointer comparison rules.
Example
use refid::RefId;
use std::collections::HashSet;
fn count_distinct<T>(slice: &[&T]) -> usize {
let mut counted: HashSet<RefId<&T>> = HashSet::new();
let mut count: usize = 0;
for item in slice {
if counted.insert(RefId(item)) {
count += 1;
}
}
count
}
let v1 = "X".to_string();
let v2 = "X".to_string();
let v3 = "X".to_string();
assert_eq!(count_distinct(&vec![&v1, &v2, &v1, &v3]), 3);
Tuple Fields
0: T
inner value (reference or smart pointer)
Trait Implementations
Debug representation appended with “@
” and address
Comparison by address (but equal if range pointed to has size of zero)
Comparison by address (but equal if range pointed to has size of zero)
Auto Trait Implementations
impl<T: ?Sized> RefUnwindSafe for RefId<T> where
T: RefUnwindSafe,
impl<T: ?Sized> UnwindSafe for RefId<T> where
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more