brickrust 1.11.2+brickrust-001

A library which allows Brick Rigs modding

use crate::ue::fmalloc;

#[derive(Debug)]
#[repr(C)]
pub struct FReferenceControllerBase {
    pub shared_reference_count: i32,
    pub weak_reference_count: i32,
}

#[derive(Debug, Clone)]
#[repr(C)]
pub struct TSharedPtr<T> {
    pub object: *mut T,
    pub reference_controller: *mut FReferenceControllerBase,
}

#[derive(Debug, Clone)]
#[repr(C)]
pub struct TWeakPtr<T> {
    pub object: *mut T,
    pub reference_controller: *mut FReferenceControllerBase,
}

#[derive(Debug, Clone)]
#[repr(C)]
pub struct TSharedRef<T> {
    pub object: *mut T,
    pub reference_controller: *mut FReferenceControllerBase,
}
impl<T> TSharedRef<T>
{
    pub fn new() -> TSharedRef<T>
    {
        TSharedRef {
            object: core::ptr::null_mut(),
            reference_controller: core::ptr::null_mut(),
        }
    }
    pub unsafe fn make_shared() -> TSharedRef<T>
    {
        TSharedRef {
            object: fmalloc::malloc(size_of::<T>()) as *mut T,
            reference_controller: fmalloc::malloc(size_of::<FReferenceControllerBase>()) as *mut FReferenceControllerBase,
        }
    }

    pub unsafe fn make_shared_no_alloc() -> TSharedRef<T>
    {
        TSharedRef {
            object: core::ptr::null_mut(),
            reference_controller: fmalloc::malloc(size_of::<FReferenceControllerBase>()) as *mut FReferenceControllerBase,
        }
    }
}