Expose Vec capacity to C++
diff --git a/src/cxx.cc b/src/cxx.cc
index 2be483d..c17e0fb 100644
--- a/src/cxx.cc
+++ b/src/cxx.cc
@@ -414,6 +414,8 @@
rust::Vec<CXX_TYPE> *ptr) noexcept; \
size_t cxxbridge1$rust_vec$##RUST_TYPE##$len( \
const rust::Vec<CXX_TYPE> *ptr) noexcept; \
+ size_t cxxbridge1$rust_vec$##RUST_TYPE##$capacity( \
+ const rust::Vec<CXX_TYPE> *ptr) noexcept; \
const CXX_TYPE *cxxbridge1$rust_vec$##RUST_TYPE##$data( \
const rust::Vec<CXX_TYPE> *ptr) noexcept; \
void cxxbridge1$rust_vec$##RUST_TYPE##$reserve_total( \
@@ -436,6 +438,10 @@
return cxxbridge1$rust_vec$##RUST_TYPE##$len(this); \
} \
template <> \
+ size_t Vec<CXX_TYPE>::capacity() const noexcept { \
+ return cxxbridge1$rust_vec$##RUST_TYPE##$capacity(this); \
+ } \
+ template <> \
const CXX_TYPE *Vec<CXX_TYPE>::data() const noexcept { \
return cxxbridge1$rust_vec$##RUST_TYPE##$data(this); \
} \
diff --git a/src/rust_vec.rs b/src/rust_vec.rs
index 8ddc4a7..126fdbf 100644
--- a/src/rust_vec.rs
+++ b/src/rust_vec.rs
@@ -41,6 +41,10 @@
self.repr.len()
}
+ pub fn capacity(&self) -> usize {
+ self.repr.capacity()
+ }
+
pub fn as_ptr(&self) -> *const T {
self.repr.as_ptr()
}
diff --git a/src/symbols/rust_vec.rs b/src/symbols/rust_vec.rs
index 4f4b6ff..6aa0b76 100644
--- a/src/symbols/rust_vec.rs
+++ b/src/symbols/rust_vec.rs
@@ -30,6 +30,12 @@
}
}
attr! {
+ #[export_name = concat!("cxxbridge1$rust_vec$", $segment, "$capacity")]
+ unsafe extern "C" fn __capacity(this: *const RustVec<$ty>) -> usize {
+ (*this).repr.capacity()
+ }
+ }
+ attr! {
#[export_name = concat!("cxxbridge1$rust_vec$", $segment, "$data")]
unsafe extern "C" fn __data(this: *const RustVec<$ty>) -> *const $ty {
(*this).repr.as_ptr()