sharedptr/
unsafe_def.rs

1use std::rc::Rc;
2use std::sync::Arc;
3
4///# Safety
5/// Rc::get_mut Too strict, resulting in limited function,
6/// we need an unsafe way to be consistent with the SharedPtr
7pub unsafe trait IGetMutUnchecked<T: ?Sized>{
8    ///# Safety
9    /// no check unique,return &mut T
10    /// panic!! ptr is none
11    #[allow(clippy::mut_from_ref)]
12    unsafe fn get_mut_unchecked(&self)->&mut T;
13}
14
15unsafe impl <T: ?Sized>  IGetMutUnchecked<T> for crate::Arc::SharedPtr<T> {
16    unsafe fn get_mut_unchecked(&self) -> &mut T {
17        &mut *(Arc::<T>::as_ptr(&**self) as *mut T)
18    }
19}
20
21unsafe impl <T: ?Sized> IGetMutUnchecked<T> for crate::Rc::SharedPtr<T> {
22    unsafe fn get_mut_unchecked(&self) -> &mut T {
23        &mut *(Rc::<T>::as_ptr(&**self) as *mut T)
24    }
25}