Struct RefCmp

Source
pub struct RefCmp<T: Same>(pub T);
Expand description

Wrapper for types to make their equality operations compare pointers.

This wrapper turns Same into PartialEq and RefHash into Hash. It is mainly useful for storing unique objects in hash sets and similar data structures.

§Example

use same::RefCmp;

use std::rc::Rc;
use std::collections::HashSet;

let a = ::std::sync::Arc::new(42);
let a_cloned = a.clone();
let b = ::std::sync::Arc::new(42);

let mut hash_set = ::std::collections::HashSet::new();
assert!(hash_set.insert(RefCmp(a)));
// a_cloned points to the same object as a...
assert!(!hash_set.insert(RefCmp(a_cloned)));
// but `b` doesn't, even though it has same value.
assert!(hash_set.insert(RefCmp(b)));

Tuple Fields§

§0: T

Trait Implementations§

Source§

impl<U, T: Same + AsRef<U>> AsRef<U> for RefCmp<T>

Source§

fn as_ref(&self) -> &U

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<T: Same> Borrow<T> for RefCmp<T>

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T: Same> Deref for RefCmp<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<T: Same + RefHash> Hash for RefCmp<T>

Source§

fn hash<H: Hasher>(&self, hasher: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: Same> PartialEq for RefCmp<T>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Same> Eq for RefCmp<T>

Auto Trait Implementations§

§

impl<T> Freeze for RefCmp<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for RefCmp<T>
where T: RefUnwindSafe,

§

impl<T> Send for RefCmp<T>
where T: Send,

§

impl<T> Sync for RefCmp<T>
where T: Sync,

§

impl<T> Unpin for RefCmp<T>
where T: Unpin,

§

impl<T> UnwindSafe for RefCmp<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.