macro_rules! define_shared_ointer {
($ointer_strong:ident, $pointer_strong:ident, $ointer_weak:ident, $pointer_weak:ident, $bits:literal) => { ... };
}
Expand description
Macro used to define Rc/Weak
or Arc/Weak
like shared ointer
s.
This crate defines BRc/BWeak
(called byte stolen Rc/Weak
) that wraps Rc/Weak
and steal high 8-bits(1-byte), by using
define_shared_ointer!(BRc, Rc, BWeak, Weak, 8);
And define ORc/OWeak
(called orientable Rc/Weak
) by using
define_shared_ointer!(ORc, Rc, OWeak, Weak, 1);
Tests over BArc
use ointer::{sync::BArc, Ointer};
use core::mem::size_of;
let mut o = BArc::new(1);
assert_eq!(*o, 1);
assert_eq!(o.get::<bool>(), false);
// Define a small enum for testing.
#[derive(Clone, Copy, PartialEq, Debug)]
enum MySmallEnum {
_A,
B,
_C,
}
assert_eq!(size_of::<MySmallEnum>(), 1);
o.set_mut(MySmallEnum::B);
assert_eq!(*o, 1);
assert_eq!(o.get::<MySmallEnum>(), MySmallEnum::B);
// Modify the bool and pointer inside the ointer.
o.map_mut(|b: &mut bool, p| {
*b = !*b;
*p = Default::default();
});
assert_eq!(*o.downgrade().upgrade().unwrap(), Default::default());