use std::ptr::NonNull;
use vtable_rs::VPtr;
use crate::DLList;
use crate::dlkr::DLPlainLightMutex;
use crate::fd4::{FD4BasicHashString, FD4FileCap, FD4ResCap, FD4ResCapHolder, FD4ResRep};
use shared::{OwnedPtr, Subclass};
#[vtable_rs::vtable]
pub trait CSFileImpVmt {
fn get_runtime_metadata(&self) -> usize;
fn destructor(&mut self, param_2: u32);
fn get_file_cap(&self, name: &FD4BasicHashString) -> Option<NonNull<FD4FileCap>>;
fn add_file_cap(
&mut self,
name: &FD4BasicHashString,
file_cap: &FD4FileCap,
file_loading_queue: u32,
);
fn unk_add_file_cap(
&mut self,
name: &FD4BasicHashString,
file_cap: &FD4FileCap,
param_4: usize,
param_5: usize,
file_loading_queue: u32,
);
fn unload_file_cap_by_name(&mut self, name: &FD4BasicHashString);
fn unload_file_cap(&mut self, file_cap: &FD4FileCap);
fn unk40(&mut self, file_cap: &FD4FileCap);
}
#[repr(C)]
pub struct CSFileImp {
vftable: VPtr<dyn CSFileImpVmt, Self>,
pub file_repository_1: OwnedPtr<CSFileRepository>,
}
#[repr(C)]
#[derive(Subclass)]
#[subclass(base = FD4ResRep, base = FD4ResCap)]
pub struct CSFileRepository {
pub res_rep: FD4ResRep,
pub res_cap_holder: FD4ResCapHolder<FD4FileCap>,
pub holder2: FD4ResCapHolder<FD4FileCap>,
unkc8: DLList<()>,
pub mutexes: [OwnedPtr<CSFileRepositoryMutex>; 5],
file_load_event_queues: [OwnedPtr<usize>; 5],
}
#[repr(C)]
pub struct CSFileRepositoryMutex {
pub mutex: DLPlainLightMutex,
unk30: u32,
unk34: u32,
unk38: u32,
unk3c: u32,
unk40: usize,
unk48: usize,
}