pub struct Arcmo<T: Clone> { /* private fields */ }Expand description
A wrapper combining Arc and Mutex for convenient shared mutable access to optional values Only works with types that implement Clone
Implementations§
Source§impl<T: Clone> Arcmo<T>
impl<T: Clone> Arcmo<T>
Sourcepub fn none() -> Self
pub fn none() -> Self
Creates a new empty Arcmo
Examples found in repository?
examples/arcmo_example.rs (line 14)
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 some(value: T) -> Self
pub fn some(value: T) -> Self
Creates a new Arcmo containing Some(value)
Examples found in repository?
examples/arcmo_example.rs (line 6)
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 modify<F, R>(&self, f: F) -> Option<R>
pub fn modify<F, R>(&self, f: F) -> Option<R>
Modifies the contained value if it exists using the provided closure
Examples found in repository?
examples/arcmo_example.rs (line 24)
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 take(&self) -> Option<T>
pub fn take(&self) -> Option<T>
Sets the value to None and returns the previous value if it existed
Examples found in repository?
examples/arcmo_example.rs (line 54)
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 replace(&self, value: T) -> Option<T>
pub fn replace(&self, value: T) -> Option<T>
Sets the value to Some(value) and returns the previous value if it existed
Examples found in repository?
examples/arcmo_example.rs (line 60)
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>
Returns a copy of the contained value if it exists
Examples found in repository?
examples/arcmo_example.rs (line 18)
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 the contained value is Some
Examples found in repository?
examples/arcmo_example.rs (line 19)
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 the contained value is None
Examples found in repository?
examples/arcmo_example.rs (line 20)
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 downgrade(&self) -> WeakArcmo<T>
pub fn downgrade(&self) -> WeakArcmo<T>
Returns a weak reference to the contained value
Examples found in repository?
examples/arcmo_example.rs (line 41)
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 Arcmo<T>
impl<T> RefUnwindSafe for Arcmo<T>
impl<T> Send for Arcmo<T>where
T: Send,
impl<T> Sync for Arcmo<T>where
T: Send,
impl<T> Unpin for Arcmo<T>
impl<T> UnwindSafe for Arcmo<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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit)