Unsafe CxxVector::get_unchecked
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 657bcd2..1b3aab3 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -656,14 +656,12 @@
quote! {
unsafe impl ::cxx::private::VectorElement<#inner> for #inner {
- fn __get_unchecked(v: &::cxx::CxxVector<#inner>, pos: usize) -> &#inner {
+ unsafe fn __get_unchecked(v: &::cxx::CxxVector<#inner>, pos: usize) -> &#inner {
extern "C" {
#[link_name = #link_get_unchecked]
fn __get_unchecked(_: &::cxx::CxxVector<#inner>, _: usize) -> &#inner;
}
- unsafe {
- __get_unchecked(v, pos)
- }
+ __get_unchecked(v, pos)
}
fn __vector_length(v: &::cxx::CxxVector<#inner>) -> usize {
unsafe {
@@ -699,14 +697,12 @@
quote! {
unsafe impl VectorElement<#inner> for #inner {
- fn __get_unchecked(v: &CxxVector<#inner>, pos: usize) -> &#inner {
+ unsafe fn __get_unchecked(v: &CxxVector<#inner>, pos: usize) -> &#inner {
extern "C" {
#[link_name = #link_get_unchecked]
fn __get_unchecked(_: &CxxVector<#inner>, _: usize) -> &#inner;
}
- unsafe {
- __get_unchecked(v, pos)
- }
+ __get_unchecked(v, pos)
}
fn __vector_length(v: &CxxVector<#inner>) -> usize {
unsafe {
diff --git a/src/cxx_vector.rs b/src/cxx_vector.rs
index c0d2f6b..7b985d8 100644
--- a/src/cxx_vector.rs
+++ b/src/cxx_vector.rs
@@ -19,7 +19,7 @@
T::__vector_length(self)
}
- pub fn get_unchecked(&self, pos: usize) -> &T {
+ pub unsafe fn get_unchecked(&self, pos: usize) -> &T {
T::__get_unchecked(self, pos)
}
@@ -30,7 +30,7 @@
pub fn get(&self, pos: usize) -> Option<&T> {
if pos < self.size() {
- Some(self.get_unchecked(pos))
+ Some(unsafe { T::__get_unchecked(self, pos) })
} else {
None
}
@@ -68,7 +68,7 @@
// codebase.
#[doc(hidden)]
pub unsafe trait VectorElement<T> {
- fn __get_unchecked(v: &CxxVector<T>, pos: usize) -> &T;
+ unsafe fn __get_unchecked(v: &CxxVector<T>, pos: usize) -> &T;
fn __vector_length(v: &CxxVector<T>) -> usize;
fn __push_back(v: &CxxVector<T>, item: &T);
}