Struct obj_pool::invalid_value::OptionInvalidValue [−][src]
pub struct OptionInvalidValue<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash>(_);
Optimization for Option<T> where T implements an InvalidValue trait and reuses on of the
possible values of T to represents None. It's basically the same as NonZero*-types but more
powerful as it allows to reuse any value, not just 0 for any type, not just integers.
As a downside, it's not an Option, it's a separate type which is needed to be handled
explicitly.
use obj_pool::invalid_value::{InvalidValue, OptionInvalidValue}; #[derive(PartialEq, Eq, Hash, Copy, Clone)] struct A(u32); impl InvalidValue<A> for A { fn invalid_value() -> A { A(155) // invalid value in our case } } let mut v: OptionInvalidValue<A> = A(100).into(); assert!(v.is_some()); v = A(155).into(); assert!(v.is_none());
Methods
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> OptionInvalidValue<T>[src]
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> OptionInvalidValue<T>pub fn none() -> OptionInvalidValue<T>[src]
pub fn none() -> OptionInvalidValue<T>Make a None value
pub fn option(&self) -> Option<&T>[src]
pub fn option(&self) -> Option<&T>Make an Option<&T>
pub fn as_ref_unchecked(&self) -> &T[src]
pub fn as_ref_unchecked(&self) -> &TGet reference to underlying T, panics it it's None.
pub fn as_ref_mut_unchecked(&mut self) -> &mut T[src]
pub fn as_ref_mut_unchecked(&mut self) -> &mut TGet mutable reference to underlying T, panics it it's None.
pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U>[src]
pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U>impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> OptionInvalidValue<T>[src]
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> OptionInvalidValue<T>pub fn is_some(&self) -> bool[src]
pub fn is_some(&self) -> boolChecks if OptionInvalidValue is Some
pub fn is_none(&self) -> bool[src]
pub fn is_none(&self) -> boolChecks if OptionInvalidValue is None
pub fn unwrap(self) -> T[src]
pub fn unwrap(self) -> TUnwraps the OptionInvalidValue, panics in case of None.
Trait Implementations
impl<T: PartialEq + InvalidValue<T> + PartialEq + Copy + Eq + Hash> PartialEq for OptionInvalidValue<T>[src]
impl<T: PartialEq + InvalidValue<T> + PartialEq + Copy + Eq + Hash> PartialEq for OptionInvalidValue<T>fn eq(&self, other: &OptionInvalidValue<T>) -> bool[src]
fn eq(&self, other: &OptionInvalidValue<T>) -> boolThis method tests for self and other values to be equal, and is used by ==. Read more
fn ne(&self, other: &OptionInvalidValue<T>) -> bool[src]
fn ne(&self, other: &OptionInvalidValue<T>) -> boolThis method tests for !=.
impl<T: Debug + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Debug for OptionInvalidValue<T>[src]
impl<T: Debug + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Debug for OptionInvalidValue<T>fn fmt(&self, f: &mut Formatter) -> Result[src]
fn fmt(&self, f: &mut Formatter) -> ResultFormats the value using the given formatter. Read more
impl<T: Copy + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Copy for OptionInvalidValue<T>[src]
impl<T: Copy + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Copy for OptionInvalidValue<T>impl<T: Clone + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Clone for OptionInvalidValue<T>[src]
impl<T: Clone + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Clone for OptionInvalidValue<T>fn clone(&self) -> OptionInvalidValue<T>[src]
fn clone(&self) -> OptionInvalidValue<T>Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl<T: Eq + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Eq for OptionInvalidValue<T>[src]
impl<T: Eq + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Eq for OptionInvalidValue<T>impl<T: Hash + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Hash for OptionInvalidValue<T>[src]
impl<T: Hash + InvalidValue<T> + PartialEq + Copy + Eq + Hash> Hash for OptionInvalidValue<T>fn hash<__HT: Hasher>(&self, state: &mut __HT)[src]
fn hash<__HT: Hasher>(&self, state: &mut __HT)Feeds this value into the given [Hasher]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher, 1.3.0[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher, Feeds a slice of this type into the given [Hasher]. Read more
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> IntoIterator for OptionInvalidValue<T>[src]
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> IntoIterator for OptionInvalidValue<T>type Item = T
The type of the elements being iterated over.
type IntoIter = IntoIter<T>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter[src]
fn into_iter(self) -> Self::IntoIterCreates an iterator from a value. Read more
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> From<Option<T>> for OptionInvalidValue<T>[src]
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> From<Option<T>> for OptionInvalidValue<T>impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> Into<Option<T>> for OptionInvalidValue<T>[src]
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> Into<Option<T>> for OptionInvalidValue<T>impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> From<T> for OptionInvalidValue<T>[src]
impl<T: InvalidValue<T> + PartialEq + Copy + Eq + Hash> From<T> for OptionInvalidValue<T>Wraps a value in OptionInvalidValue, treats T::invalid_value as None
Auto Trait Implementations
impl<T> Send for OptionInvalidValue<T> where
T: Send,
impl<T> Send for OptionInvalidValue<T> where
T: Send, impl<T> Sync for OptionInvalidValue<T> where
T: Sync,
impl<T> Sync for OptionInvalidValue<T> where
T: Sync,