pub struct WeakArcmo<T: Clone> { /* private fields */ }Expand description
A weak reference wrapper for Arcmo
Implementations§
Source§impl<T: Clone> WeakArcmo<T>
impl<T: Clone> WeakArcmo<T>
Sourcepub fn modify<F, R>(&self, f: F) -> Option<R>
pub fn modify<F, R>(&self, f: F) -> Option<R>
Attempts to modify the value if it exists and the original Arcmo still exists
Examples found in repository?
examples/arcmo_example.rs (line 48)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
fn main() {
println!("=== Creating Arcmo instances ===");
// Create with Some value
let v = Arcmo::some(42);
println!("Created with some: v = {:?}", v);
// Create with Default (None)
let default: Arcmo<i32> = Arcmo::default();
println!("Created with default: default = {:?}", default);
// Create explicitly as None
let none: Arcmo<i32> = Arcmo::none();
println!("Created as none: none = {:?}", none);
println!("\n=== Basic value operations ===");
println!("v.value() = {:?}", v.value());
println!("v.is_some() = {}", v.is_some());
println!("v.is_none() = {}", v.is_none());
println!("\n=== Modification ===");
// Modify existing value
v.modify(|x| *x += 1);
println!("After v += 1: {:?}", v.value());
v.modify(|x| *x *= 2);
println!("After v *= 2: {:?}", v.value());
// Try to modify None (should have no effect)
none.modify(|x| *x = 100);
println!("After trying to modify None: {:?}", none.value());
println!("\n=== Multiple references ===");
let v2 = v.clone();
v.modify(|x| *x += 5);
println!("Modified through v: {:?}", v.value());
println!("Observed through v2: {:?}", v2.value());
println!("\n=== Weak references ===");
let weak = v.downgrade();
println!("Weak reference: {:?}", weak);
println!("weak.value() = {:?}", weak.value());
println!("weak.is_some() = {}", weak.is_some());
println!("weak.is_none() = {}", weak.is_none());
// Modify through weak reference
weak.modify(|x| *x += 10);
println!("\nAfter weak modify:");
println!("Observed through strong ref: {:?}", v.value());
println!("Observed through weak ref: {:?}", weak.value());
println!("\n=== Take and Replace operations ===");
println!("Taking value from v: {:?}", v.take());
println!("After take:");
println!("v.is_none() = {}", v.is_none());
println!("weak.is_none() = {}", weak.is_none());
println!("\nReplacing with new value:");
let previous = v.replace(100);
println!("Previous value: {:?}", previous);
println!("New value through v: {:?}", v.value());
println!("New value through weak: {:?}", weak.value());
println!("\n=== Weak reference behavior when strong ref is dropped ===");
{
let temp = Arcmo::some(999);
let weak_temp = temp.downgrade();
println!("Before drop - weak_temp.value() = {:?}", weak_temp.value());
drop(temp);
println!("After drop - weak_temp.value() = {:?}", weak_temp.value());
}
println!("\n=== Complex type example ===");
let vec_arcmo = Arcmo::some(vec![1, 2, 3]);
println!("Vector Arcmo: {:?}", vec_arcmo);
vec_arcmo.modify(|v| v.push(4));
println!("After push: {:?}", vec_arcmo.value());
let weak_vec = vec_arcmo.downgrade();
weak_vec.modify(|v| v.extend_from_slice(&[5, 6]));
println!("After weak modify: {:?}", vec_arcmo.value());
println!("\n=== Default for different types ===");
let default_vec: Arcmo<Vec<i32>> = Arcmo::default();
let default_string: Arcmo<String> = Arcmo::default();
println!("Default Vec<i32>: {:?}", default_vec);
println!("Default String: {:?}", default_string);
}Sourcepub fn value(&self) -> Option<T>
pub fn value(&self) -> Option<T>
Attempts to get a copy of the value if it exists and the original Arcmo still exists
Examples found in repository?
examples/arcmo_example.rs (line 43)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
fn main() {
println!("=== Creating Arcmo instances ===");
// Create with Some value
let v = Arcmo::some(42);
println!("Created with some: v = {:?}", v);
// Create with Default (None)
let default: Arcmo<i32> = Arcmo::default();
println!("Created with default: default = {:?}", default);
// Create explicitly as None
let none: Arcmo<i32> = Arcmo::none();
println!("Created as none: none = {:?}", none);
println!("\n=== Basic value operations ===");
println!("v.value() = {:?}", v.value());
println!("v.is_some() = {}", v.is_some());
println!("v.is_none() = {}", v.is_none());
println!("\n=== Modification ===");
// Modify existing value
v.modify(|x| *x += 1);
println!("After v += 1: {:?}", v.value());
v.modify(|x| *x *= 2);
println!("After v *= 2: {:?}", v.value());
// Try to modify None (should have no effect)
none.modify(|x| *x = 100);
println!("After trying to modify None: {:?}", none.value());
println!("\n=== Multiple references ===");
let v2 = v.clone();
v.modify(|x| *x += 5);
println!("Modified through v: {:?}", v.value());
println!("Observed through v2: {:?}", v2.value());
println!("\n=== Weak references ===");
let weak = v.downgrade();
println!("Weak reference: {:?}", weak);
println!("weak.value() = {:?}", weak.value());
println!("weak.is_some() = {}", weak.is_some());
println!("weak.is_none() = {}", weak.is_none());
// Modify through weak reference
weak.modify(|x| *x += 10);
println!("\nAfter weak modify:");
println!("Observed through strong ref: {:?}", v.value());
println!("Observed through weak ref: {:?}", weak.value());
println!("\n=== Take and Replace operations ===");
println!("Taking value from v: {:?}", v.take());
println!("After take:");
println!("v.is_none() = {}", v.is_none());
println!("weak.is_none() = {}", weak.is_none());
println!("\nReplacing with new value:");
let previous = v.replace(100);
println!("Previous value: {:?}", previous);
println!("New value through v: {:?}", v.value());
println!("New value through weak: {:?}", weak.value());
println!("\n=== Weak reference behavior when strong ref is dropped ===");
{
let temp = Arcmo::some(999);
let weak_temp = temp.downgrade();
println!("Before drop - weak_temp.value() = {:?}", weak_temp.value());
drop(temp);
println!("After drop - weak_temp.value() = {:?}", weak_temp.value());
}
println!("\n=== Complex type example ===");
let vec_arcmo = Arcmo::some(vec![1, 2, 3]);
println!("Vector Arcmo: {:?}", vec_arcmo);
vec_arcmo.modify(|v| v.push(4));
println!("After push: {:?}", vec_arcmo.value());
let weak_vec = vec_arcmo.downgrade();
weak_vec.modify(|v| v.extend_from_slice(&[5, 6]));
println!("After weak modify: {:?}", vec_arcmo.value());
println!("\n=== Default for different types ===");
let default_vec: Arcmo<Vec<i32>> = Arcmo::default();
let default_string: Arcmo<String> = Arcmo::default();
println!("Default Vec<i32>: {:?}", default_vec);
println!("Default String: {:?}", default_string);
}Sourcepub fn is_some(&self) -> bool
pub fn is_some(&self) -> bool
Returns true if both the original Arcmo exists and contains Some value
Examples found in repository?
examples/arcmo_example.rs (line 44)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
fn main() {
println!("=== Creating Arcmo instances ===");
// Create with Some value
let v = Arcmo::some(42);
println!("Created with some: v = {:?}", v);
// Create with Default (None)
let default: Arcmo<i32> = Arcmo::default();
println!("Created with default: default = {:?}", default);
// Create explicitly as None
let none: Arcmo<i32> = Arcmo::none();
println!("Created as none: none = {:?}", none);
println!("\n=== Basic value operations ===");
println!("v.value() = {:?}", v.value());
println!("v.is_some() = {}", v.is_some());
println!("v.is_none() = {}", v.is_none());
println!("\n=== Modification ===");
// Modify existing value
v.modify(|x| *x += 1);
println!("After v += 1: {:?}", v.value());
v.modify(|x| *x *= 2);
println!("After v *= 2: {:?}", v.value());
// Try to modify None (should have no effect)
none.modify(|x| *x = 100);
println!("After trying to modify None: {:?}", none.value());
println!("\n=== Multiple references ===");
let v2 = v.clone();
v.modify(|x| *x += 5);
println!("Modified through v: {:?}", v.value());
println!("Observed through v2: {:?}", v2.value());
println!("\n=== Weak references ===");
let weak = v.downgrade();
println!("Weak reference: {:?}", weak);
println!("weak.value() = {:?}", weak.value());
println!("weak.is_some() = {}", weak.is_some());
println!("weak.is_none() = {}", weak.is_none());
// Modify through weak reference
weak.modify(|x| *x += 10);
println!("\nAfter weak modify:");
println!("Observed through strong ref: {:?}", v.value());
println!("Observed through weak ref: {:?}", weak.value());
println!("\n=== Take and Replace operations ===");
println!("Taking value from v: {:?}", v.take());
println!("After take:");
println!("v.is_none() = {}", v.is_none());
println!("weak.is_none() = {}", weak.is_none());
println!("\nReplacing with new value:");
let previous = v.replace(100);
println!("Previous value: {:?}", previous);
println!("New value through v: {:?}", v.value());
println!("New value through weak: {:?}", weak.value());
println!("\n=== Weak reference behavior when strong ref is dropped ===");
{
let temp = Arcmo::some(999);
let weak_temp = temp.downgrade();
println!("Before drop - weak_temp.value() = {:?}", weak_temp.value());
drop(temp);
println!("After drop - weak_temp.value() = {:?}", weak_temp.value());
}
println!("\n=== Complex type example ===");
let vec_arcmo = Arcmo::some(vec![1, 2, 3]);
println!("Vector Arcmo: {:?}", vec_arcmo);
vec_arcmo.modify(|v| v.push(4));
println!("After push: {:?}", vec_arcmo.value());
let weak_vec = vec_arcmo.downgrade();
weak_vec.modify(|v| v.extend_from_slice(&[5, 6]));
println!("After weak modify: {:?}", vec_arcmo.value());
println!("\n=== Default for different types ===");
let default_vec: Arcmo<Vec<i32>> = Arcmo::default();
let default_string: Arcmo<String> = Arcmo::default();
println!("Default Vec<i32>: {:?}", default_vec);
println!("Default String: {:?}", default_string);
}Sourcepub fn is_none(&self) -> bool
pub fn is_none(&self) -> bool
Returns true if either the original Arcmo is dropped or contains None
Examples found in repository?
examples/arcmo_example.rs (line 45)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
fn main() {
println!("=== Creating Arcmo instances ===");
// Create with Some value
let v = Arcmo::some(42);
println!("Created with some: v = {:?}", v);
// Create with Default (None)
let default: Arcmo<i32> = Arcmo::default();
println!("Created with default: default = {:?}", default);
// Create explicitly as None
let none: Arcmo<i32> = Arcmo::none();
println!("Created as none: none = {:?}", none);
println!("\n=== Basic value operations ===");
println!("v.value() = {:?}", v.value());
println!("v.is_some() = {}", v.is_some());
println!("v.is_none() = {}", v.is_none());
println!("\n=== Modification ===");
// Modify existing value
v.modify(|x| *x += 1);
println!("After v += 1: {:?}", v.value());
v.modify(|x| *x *= 2);
println!("After v *= 2: {:?}", v.value());
// Try to modify None (should have no effect)
none.modify(|x| *x = 100);
println!("After trying to modify None: {:?}", none.value());
println!("\n=== Multiple references ===");
let v2 = v.clone();
v.modify(|x| *x += 5);
println!("Modified through v: {:?}", v.value());
println!("Observed through v2: {:?}", v2.value());
println!("\n=== Weak references ===");
let weak = v.downgrade();
println!("Weak reference: {:?}", weak);
println!("weak.value() = {:?}", weak.value());
println!("weak.is_some() = {}", weak.is_some());
println!("weak.is_none() = {}", weak.is_none());
// Modify through weak reference
weak.modify(|x| *x += 10);
println!("\nAfter weak modify:");
println!("Observed through strong ref: {:?}", v.value());
println!("Observed through weak ref: {:?}", weak.value());
println!("\n=== Take and Replace operations ===");
println!("Taking value from v: {:?}", v.take());
println!("After take:");
println!("v.is_none() = {}", v.is_none());
println!("weak.is_none() = {}", weak.is_none());
println!("\nReplacing with new value:");
let previous = v.replace(100);
println!("Previous value: {:?}", previous);
println!("New value through v: {:?}", v.value());
println!("New value through weak: {:?}", weak.value());
println!("\n=== Weak reference behavior when strong ref is dropped ===");
{
let temp = Arcmo::some(999);
let weak_temp = temp.downgrade();
println!("Before drop - weak_temp.value() = {:?}", weak_temp.value());
drop(temp);
println!("After drop - weak_temp.value() = {:?}", weak_temp.value());
}
println!("\n=== Complex type example ===");
let vec_arcmo = Arcmo::some(vec![1, 2, 3]);
println!("Vector Arcmo: {:?}", vec_arcmo);
vec_arcmo.modify(|v| v.push(4));
println!("After push: {:?}", vec_arcmo.value());
let weak_vec = vec_arcmo.downgrade();
weak_vec.modify(|v| v.extend_from_slice(&[5, 6]));
println!("After weak modify: {:?}", vec_arcmo.value());
println!("\n=== Default for different types ===");
let default_vec: Arcmo<Vec<i32>> = Arcmo::default();
let default_string: Arcmo<String> = Arcmo::default();
println!("Default Vec<i32>: {:?}", default_vec);
println!("Default String: {:?}", default_string);
}Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for WeakArcmo<T>
impl<T> RefUnwindSafe for WeakArcmo<T>
impl<T> Send for WeakArcmo<T>where
T: Send,
impl<T> Sync for WeakArcmo<T>where
T: Send,
impl<T> Unpin for WeakArcmo<T>
impl<T> UnwindSafe for WeakArcmo<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more