Move vector element primitive macro to macro_rules
diff --git a/src/cxx_vector.rs b/src/cxx_vector.rs
index 829e12a..f7fb5ac 100644
--- a/src/cxx_vector.rs
+++ b/src/cxx_vector.rs
@@ -1,4 +1,3 @@
-use cxxbridge_macro::impl_vector_element_for_primitive;
use std::mem;
/// Binding to C++ `std::vector<T>`.
@@ -82,6 +81,40 @@
fn __push_back(v: &CxxVector<Self>, item: &Self);
}
+macro_rules! impl_vector_element_for_primitive {
+ ($ty:ident) => {
+ unsafe impl VectorElement for $ty {
+ fn __vector_size(v: &CxxVector<$ty>) -> usize {
+ extern "C" {
+ attr! {
+ #[link_name = concat!("cxxbridge02$std$vector$", stringify!($ty), "$size")]
+ fn __vector_size(_: &CxxVector<$ty>) -> usize;
+ }
+ }
+ unsafe { __vector_size(v) }
+ }
+ unsafe fn __get_unchecked(v: &CxxVector<$ty>, pos: usize) -> &$ty {
+ extern "C" {
+ attr! {
+ #[link_name = concat!("cxxbridge02$std$vector$", stringify!($ty), "$get_unchecked")]
+ fn __get_unchecked(_: &CxxVector<$ty>, _: usize) -> *const $ty;
+ }
+ }
+ &*__get_unchecked(v, pos)
+ }
+ fn __push_back(v: &CxxVector<$ty>, item: &$ty) {
+ extern "C" {
+ attr! {
+ #[link_name = concat!("cxxbridge02$std$vector$", stringify!($ty), "$push_back")]
+ fn __push_back(_: &CxxVector<$ty>, _: &$ty);
+ }
+ }
+ unsafe { __push_back(v, item) }
+ }
+ }
+ };
+}
+
impl_vector_element_for_primitive!(u8);
impl_vector_element_for_primitive!(u16);
impl_vector_element_for_primitive!(u32);