orx_concurrent_iter/implementations/jagged_arrays/
raw_slice.rs

1use super::as_raw_slice::AsRawSlice;
2
3/// Raw representation of a slice defined by a pointer and length.
4///
5/// All elements in the slice are assumed to be initialized.
6pub struct RawSlice<T> {
7    ptr: *const T,
8    len: usize,
9}
10
11impl<'a, T> From<&'a [T]> for RawSlice<T> {
12    fn from(value: &'a [T]) -> Self {
13        Self {
14            ptr: value.as_ptr(),
15            len: value.len(),
16        }
17    }
18}
19
20impl<T> RawSlice<T> {
21    pub(super) fn new(ptr: *const T, len: usize) -> Self {
22        Self { ptr, len }
23    }
24}
25
26impl<T> AsRawSlice<T> for RawSlice<T> {
27    fn ptr(&self) -> *const T {
28        self.ptr
29    }
30
31    fn length(&self) -> usize {
32        self.len
33    }
34
35    fn raw_slice(&self, begin: usize, len: usize) -> RawSlice<T> {
36        debug_assert!(begin + len <= self.len);
37        let ptr = unsafe { self.ptr.add(begin) };
38        Self::new(ptr, len)
39    }
40}