blob: 671d8f73d65deeacc4f2262ce4e28c1722b6e716 [file] [log] [blame]
David Tolnaye90be1d2020-04-24 11:45:57 -07001use crate::cxx_vector::VectorTarget;
Myron Ahneba35cf2020-02-05 19:41:51 +07002
3#[repr(C)]
4pub struct RustVec<T: VectorTarget<T>> {
5 repr: Vec<T>,
6}
7
8impl<T: VectorTarget<T>> RustVec<T> {
9 pub fn from(v: Vec<T>) -> Self {
10 RustVec { repr: v }
11 }
12
13 pub fn from_ref(v: &Vec<T>) -> &Self {
David Tolnayfac8b252020-04-24 11:37:39 -070014 unsafe { &*(v as *const Vec<T> as *const RustVec<T>) }
Myron Ahneba35cf2020-02-05 19:41:51 +070015 }
16
17 pub fn into_vec(self) -> Vec<T> {
18 self.repr
19 }
20
21 pub fn as_vec(&self) -> &Vec<T> {
22 &self.repr
23 }
24
25 pub fn as_mut_vec(&mut self) -> &mut Vec<T> {
26 &mut self.repr
27 }
28
29 pub fn len(&self) -> usize {
30 self.repr.len()
31 }
Myron Ahneba35cf2020-02-05 19:41:51 +070032}