pub struct JaggedArray<TVal, TBuffer: VecLike, const N: usize>where
<TBuffer as VecLike>::TI: AsPrimitive<usize> + Num,
U<N>: Sub<B1>,
<U<N> as Sub<B1>>::Output: ArrayLength,
Const<N>: ToUInt,{ /* private fields */ }Implementations§
Source§impl<TVal, TBuffer: VecLike, const N: usize> JaggedArray<TVal, TBuffer, N>where
<TBuffer as VecLike>::TI: AsPrimitive<usize> + Num + NumAssignOps + PartialOrd + ConstOne + ConstZero,
U<N>: Sub<B1>,
<U<N> as Sub<B1>>::Output: ArrayLength,
Const<N>: ToUInt,
usize: AsPrimitive<<TBuffer as VecLike>::TI>,
impl<TVal, TBuffer: VecLike, const N: usize> JaggedArray<TVal, TBuffer, N>where
<TBuffer as VecLike>::TI: AsPrimitive<usize> + Num + NumAssignOps + PartialOrd + ConstOne + ConstZero,
U<N>: Sub<B1>,
<U<N> as Sub<B1>>::Output: ArrayLength,
Const<N>: ToUInt,
usize: AsPrimitive<<TBuffer as VecLike>::TI>,
pub fn new() -> Self
pub fn with_capacity(capacity: [usize; N]) -> Self
pub fn reserve(&mut self, additional: [usize; N])
pub fn buffer_reserve(&mut self, additional: usize)
pub fn buffer_len(&self) -> usize
pub fn buffer_capacity(&self) -> usize
pub fn clear(&mut self)
Sourcepub fn new_row<const DIM: usize>(&mut self)
pub fn new_row<const DIM: usize>(&mut self)
§Example
use jaggedarray::jagged_array::JaggedArray;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.new_row::<0>();
data.push_to_last_row(1);
assert!(data[[1,0]] == 1);pub fn push_to_last_row(&mut self, val: TVal)
Sourcepub unsafe fn push_to_last_row_unchecked(&mut self, val: TVal)
pub unsafe fn push_to_last_row_unchecked(&mut self, val: TVal)
§Safety
The caller must ensure that self.buffer_len() < self.buffer_capacity()
Sourcepub fn pop_from_last_row(&mut self) -> Option<TVal>
pub fn pop_from_last_row(&mut self) -> Option<TVal>
§Example
use jaggedarray::jagged_array::JaggedArray;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.push_to_last_row(1);
assert!(data.pop_from_last_row() == Some(1));Sourcepub fn extend_last_row(&mut self, values: impl Iterator<Item = TVal>)
pub fn extend_last_row(&mut self, values: impl Iterator<Item = TVal>)
§Example
use jaggedarray::jagged_array::JaggedArray;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.extend_last_row([1,2,3].into_iter());
assert!(data[[0,0]] == 1);
assert!(data[[0,1]] == 2);
assert!(data[[0,2]] == 3);Sourcepub fn extend_last_row_from_slice(&mut self, values: &[TVal])where
TVal: Clone,
pub fn extend_last_row_from_slice(&mut self, values: &[TVal])where
TVal: Clone,
§Example
use jaggedarray::jagged_array::JaggedArray;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.extend_last_row_from_slice(&[1,2,3]);
assert!(data[[0,0]] == 1);
assert!(data[[0,1]] == 2);
assert!(data[[0,2]] == 3);Sourcepub fn append_from_view<const M: usize>(
&mut self,
other: JaggedArrayView<'_, TVal, TBuffer::TI, M>,
)
pub fn append_from_view<const M: usize>( &mut self, other: JaggedArrayView<'_, TVal, TBuffer::TI, M>, )
§Example
use jaggedarray::jagged_array::JaggedArray;
use crate::jaggedarray::jagged_array::JaggedArrayViewTrait;
let mut data = JaggedArray::<usize, Vec<u16>, 3>::new();
data.new_row::<0>();
data.new_row::<1>();
data.extend_last_row_from_slice(&[1,2,3]);
let mut other = JaggedArray::<usize, Vec<u16>, 2>::new();
other.new_row::<0>();
other.extend_last_row_from_slice(&[4,5,6]);
data.append_from_view(other.view::<0,2>([]));
data.append_from_view(other.view::<1,1>([0]));
assert!(data[[0,0,0]] == 1);
assert!(data[[0,0,1]] == 2);
assert!(data[[0,0,2]] == 3);
assert!(data[[0,1,0]] == 4);
assert!(data[[0,1,1]] == 5);
assert!(data[[0,1,2]] == 6);
assert!(data[[0,1,3]] == 4);
assert!(data[[0,1,4]] == 5);
assert!(data[[0,1,5]] == 6);Sourcepub fn append<const M: usize>(&mut self, other: JaggedArray<TVal, TBuffer, M>)
pub fn append<const M: usize>(&mut self, other: JaggedArray<TVal, TBuffer, M>)
§Example
use jaggedarray::jagged_array::JaggedArray;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.extend_last_row_from_slice(&[1,2,3]);
let mut other = JaggedArray::<usize, Vec<u16>, 2>::new();
other.new_row::<0>();
other.extend_last_row_from_slice(&[4,5,6]);
data.append(other);
assert!(data[[0,0]] == 1);
assert!(data[[0,1]] == 2);
assert!(data[[0,2]] == 3);
assert!(data[[1,0]] == 4);
assert!(data[[1,1]] == 5);
assert!(data[[1,2]] == 6);Sourcepub fn remove_last_row<const DIM: usize>(&mut self) -> bool
pub fn remove_last_row<const DIM: usize>(&mut self) -> bool
§Example
use jaggedarray::jagged_array::JaggedArray;
use crate::jaggedarray::jagged_array::JaggedArrayViewTrait;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.extend_last_row_from_slice(&[1,2,3]);
data.remove_last_row::<0>();
assert!(data.is_empty());Sourcepub fn remove_rows(&mut self, range: Range<usize>)
pub fn remove_rows(&mut self, range: Range<usize>)
§Example
use jaggedarray::jagged_array::JaggedArray;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.extend_last_row_from_slice(&[1, 2, 3]);
data.new_row::<0>();
data.extend_last_row_from_slice(&[4, 5, 6]);
data.new_row::<0>();
data.extend_last_row_from_slice(&[7, 8, 9]);
data.remove_rows(1..2);
assert!(data[[0, 0]] == 1);
assert!(data[[0, 1]] == 2);
assert!(data[[0, 2]] == 3);
assert!(data[[1, 0]] == 7);
assert!(data[[1, 1]] == 8);
assert!(data[[1, 2]] == 9);Sourcepub fn truncate<const DIM: usize>(&mut self, row_length: usize) -> bool
pub fn truncate<const DIM: usize>(&mut self, row_length: usize) -> bool
§Example
use jaggedarray::jagged_array::JaggedArray;
use crate::jaggedarray::jagged_array::JaggedArrayViewTrait;
let mut data = JaggedArray::<usize, Vec<u16>, 2>::new();
data.new_row::<0>();
data.extend_last_row_from_slice(&[1,2,3]);
data.truncate::<0>(1);
assert!(data[[0,0]] == 1);Trait Implementations§
Source§impl<TVal: Clone, TBuffer: Clone + VecLike, const N: usize> Clone for JaggedArray<TVal, TBuffer, N>
impl<TVal: Clone, TBuffer: Clone + VecLike, const N: usize> Clone for JaggedArray<TVal, TBuffer, N>
Source§fn clone(&self) -> JaggedArray<TVal, TBuffer, N>
fn clone(&self) -> JaggedArray<TVal, TBuffer, N>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<TVal: Debug, TBuffer: Debug + VecLike, const N: usize> Debug for JaggedArray<TVal, TBuffer, N>
impl<TVal: Debug, TBuffer: Debug + VecLike, const N: usize> Debug for JaggedArray<TVal, TBuffer, N>
Source§impl<TVal: Hash, TBuffer: Hash + VecLike, const N: usize> Hash for JaggedArray<TVal, TBuffer, N>
impl<TVal: Hash, TBuffer: Hash + VecLike, const N: usize> Hash for JaggedArray<TVal, TBuffer, N>
Source§impl<TVal, TBuffer> JaggedArray1DViewTrait<TVal, <TBuffer as VecLike>::TI> for JaggedArray<TVal, TBuffer, 1>
impl<TVal, TBuffer> JaggedArray1DViewTrait<TVal, <TBuffer as VecLike>::TI> for JaggedArray<TVal, TBuffer, 1>
Source§impl<TVal, TBuffer, const N: usize> JaggedArrayMutViewTrait<TVal, <TBuffer as VecLike>::TI, N> for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> JaggedArrayMutViewTrait<TVal, <TBuffer as VecLike>::TI, N> for JaggedArray<TVal, TBuffer, N>
Source§fn view_mut<const M: usize, const R: usize>(
&mut self,
index: [usize; M],
) -> JaggedArrayMutView<'_, TVal, <TBuffer as VecLike>::TI, R>where
U<N>: Sub<U2> + Sub<B1> + Sub<U<M>>,
<U<N> as Sub<U2>>::Output: ArrayLength,
<U<N> as Sub<B1>>::Output: Sub<B1>,
<<U<N> as Sub<B1>>::Output as Sub<B1>>::Output: ArrayLength,
<U<N> as Sub<U<M>>>::Output: IsEqual<U<R>>,
U<R>: Sub<B1>,
<U<R> as Sub<B1>>::Output: ArrayLength,
<<U<N> as Sub<U<M>>>::Output as IsEqual<U<R>>>::Output: NonZero,
Const<N>: ToUInt,
Const<M>: ToUInt,
Const<R>: ToUInt,
fn view_mut<const M: usize, const R: usize>(
&mut self,
index: [usize; M],
) -> JaggedArrayMutView<'_, TVal, <TBuffer as VecLike>::TI, R>where
U<N>: Sub<U2> + Sub<B1> + Sub<U<M>>,
<U<N> as Sub<U2>>::Output: ArrayLength,
<U<N> as Sub<B1>>::Output: Sub<B1>,
<<U<N> as Sub<B1>>::Output as Sub<B1>>::Output: ArrayLength,
<U<N> as Sub<U<M>>>::Output: IsEqual<U<R>>,
U<R>: Sub<B1>,
<U<R> as Sub<B1>>::Output: ArrayLength,
<<U<N> as Sub<U<M>>>::Output as IsEqual<U<R>>>::Output: NonZero,
Const<N>: ToUInt,
Const<M>: ToUInt,
Const<R>: ToUInt,
Rust const generics does not support arithmetic, so we have to specify the view’s dimension(R) as well
Source§impl<TVal, TBuffer, const N: usize> JaggedArrayViewTrait<TVal, <TBuffer as VecLike>::TI, N> for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> JaggedArrayViewTrait<TVal, <TBuffer as VecLike>::TI, N> for JaggedArray<TVal, TBuffer, N>
Source§fn view<const M: usize, const R: usize>(
&self,
index: [usize; M],
) -> JaggedArrayView<'_, TVal, <TBuffer as VecLike>::TI, R>where
U<N>: Sub<U2> + Sub<B1> + Sub<U<M>>,
<U<N> as Sub<U2>>::Output: ArrayLength,
<U<N> as Sub<B1>>::Output: Sub<B1>,
<<U<N> as Sub<B1>>::Output as Sub<B1>>::Output: ArrayLength,
<U<N> as Sub<U<M>>>::Output: IsEqual<U<R>>,
U<R>: Sub<B1>,
<U<R> as Sub<B1>>::Output: ArrayLength,
<<U<N> as Sub<U<M>>>::Output as IsEqual<U<R>>>::Output: NonZero,
Const<N>: ToUInt,
Const<M>: ToUInt,
Const<R>: ToUInt,
fn view<const M: usize, const R: usize>(
&self,
index: [usize; M],
) -> JaggedArrayView<'_, TVal, <TBuffer as VecLike>::TI, R>where
U<N>: Sub<U2> + Sub<B1> + Sub<U<M>>,
<U<N> as Sub<U2>>::Output: ArrayLength,
<U<N> as Sub<B1>>::Output: Sub<B1>,
<<U<N> as Sub<B1>>::Output as Sub<B1>>::Output: ArrayLength,
<U<N> as Sub<U<M>>>::Output: IsEqual<U<R>>,
U<R>: Sub<B1>,
<U<R> as Sub<B1>>::Output: ArrayLength,
<<U<N> as Sub<U<M>>>::Output as IsEqual<U<R>>>::Output: NonZero,
Const<N>: ToUInt,
Const<M>: ToUInt,
Const<R>: ToUInt,
Rust const generics does not support arithmetic, so we have to specify the view’s dimension(R) as well
Source§unsafe fn view_unchecked<const M: usize, const R: usize>(
&self,
index: [usize; M],
) -> JaggedArrayView<'_, TVal, <TBuffer as VecLike>::TI, R>where
U<N>: Sub<U2> + Sub<B1> + Sub<U<M>>,
<U<N> as Sub<U2>>::Output: ArrayLength,
<U<N> as Sub<B1>>::Output: Sub<B1>,
<<U<N> as Sub<B1>>::Output as Sub<B1>>::Output: ArrayLength,
<U<N> as Sub<U<M>>>::Output: IsEqual<U<R>>,
U<R>: Sub<B1>,
<U<R> as Sub<B1>>::Output: ArrayLength,
<<U<N> as Sub<U<M>>>::Output as IsEqual<U<R>>>::Output: NonZero,
Const<N>: ToUInt,
Const<M>: ToUInt,
Const<R>: ToUInt,
unsafe fn view_unchecked<const M: usize, const R: usize>(
&self,
index: [usize; M],
) -> JaggedArrayView<'_, TVal, <TBuffer as VecLike>::TI, R>where
U<N>: Sub<U2> + Sub<B1> + Sub<U<M>>,
<U<N> as Sub<U2>>::Output: ArrayLength,
<U<N> as Sub<B1>>::Output: Sub<B1>,
<<U<N> as Sub<B1>>::Output as Sub<B1>>::Output: ArrayLength,
<U<N> as Sub<U<M>>>::Output: IsEqual<U<R>>,
U<R>: Sub<B1>,
<U<R> as Sub<B1>>::Output: ArrayLength,
<<U<N> as Sub<U<M>>>::Output as IsEqual<U<R>>>::Output: NonZero,
Const<N>: ToUInt,
Const<M>: ToUInt,
Const<R>: ToUInt,
Rust const generics does not support arithmetic, so we have to specify the view’s dimension(R) as well
fn len(&self) -> usize
fn is_empty(&self) -> bool
fn get(&self, index: [usize; N]) -> Option<&TVal>
fn to_owned(self) -> JaggedArrayOwnedView<TVal, <TBuffer as VecLike>::TI, N>where
TVal: Clone,
Source§impl<TVal: PartialEq, TBuffer: PartialEq + VecLike, const N: usize> PartialEq for JaggedArray<TVal, TBuffer, N>
impl<TVal: PartialEq, TBuffer: PartialEq + VecLike, const N: usize> PartialEq for JaggedArray<TVal, TBuffer, N>
Source§fn eq(&self, other: &JaggedArray<TVal, TBuffer, N>) -> bool
fn eq(&self, other: &JaggedArray<TVal, TBuffer, N>) -> bool
Tests for
self and other values to be equal, and is used by ==.impl<TVal: Eq, TBuffer: Eq + VecLike, const N: usize> Eq for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer: VecLike, const N: usize> StructuralPartialEq for JaggedArray<TVal, TBuffer, N>
Auto Trait Implementations§
impl<TVal, TBuffer, const N: usize> !Freeze for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> !RefUnwindSafe for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> Send for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> Sync for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> !Unpin for JaggedArray<TVal, TBuffer, N>
impl<TVal, TBuffer, const N: usize> !UnwindSafe for JaggedArray<TVal, TBuffer, N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more