Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-arrow/src/legacy/array/slice.rs
6939 views
1
use crate::array::Array;
2
3
/// Utility trait to slice concrete arrow arrays whilst keeping their
4
/// concrete type. E.g. don't return `Box<dyn Array>`.
5
pub trait SlicedArray {
6
/// Slices this [`Array`].
7
/// # Implementation
8
/// This operation is `O(1)` over `len`.
9
/// # Panic
10
/// This function panics iff `offset + length > self.len()`.
11
fn slice_typed(&self, offset: usize, length: usize) -> Self
12
where
13
Self: Sized;
14
15
/// Slices the [`Array`].
16
/// # Implementation
17
/// This operation is `O(1)`.
18
///
19
/// # Safety
20
/// The caller must ensure that `offset + length <= self.len()`
21
unsafe fn slice_typed_unchecked(&self, offset: usize, length: usize) -> Self
22
where
23
Self: Sized;
24
}
25
26
impl<T: Array + Clone> SlicedArray for T {
27
fn slice_typed(&self, offset: usize, length: usize) -> Self {
28
let mut arr = self.clone();
29
arr.slice(offset, length);
30
arr
31
}
32
33
unsafe fn slice_typed_unchecked(&self, offset: usize, length: usize) -> Self {
34
let mut arr = self.clone();
35
arr.slice_unchecked(offset, length);
36
arr
37
}
38
}
39
40