pub enum MaybeOwnedMut<'a, T>where
T: 'a,{
Owned(T),
Borrowed(&'a mut T),
}Expand description
This type is basically the same as MaybeOwned,
but works with mutable references.
Note that while you can se MaybeOwned as a alternative
implementation for a Cow (Copy-On-Write) type this isn’t
really the case for MaybeOwnedMut as changing it will
potentially change the source through the given &mut
reference. For example the transitive add assign (+=)
implementation for MaybeOwned does (need to) convert
the given instance into a owned variant before using
+= on the contained type. But for MaybeOwnedMut it
can directly use += on the &mut contained in the
Borrowed variant!
Variants§
Implementations§
Source§impl<T> MaybeOwnedMut<'_, T>
impl<T> MaybeOwnedMut<'_, T>
Source§impl<T> MaybeOwnedMut<'_, T>where
T: Clone,
impl<T> MaybeOwnedMut<'_, T>where
T: Clone,
Sourcepub fn into_owned(self) -> T
pub fn into_owned(self) -> T
Return the contained data in it’s owned form.
If it’s borrowed this will clone it.
Sourcepub fn make_owned(&mut self) -> &mut T
pub fn make_owned(&mut self) -> &mut T
Internally converts the type into it’s owned variant.
Conversion from a reference to the owned variant is done by cloning.
This returns a &mut T and as such can be used to “unconditionally”
get an &mut T. Be aware that while this works with both MaybeOwned
and MaybeOwnedMut it also converts it to an owned variant in both
cases. So while it’s the best way to get a &mut T for MaybeOwned
for MaybeOwnedMut it’s preferable to use as_mut from AsMut.
§Example
use maybe_owned::MaybeOwned;
#[derive(Clone, Debug, PartialEq, Eq)]
struct PseudoBigData(u8);
let data = PseudoBigData(12);
let mut maybe: MaybeOwned<PseudoBigData> = (&data).into();
assert_eq!(false, maybe.is_owned());
{
let reference = maybe.make_owned();
assert_eq!(&mut PseudoBigData(12), reference);
}
assert!(maybe.is_owned());Trait Implementations§
Source§impl<'min, L, R, OUT> Add<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> Add<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn add(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as Add<MaybeOwnedMut<'min, R>>>::Output
fn add( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as Add<MaybeOwnedMut<'min, R>>>::Output
+ operation. Read moreSource§impl<'min, L, R> AddAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> AddAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn add_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn add_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
+= operation. Read moreSource§impl<T> AsMut<T> for MaybeOwnedMut<'_, T>
impl<T> AsMut<T> for MaybeOwnedMut<'_, T>
Source§impl<T> AsRef<T> for MaybeOwnedMut<'_, T>
impl<T> AsRef<T> for MaybeOwnedMut<'_, T>
Source§impl<'min, L, R, OUT> BitAnd<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> BitAnd<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn bitand(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as BitAnd<MaybeOwnedMut<'min, R>>>::Output
fn bitand( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as BitAnd<MaybeOwnedMut<'min, R>>>::Output
& operation. Read moreSource§impl<'min, L, R> BitAndAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> BitAndAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn bitand_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn bitand_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
&= operation. Read moreSource§impl<'min, L, R, OUT> BitOr<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> BitOr<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn bitor(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as BitOr<MaybeOwnedMut<'min, R>>>::Output
fn bitor( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as BitOr<MaybeOwnedMut<'min, R>>>::Output
| operation. Read moreSource§impl<'min, L, R> BitOrAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> BitOrAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn bitor_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn bitor_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
|= operation. Read moreSource§impl<'min, L, R, OUT> BitXor<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> BitXor<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn bitxor(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as BitXor<MaybeOwnedMut<'min, R>>>::Output
fn bitxor( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as BitXor<MaybeOwnedMut<'min, R>>>::Output
^ operation. Read moreSource§impl<'min, L, R> BitXorAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> BitXorAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn bitxor_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn bitxor_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
^= operation. Read moreSource§impl<T> Borrow<T> for MaybeOwnedMut<'_, T>
impl<T> Borrow<T> for MaybeOwnedMut<'_, T>
Source§impl<T> BorrowMut<T> for MaybeOwnedMut<'_, T>
impl<T> BorrowMut<T> for MaybeOwnedMut<'_, T>
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<'a, T> Debug for MaybeOwnedMut<'a, T>where
T: Debug + 'a,
impl<'a, T> Debug for MaybeOwnedMut<'a, T>where
T: Debug + 'a,
Source§impl<T> Default for MaybeOwnedMut<'_, T>where
T: Default,
impl<T> Default for MaybeOwnedMut<'_, T>where
T: Default,
Source§fn default() -> MaybeOwnedMut<'_, T>
fn default() -> MaybeOwnedMut<'_, T>
Source§impl<T> Deref for MaybeOwnedMut<'_, T>
impl<T> Deref for MaybeOwnedMut<'_, T>
Source§impl<T> DerefMut for MaybeOwnedMut<'_, T>
impl<T> DerefMut for MaybeOwnedMut<'_, T>
Source§impl<'a, T> Display for MaybeOwnedMut<'a, T>where
T: Display,
impl<'a, T> Display for MaybeOwnedMut<'a, T>where
T: Display,
Source§impl<'min, L, R, OUT> Div<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> Div<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn div(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as Div<MaybeOwnedMut<'min, R>>>::Output
fn div( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as Div<MaybeOwnedMut<'min, R>>>::Output
/ operation. Read moreSource§impl<'min, L, R> DivAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> DivAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn div_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn div_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
/= operation. Read moreSource§impl<'a, T> From<&'a mut T> for MaybeOwnedMut<'a, T>
impl<'a, T> From<&'a mut T> for MaybeOwnedMut<'a, T>
Source§fn from(v: &'a mut T) -> MaybeOwnedMut<'a, T>
fn from(v: &'a mut T) -> MaybeOwnedMut<'a, T>
Source§impl<T> From<T> for MaybeOwnedMut<'_, T>
impl<T> From<T> for MaybeOwnedMut<'_, T>
Source§fn from(v: T) -> MaybeOwnedMut<'_, T>
fn from(v: T) -> MaybeOwnedMut<'_, T>
Source§impl<T> FromStr for MaybeOwnedMut<'_, T>where
T: FromStr,
impl<T> FromStr for MaybeOwnedMut<'_, T>where
T: FromStr,
Source§impl<T> Hash for MaybeOwnedMut<'_, T>where
T: Hash,
impl<T> Hash for MaybeOwnedMut<'_, T>where
T: Hash,
Source§impl<'min, L, R, OUT> Mul<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> Mul<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn mul(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as Mul<MaybeOwnedMut<'min, R>>>::Output
fn mul( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as Mul<MaybeOwnedMut<'min, R>>>::Output
* operation. Read moreSource§impl<'min, L, R> MulAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> MulAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn mul_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn mul_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
*= operation. Read moreSource§impl<'l, V, OUT> Neg for MaybeOwnedMut<'l, V>
impl<'l, V, OUT> Neg for MaybeOwnedMut<'l, V>
Source§impl<'l, V, OUT> Not for MaybeOwnedMut<'l, V>
impl<'l, V, OUT> Not for MaybeOwnedMut<'l, V>
Source§impl<T> Ord for MaybeOwnedMut<'_, T>where
T: Ord,
impl<T> Ord for MaybeOwnedMut<'_, T>where
T: Ord,
Source§impl<'b, A, B> PartialEq<MaybeOwnedMut<'b, B>> for MaybeOwnedMut<'_, A>where
A: PartialEq<B>,
impl<'b, A, B> PartialEq<MaybeOwnedMut<'b, B>> for MaybeOwnedMut<'_, A>where
A: PartialEq<B>,
Source§impl<T> PartialOrd for MaybeOwnedMut<'_, T>where
T: PartialOrd,
impl<T> PartialOrd for MaybeOwnedMut<'_, T>where
T: PartialOrd,
Source§impl<'min, L, R, OUT> Shl<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> Shl<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn shl(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as Shl<MaybeOwnedMut<'min, R>>>::Output
fn shl( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as Shl<MaybeOwnedMut<'min, R>>>::Output
<< operation. Read moreSource§impl<'min, L, R> ShlAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> ShlAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn shl_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn shl_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
<<= operation. Read moreSource§impl<'min, L, R, OUT> Shr<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> Shr<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn shr(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as Shr<MaybeOwnedMut<'min, R>>>::Output
fn shr( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as Shr<MaybeOwnedMut<'min, R>>>::Output
>> operation. Read moreSource§impl<'min, L, R> ShrAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> ShrAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn shr_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn shr_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
>>= operation. Read moreSource§impl<'min, L, R, OUT> Sub<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R, OUT> Sub<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn sub(
self,
rhs: MaybeOwnedMut<'min, R>,
) -> <MaybeOwnedMut<'min, L> as Sub<MaybeOwnedMut<'min, R>>>::Output
fn sub( self, rhs: MaybeOwnedMut<'min, R>, ) -> <MaybeOwnedMut<'min, L> as Sub<MaybeOwnedMut<'min, R>>>::Output
- operation. Read moreSource§impl<'min, L, R> SubAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
impl<'min, L, R> SubAssign<MaybeOwnedMut<'min, R>> for MaybeOwnedMut<'min, L>
Source§fn sub_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
fn sub_assign(&mut self, rhs: MaybeOwnedMut<'min, R>)
-= operation. Read moreimpl<'a, T> Eq for MaybeOwnedMut<'a, T>where
T: Eq,
Auto Trait Implementations§
impl<'a, T> Freeze for MaybeOwnedMut<'a, T>where
T: Freeze,
impl<'a, T> RefUnwindSafe for MaybeOwnedMut<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Send for MaybeOwnedMut<'a, T>where
T: Send,
impl<'a, T> Sync for MaybeOwnedMut<'a, T>where
T: Sync,
impl<'a, T> Unpin for MaybeOwnedMut<'a, T>where
T: Unpin,
impl<'a, T> !UnwindSafe for MaybeOwnedMut<'a, T>
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
fn equivalent(&self, key: &K) -> bool
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &World) -> T
fn from_world(_world: &World) -> T
Self using data from the given World.Source§impl<T> RawDefault for Twhere
T: Default,
impl<T> RawDefault for Twhere
T: Default,
Source§impl<R> Rng for R
impl<R> Rng for R
Source§fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
StandardUniform distribution. Read moreSource§fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>
fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>
Source§fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
Source§fn random_bool(&mut self, p: f64) -> bool
fn random_bool(&mut self, p: f64) -> bool
p of being true. Read moreSource§fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
numerator/denominator of being
true. Read moreSource§fn sample<T, D>(&mut self, distr: D) -> Twhere
D: Distribution<T>,
fn sample<T, D>(&mut self, distr: D) -> Twhere
D: Distribution<T>,
Source§fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T>where
D: Distribution<T>,
Self: Sized,
fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T>where
D: Distribution<T>,
Self: Sized,
Source§fn gen<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn gen<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
random to avoid conflict with the new gen keyword in Rust 2024.Rng::random.Source§fn gen_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn gen_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
random_rangeRng::random_range.Source§impl<R> TryRngCore for R
impl<R> TryRngCore for R
Source§type Error = Infallible
type Error = Infallible
Source§fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
u32.Source§fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
u64.Source§fn try_fill_bytes(
&mut self,
dst: &mut [u8],
) -> Result<(), <R as TryRngCore>::Error>
fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>
dest entirely with random data.Source§fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
UnwrapMut wrapper.Source§fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>where
Self: Sized,
fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>where
Self: Sized,
RngCore to a RngReadAdapter.