Code cleanup and refactor.
This commit is contained in:
@@ -89,9 +89,9 @@ pub enum Target<'a> {
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
SharedValue {
|
||||
/// Lock guard to the shared [`Dynamic`].
|
||||
source: crate::types::dynamic::DynamicWriteLock<'a, Dynamic>,
|
||||
/// Copy of the value.
|
||||
value: Dynamic,
|
||||
guard: crate::types::dynamic::DynamicWriteLock<'a, Dynamic>,
|
||||
/// Copy of the shared value.
|
||||
shared_value: Dynamic,
|
||||
},
|
||||
/// The target is a temporary [`Dynamic`] value (i.e. its mutation can cause no side effects).
|
||||
TempValue(Dynamic),
|
||||
@@ -178,21 +178,21 @@ impl<'a> Target<'a> {
|
||||
}
|
||||
}
|
||||
/// Is the [`Target`] a shared value?
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
#[inline]
|
||||
#[must_use]
|
||||
pub fn is_shared(&self) -> bool {
|
||||
match self {
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
return match self {
|
||||
Self::RefMut(r) => r.is_shared(),
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
Self::SharedValue { .. } => true,
|
||||
Self::TempValue(value) => value.is_shared(),
|
||||
#[cfg(not(feature = "no_index"))]
|
||||
Self::Bit { .. }
|
||||
| Self::BitField { .. }
|
||||
| Self::BlobByte { .. }
|
||||
| Self::StringChar { .. } => false,
|
||||
}
|
||||
};
|
||||
#[cfg(feature = "no_closure")]
|
||||
return false;
|
||||
}
|
||||
/// Get the value of the [`Target`] as a [`Dynamic`], cloning a referenced value if necessary.
|
||||
#[inline]
|
||||
@@ -200,7 +200,7 @@ impl<'a> Target<'a> {
|
||||
match self {
|
||||
Self::RefMut(r) => r.clone(), // Referenced value is cloned
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
Self::SharedValue { value, .. } => value, // Original shared value is simply taken
|
||||
Self::SharedValue { shared_value, .. } => shared_value, // Original shared value is simply taken
|
||||
Self::TempValue(value) => value, // Owned value is simply taken
|
||||
#[cfg(not(feature = "no_index"))]
|
||||
Self::Bit { value, .. } => value, // boolean is taken
|
||||
@@ -227,7 +227,7 @@ impl<'a> Target<'a> {
|
||||
match self {
|
||||
Self::RefMut(r) => Self::TempValue(r.clone()),
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
Self::SharedValue { value, .. } => Self::TempValue(value),
|
||||
Self::SharedValue { shared_value, .. } => Self::TempValue(shared_value),
|
||||
_ => self,
|
||||
}
|
||||
}
|
||||
@@ -239,7 +239,7 @@ impl<'a> Target<'a> {
|
||||
match self {
|
||||
Self::RefMut(r) => r,
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
Self::SharedValue { source, .. } => source,
|
||||
Self::SharedValue { guard, .. } => guard,
|
||||
Self::TempValue(value) => value,
|
||||
#[cfg(not(feature = "no_index"))]
|
||||
Self::Bit { source, .. } => source,
|
||||
@@ -365,9 +365,12 @@ impl<'a> From<&'a mut Dynamic> for Target<'a> {
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
if value.is_shared() {
|
||||
// Cloning is cheap for a shared value
|
||||
let val = value.clone();
|
||||
let source = value.write_lock::<Dynamic>().expect("`Dynamic`");
|
||||
return Self::SharedValue { source, value: val };
|
||||
let shared_value = value.clone();
|
||||
let guard = value.write_lock::<Dynamic>().expect("`Dynamic`");
|
||||
return Self::SharedValue {
|
||||
guard,
|
||||
shared_value,
|
||||
};
|
||||
}
|
||||
|
||||
Self::RefMut(value)
|
||||
@@ -382,7 +385,7 @@ impl Deref for Target<'_> {
|
||||
match self {
|
||||
Self::RefMut(r) => r,
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
Self::SharedValue { source, .. } => source,
|
||||
Self::SharedValue { guard, .. } => guard,
|
||||
Self::TempValue(ref value) => value,
|
||||
#[cfg(not(feature = "no_index"))]
|
||||
Self::Bit { ref value, .. }
|
||||
@@ -415,7 +418,7 @@ impl DerefMut for Target<'_> {
|
||||
match self {
|
||||
Self::RefMut(r) => r,
|
||||
#[cfg(not(feature = "no_closure"))]
|
||||
Self::SharedValue { source, .. } => &mut *source,
|
||||
Self::SharedValue { guard, .. } => &mut *guard,
|
||||
Self::TempValue(ref mut value) => value,
|
||||
#[cfg(not(feature = "no_index"))]
|
||||
Self::Bit { ref mut value, .. }
|
||||
|
||||
Reference in New Issue
Block a user