Split corelib::abi::sharedarray into corelib::sharedarray and corelib::sharedarray::ffi

This commit is contained in:
Simon Hausmann 2020-08-04 08:26:44 +02:00
parent 3ad7a55038
commit f79b80f1e6
4 changed files with 28 additions and 23 deletions

View file

@ -70,7 +70,7 @@ fn main() {
cbindgen::Builder::new() cbindgen::Builder::new()
.with_config(config.clone()) .with_config(config.clone())
.with_src(crate_dir.join("abi/sharedarray.rs")) .with_src(crate_dir.join("sharedarray.rs"))
.with_after_include("namespace sixtyfps { template<typename T> struct SharedArray; }") .with_after_include("namespace sixtyfps { template<typename T> struct SharedArray; }")
.generate() .generate()
.expect("Unable to generate bindings") .expect("Unable to generate bindings")

View file

@ -120,7 +120,7 @@ pub enum Resource {
EmbeddedData(super::slice::Slice<'static, u8>), EmbeddedData(super::slice::Slice<'static, u8>),
/// Raw ARGB /// Raw ARGB
#[allow(missing_docs)] #[allow(missing_docs)]
EmbeddedRgbaImage { width: u32, height: u32, data: super::abi::sharedarray::SharedArray<u8> }, EmbeddedRgbaImage { width: u32, height: u32, data: super::sharedarray::SharedArray<u8> },
} }
impl Default for Resource { impl Default for Resource {

View file

@ -28,11 +28,11 @@ pub mod abi {
#![allow(unsafe_code)] #![allow(unsafe_code)]
pub mod datastructures; pub mod datastructures;
pub mod model; pub mod model;
pub mod sharedarray;
} }
pub mod items; pub mod items;
pub mod properties; pub mod properties;
pub mod sharedarray;
pub mod signals; pub mod signals;
pub mod string; pub mod string;
@ -40,7 +40,7 @@ pub mod string;
pub use string::SharedString; pub use string::SharedString;
#[doc(inline)] #[doc(inline)]
pub use abi::sharedarray::SharedArray; pub use sharedarray::SharedArray;
#[doc(inline)] #[doc(inline)]
pub use graphics::Resource; pub use graphics::Resource;
@ -74,7 +74,7 @@ pub mod tests;
pub fn use_modules() -> usize { pub fn use_modules() -> usize {
tests::sixtyfps_mock_elapsed_time as usize tests::sixtyfps_mock_elapsed_time as usize
+ signals::ffi::sixtyfps_signal_init as usize + signals::ffi::sixtyfps_signal_init as usize
+ abi::sharedarray::sixtyfps_shared_array_drop as usize + sharedarray::ffi::sixtyfps_shared_array_drop as usize
+ layout::solve_grid_layout as usize + layout::solve_grid_layout as usize
+ item_tree::ffi::sixtyfps_visit_item_tree as usize + item_tree::ffi::sixtyfps_visit_item_tree as usize
+ graphics::ffi::sixtyfps_new_path_elements as usize + graphics::ffi::sixtyfps_new_path_elements as usize

View file

@ -1,4 +1,5 @@
//! module for the SharedArray and related things //! module for the SharedArray and related things
#![allow(unsafe_code)]
use core::mem::MaybeUninit; use core::mem::MaybeUninit;
use std::{fmt::Debug, fmt::Display, ops::Deref}; use std::{fmt::Debug, fmt::Display, ops::Deref};
use triomphe::{Arc, HeaderWithLength, ThinArc}; use triomphe::{Arc, HeaderWithLength, ThinArc};
@ -169,24 +170,28 @@ fn simple_test() {
assert_ne!(def, x); assert_ne!(def, x);
} }
#[no_mangle] pub(crate) mod ffi {
/// This function is used for the low-level C++ interface to allocate the backing vector for an empty shared array. use super::*;
pub unsafe extern "C" fn sixtyfps_shared_array_new_null(out: *mut SharedArray<u8>) {
core::ptr::write(out, SharedArray::<u8>::default());
}
#[no_mangle] #[no_mangle]
/// This function is used for the low-level C++ interface to clone a shared array by increasing its reference count. /// This function is used for the low-level C++ interface to allocate the backing vector for an empty shared array.
pub unsafe extern "C" fn sixtyfps_shared_array_clone( pub unsafe extern "C" fn sixtyfps_shared_array_new_null(out: *mut SharedArray<u8>) {
core::ptr::write(out, SharedArray::<u8>::default());
}
#[no_mangle]
/// This function is used for the low-level C++ interface to clone a shared array by increasing its reference count.
pub unsafe extern "C" fn sixtyfps_shared_array_clone(
out: *mut SharedArray<u8>, out: *mut SharedArray<u8>,
source: &SharedArray<u8>, source: &SharedArray<u8>,
) { ) {
core::ptr::write(out, source.clone()); core::ptr::write(out, source.clone());
} }
#[no_mangle] #[no_mangle]
/// This function is used for the low-level C++ interface to decrease the reference count of a shared array. /// This function is used for the low-level C++ interface to decrease the reference count of a shared array.
pub unsafe extern "C" fn sixtyfps_shared_array_drop(out: *mut SharedArray<u8>) { pub unsafe extern "C" fn sixtyfps_shared_array_drop(out: *mut SharedArray<u8>) {
// ?? This won't call drop on the right type... // ?? This won't call drop on the right type...
core::ptr::read(out); core::ptr::read(out);
}
} }