35 lines
1.2 KiB
Rust
35 lines
1.2 KiB
Rust
use crate::dynamic_data::{
|
|
BattleStatCalculator, DamageLibrary, DynamicLibrary, DynamicLibraryImpl, MiscLibrary, ScriptResolver,
|
|
};
|
|
use crate::ffi::{IdentifiablePointer, OwnedPtr};
|
|
use crate::static_data::StaticData;
|
|
use std::ptr::drop_in_place;
|
|
use std::sync::Arc;
|
|
|
|
/// Instantiates a new DynamicLibrary with given parameters.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_new(
|
|
static_data: OwnedPtr<Box<dyn StaticData>>,
|
|
stat_calculator: OwnedPtr<Box<dyn BattleStatCalculator>>,
|
|
damage_library: OwnedPtr<Box<dyn DamageLibrary>>,
|
|
misc_library: OwnedPtr<Box<dyn MiscLibrary>>,
|
|
script_resolver: OwnedPtr<Box<dyn ScriptResolver>>,
|
|
) -> IdentifiablePointer<Arc<dyn DynamicLibrary>> {
|
|
unsafe {
|
|
let a: Arc<dyn DynamicLibrary> = Arc::new(DynamicLibraryImpl::new(
|
|
*Box::from_raw(static_data),
|
|
*Box::from_raw(stat_calculator),
|
|
*Box::from_raw(damage_library),
|
|
*Box::from_raw(misc_library),
|
|
*Box::from_raw(script_resolver),
|
|
));
|
|
a.into()
|
|
}
|
|
}
|
|
|
|
/// Drops a dynamic library.
|
|
#[no_mangle]
|
|
extern "C" fn dynamic_library_drop(ptr: OwnedPtr<Arc<dyn StaticData>>) {
|
|
unsafe { drop_in_place(ptr) };
|
|
}
|