orx_concurrent_iter/implementations/jagged_arrays/owned/
raw_vec.rs1use crate::implementations::jagged_arrays::{
2 as_raw_slice::{AsOwningSlice, AsRawSlice},
3 raw_slice::RawSlice,
4};
5use alloc::vec::Vec;
6use core::mem::ManuallyDrop;
7
8pub struct RawVec<T> {
17 ptr: *const T,
18 len: usize,
19 capacity: usize,
20}
21
22impl<T> Clone for RawVec<T> {
23 fn clone(&self) -> Self {
24 Self {
25 ptr: self.ptr,
26 len: self.len,
27 capacity: self.capacity,
28 }
29 }
30}
31
32impl<T> From<Vec<T>> for RawVec<T> {
33 fn from(value: Vec<T>) -> Self {
34 let raw = Self {
35 ptr: value.as_ptr(),
36 len: value.len(),
37 capacity: value.capacity(),
38 };
39 let _ = ManuallyDrop::new(value);
40 raw
41 }
42}
43
44impl<T> AsRawSlice<T> for RawVec<T> {
45 fn ptr(&self) -> *const T {
46 self.ptr
47 }
48
49 fn length(&self) -> usize {
50 self.len
51 }
52
53 fn raw_slice(&self, begin: usize, len: usize) -> RawSlice<T> {
54 debug_assert!(begin + len <= self.len);
55 let ptr = unsafe { self.ptr.add(begin) };
56 RawSlice::new(ptr, len)
57 }
58}
59
60impl<T> AsOwningSlice<T> for RawVec<T> {
61 fn capacity(&self) -> usize {
62 self.capacity
63 }
64}