133d722a9Sopenharmony_ci#[cxx::bridge(namespace = "tests")] 233d722a9Sopenharmony_cipub mod ffi { 333d722a9Sopenharmony_ci struct Job { 433d722a9Sopenharmony_ci raw: u32, 533d722a9Sopenharmony_ci } 633d722a9Sopenharmony_ci 733d722a9Sopenharmony_ci unsafe extern "C++" { 833d722a9Sopenharmony_ci include!("tests/ffi/tests.h"); 933d722a9Sopenharmony_ci 1033d722a9Sopenharmony_ci type C = crate::ffi::C; 1133d722a9Sopenharmony_ci 1233d722a9Sopenharmony_ci fn c_take_unique_ptr(c: UniquePtr<C>); 1333d722a9Sopenharmony_ci } 1433d722a9Sopenharmony_ci 1533d722a9Sopenharmony_ci impl Vec<Job> {} 1633d722a9Sopenharmony_ci} 1733d722a9Sopenharmony_ci 1833d722a9Sopenharmony_ci#[cxx::bridge(namespace = "tests")] 1933d722a9Sopenharmony_cipub mod ffi2 { 2033d722a9Sopenharmony_ci unsafe extern "C++" { 2133d722a9Sopenharmony_ci include!("tests/ffi/tests.h"); 2233d722a9Sopenharmony_ci 2333d722a9Sopenharmony_ci type D = crate::other::D; 2433d722a9Sopenharmony_ci type E = crate::other::E; 2533d722a9Sopenharmony_ci #[namespace = "F"] 2633d722a9Sopenharmony_ci type F = crate::other::f::F; 2733d722a9Sopenharmony_ci #[namespace = "G"] 2833d722a9Sopenharmony_ci type G = crate::other::G; 2933d722a9Sopenharmony_ci 3033d722a9Sopenharmony_ci #[namespace = "H"] 3133d722a9Sopenharmony_ci type H; 3233d722a9Sopenharmony_ci 3333d722a9Sopenharmony_ci fn c_take_trivial_ptr(d: UniquePtr<D>); 3433d722a9Sopenharmony_ci fn c_take_trivial_ref(d: &D); 3533d722a9Sopenharmony_ci fn c_take_trivial_mut_ref(d: &mut D); 3633d722a9Sopenharmony_ci fn c_take_trivial_pin_ref(d: Pin<&D>); 3733d722a9Sopenharmony_ci fn c_take_trivial_pin_mut_ref(d: Pin<&mut D>); 3833d722a9Sopenharmony_ci fn c_take_trivial_ref_method(self: &D); 3933d722a9Sopenharmony_ci fn c_take_trivial_mut_ref_method(self: &mut D); 4033d722a9Sopenharmony_ci fn c_take_trivial(d: D); 4133d722a9Sopenharmony_ci fn c_take_trivial_ns_ptr(g: UniquePtr<G>); 4233d722a9Sopenharmony_ci fn c_take_trivial_ns_ref(g: &G); 4333d722a9Sopenharmony_ci fn c_take_trivial_ns(g: G); 4433d722a9Sopenharmony_ci fn c_take_opaque_ptr(e: UniquePtr<E>); 4533d722a9Sopenharmony_ci fn c_take_opaque_ref(e: &E); 4633d722a9Sopenharmony_ci fn c_take_opaque_ref_method(self: &E); 4733d722a9Sopenharmony_ci fn c_take_opaque_mut_ref_method(self: Pin<&mut E>); 4833d722a9Sopenharmony_ci fn c_take_opaque_ns_ptr(e: UniquePtr<F>); 4933d722a9Sopenharmony_ci fn c_take_opaque_ns_ref(e: &F); 5033d722a9Sopenharmony_ci fn c_return_trivial_ptr() -> UniquePtr<D>; 5133d722a9Sopenharmony_ci fn c_return_trivial() -> D; 5233d722a9Sopenharmony_ci fn c_return_trivial_ns_ptr() -> UniquePtr<G>; 5333d722a9Sopenharmony_ci fn c_return_trivial_ns() -> G; 5433d722a9Sopenharmony_ci fn c_return_opaque_ptr() -> UniquePtr<E>; 5533d722a9Sopenharmony_ci fn c_return_opaque_mut_pin(e: Pin<&mut E>) -> Pin<&mut E>; 5633d722a9Sopenharmony_ci fn c_return_ns_opaque_ptr() -> UniquePtr<F>; 5733d722a9Sopenharmony_ci fn c_return_ns_unique_ptr() -> UniquePtr<H>; 5833d722a9Sopenharmony_ci fn c_take_ref_ns_c(h: &H); 5933d722a9Sopenharmony_ci 6033d722a9Sopenharmony_ci #[namespace = "other"] 6133d722a9Sopenharmony_ci fn ns_c_take_trivial(d: D); 6233d722a9Sopenharmony_ci #[namespace = "other"] 6333d722a9Sopenharmony_ci fn ns_c_return_trivial() -> D; 6433d722a9Sopenharmony_ci 6533d722a9Sopenharmony_ci #[namespace = "I"] 6633d722a9Sopenharmony_ci type I; 6733d722a9Sopenharmony_ci 6833d722a9Sopenharmony_ci fn get(self: &I) -> u32; 6933d722a9Sopenharmony_ci 7033d722a9Sopenharmony_ci #[namespace = "I"] 7133d722a9Sopenharmony_ci fn ns_c_return_unique_ptr_ns() -> UniquePtr<I>; 7233d722a9Sopenharmony_ci } 7333d722a9Sopenharmony_ci 7433d722a9Sopenharmony_ci impl UniquePtr<D> {} 7533d722a9Sopenharmony_ci impl UniquePtr<E> {} 7633d722a9Sopenharmony_ci impl UniquePtr<F> {} 7733d722a9Sopenharmony_ci impl UniquePtr<G> {} 7833d722a9Sopenharmony_ci} 79