Moves a bunch of libraries to traits
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -17,32 +17,33 @@ use std::sync::Arc;
|
||||
|
||||
/// Generates foreign function interfaces for a DataLibrary trait implementation.
|
||||
macro_rules! library_interface {
|
||||
($library_type:ty, $return_type:ty) => {
|
||||
($library_type_name:ident, $library_type:ty, $return_type:ty) => {
|
||||
paste::paste! {
|
||||
#[no_mangle]
|
||||
extern "C" fn [< $library_type:snake _new >](capacity: usize) -> IdentifiablePointer<$library_type> {
|
||||
Box::new($library_type::new(capacity)).into()
|
||||
extern "C" fn [< $library_type_name:snake _new >](capacity: usize) -> IdentifiablePointer<$library_type> {
|
||||
let value: $library_type = Box::new([<$library_type_name Impl>]::new(capacity));
|
||||
value.into()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
unsafe extern "C" fn [< $library_type:snake _drop >](ptr: OwnedPtr<$library_type>) {
|
||||
unsafe extern "C" fn [< $library_type_name:snake _drop >](ptr: OwnedPtr<$library_type>) {
|
||||
drop_in_place(ptr);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
unsafe extern "C" fn [< $library_type:snake _add >](ptr: OwnedPtr<$library_type>, key: BorrowedPtr<c_char>, value: OwnedPtr<Arc<$return_type>>) {
|
||||
unsafe extern "C" fn [< $library_type_name:snake _add >](ptr: OwnedPtr<$library_type>, key: BorrowedPtr<c_char>, value: OwnedPtr<Arc<$return_type>>) {
|
||||
let lib = ptr.as_mut().unwrap();
|
||||
lib.add(&CStr::from_ptr(key).into(), *Box::from_raw(value));
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
unsafe extern "C" fn [< $library_type:snake _remove >](ptr: OwnedPtr<$library_type>, key: BorrowedPtr<c_char>) {
|
||||
unsafe extern "C" fn [< $library_type_name:snake _remove >](ptr: OwnedPtr<$library_type>, key: BorrowedPtr<c_char>) {
|
||||
let lib = ptr.as_mut().unwrap();
|
||||
lib.remove(&CStr::from_ptr(key).into());
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
unsafe extern "C" fn [< $library_type:snake _get >](ptr: OwnedPtr<$library_type>, key: BorrowedPtr<c_char>) -> IdentifiablePointer<Arc<$return_type>> {
|
||||
unsafe extern "C" fn [< $library_type_name:snake _get >](ptr: OwnedPtr<$library_type>, key: BorrowedPtr<c_char>) -> IdentifiablePointer<Arc<$return_type>> {
|
||||
let lib = ptr.as_mut().unwrap();
|
||||
let v = lib.get(&CStr::from_ptr(key).into());
|
||||
if let Some(value) = v {
|
||||
@@ -53,7 +54,7 @@ macro_rules! library_interface {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
unsafe extern "C" fn [< $library_type:snake _get_key_by_index >](ptr: OwnedPtr<$library_type>, index: usize) -> OwnedPtr<c_char> {
|
||||
unsafe extern "C" fn [< $library_type_name:snake _get_key_by_index >](ptr: OwnedPtr<$library_type>, index: usize) -> OwnedPtr<c_char> {
|
||||
let lib = ptr.as_mut().unwrap();
|
||||
let v = lib.get_key_by_index(index);
|
||||
if let Some(value) = v {
|
||||
@@ -64,7 +65,7 @@ macro_rules! library_interface {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
unsafe extern "C" fn [< $library_type:snake _len >](ptr: OwnedPtr<$library_type>) -> usize {
|
||||
unsafe extern "C" fn [< $library_type_name:snake _len >](ptr: OwnedPtr<$library_type>) -> usize {
|
||||
let lib = ptr.as_mut().unwrap();
|
||||
lib.len()
|
||||
}
|
||||
@@ -72,7 +73,7 @@ macro_rules! library_interface {
|
||||
};
|
||||
}
|
||||
|
||||
library_interface!(SpeciesLibrary, dyn Species);
|
||||
library_interface!(MoveLibrary, dyn MoveData);
|
||||
library_interface!(AbilityLibrary, dyn Ability);
|
||||
library_interface!(ItemLibrary, dyn Item);
|
||||
library_interface!(SpeciesLibrary, Box<dyn SpeciesLibrary>, dyn Species);
|
||||
library_interface!(MoveLibrary, Box<dyn MoveLibrary>, dyn MoveData);
|
||||
library_interface!(AbilityLibrary, Box<dyn AbilityLibrary>, dyn Ability);
|
||||
library_interface!(ItemLibrary, Box<dyn ItemLibrary>, dyn Item);
|
||||
|
||||
Reference in New Issue
Block a user