pub struct SliceRef<'a, T>where
T: 'a + Soars,{ /* private fields */ }
Expand description
Methods from Deref<Target = Slice<T>>§
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the slice, also referred to as its length.
§Examples
let soa = soa![Foo(1), Foo(2), Foo(3)];
assert_eq!(soa.len(), 3);
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the slice contains no elements.
§Examples
let mut soa = Soa::<Foo>::new();
assert!(soa.is_empty());
soa.push(Foo(1));
assert!(!soa.is_empty());
sourcepub fn iter(&self) -> Iter<'_, T> ⓘ
pub fn iter(&self) -> Iter<'_, T> ⓘ
Returns an iterator over the elements.
The iterator yields all items from start to end.
§Examples
let soa = soa![Foo(1), Foo(2), Foo(4)];
let mut iter = soa.iter();
assert_eq!(iter.next().unwrap(), Foo(1));
assert_eq!(iter.next().unwrap(), Foo(2));
assert_eq!(iter.next().unwrap(), Foo(4));
assert_eq!(iter.next(), None);
sourcepub fn get<I>(&self, index: I) -> Option<I::Output<'_>>where
I: SoaIndex<T>,
pub fn get<I>(&self, index: I) -> Option<I::Output<'_>>where
I: SoaIndex<T>,
Returns a reference to an element or subslice depending on the type of index.
-
If given a position, returns a reference to the element at that position or None if out of bounds.
-
If given a range, returns the subslice corresponding to that range, or None if out of bounds.
§Examples
let soa = soa![Foo(10), Foo(40), Foo(30), Foo(20)];
assert_eq!(soa.get(1).unwrap(), Foo(40));
assert_eq!(soa.get(4), None);
assert_eq!(soa.get(..).unwrap(), [Foo(10), Foo(40), Foo(30), Foo(20)]);
assert_eq!(soa.get(..2).unwrap(), [Foo(10), Foo(40)]);
assert_eq!(soa.get(..=2).unwrap(), [Foo(10), Foo(40), Foo(30)]);
assert_eq!(soa.get(2..).unwrap(), [Foo(30), Foo(20)]);
assert_eq!(soa.get(1..3).unwrap(), [Foo(40), Foo(30)]);
assert_eq!(soa.get(1..=3).unwrap(), [Foo(40), Foo(30), Foo(20)]);
assert_eq!(soa.get(2..5), None);
sourcepub fn idx<I>(&self, index: I) -> I::Output<'_>where
I: SoaIndex<T>,
pub fn idx<I>(&self, index: I) -> I::Output<'_>where
I: SoaIndex<T>,
Returns a reference to the element at the given index.
This is similar to Index
, which is not implementable for this type.
See get
for a non-panicking version.
§Panics
Panics if the index is out-of-bounds, which is whenever
SoaIndex::get
returns None
.
§Examples
let soa = soa![Foo(10), Foo(40), Foo(30), Foo(90)];
assert_eq!(soa.idx(3), Foo(90));
assert_eq!(soa.idx(1..3), [Foo(40), Foo(30)]);
sourcepub fn first(&self) -> Option<T::Ref<'_>>
pub fn first(&self) -> Option<T::Ref<'_>>
Returns the first element of the slice, or None if empty.
§Examples
let soa = soa![Foo(10), Foo(40), Foo(30)];
assert_eq!(soa.first().unwrap(), Foo(10));
let soa = Soa::<Foo>::new();
assert_eq!(soa.first(), None);
sourcepub fn last(&self) -> Option<T::Ref<'_>>
pub fn last(&self) -> Option<T::Ref<'_>>
Returns the last element of the slice, or None if empty.
§Examples
let soa = soa![Foo(10), Foo(40), Foo(30)];
assert_eq!(soa.last().unwrap(), Foo(30));
let soa = Soa::<Foo>::new();
assert_eq!(soa.last(), None);
sourcepub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> ⓘ
pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> ⓘ
Returns an iterator over chunk_size
elements of the slice at a time,
starting at the beginning of the slice.
The chunks are slices and do not overlap. If chunk_size
does not divide
the length of the slice, then the last up to chunk_size-1
elements will
be omitted and can be retrieved from the remainder
function of the
iterator.
Due to each chunk having exactly chunk_size
elements, the compiler can
often optimize the resulting code better than in the case of chunks.
§Examples
let soa = soa![Foo('l'), Foo('o'), Foo('r'), Foo('e'), Foo('m')];
let mut iter = soa.chunks_exact(2);
assert_eq!(iter.next().unwrap(), [Foo('l'), Foo('o')]);
assert_eq!(iter.next().unwrap(), [Foo('r'), Foo('e')]);
assert!(iter.next().is_none());
assert_eq!(iter.remainder(), [Foo('m')]);
sourcepub fn slices(&self) -> T::Slices<'_>
pub fn slices(&self) -> T::Slices<'_>
Returns a collection of slices for each field of the slice.
For convenience, slices can also be aquired using the getter methods for individual fields.
§Examples
let soa = soa![Foo { foo: 1, bar: 2 }, Foo { foo: 3, bar: 4 }];
let slices = soa.slices();
assert_eq!(slices.foo, soa.foo());
assert_eq!(slices.bar, soa.bar());
Trait Implementations§
source§impl<'a, T> IntoIterator for SliceRef<'a, T>where
T: Soars,
impl<'a, T> IntoIterator for SliceRef<'a, T>where
T: Soars,
source§impl<'a, T> Ord for SliceRef<'a, T>
impl<'a, T> Ord for SliceRef<'a, T>
source§impl<T> PartialEq<&[T]> for SliceRef<'_, T>
impl<T> PartialEq<&[T]> for SliceRef<'_, T>
source§impl<T, const N: usize> PartialEq<&[T; N]> for SliceRef<'_, T>
impl<T, const N: usize> PartialEq<&[T; N]> for SliceRef<'_, T>
source§impl<T> PartialEq<&mut [T]> for SliceRef<'_, T>
impl<T> PartialEq<&mut [T]> for SliceRef<'_, T>
source§impl<T, const N: usize> PartialEq<&mut [T; N]> for SliceRef<'_, T>
impl<T, const N: usize> PartialEq<&mut [T; N]> for SliceRef<'_, T>
source§impl<T, const N: usize> PartialEq<[T; N]> for SliceRef<'_, T>
impl<T, const N: usize> PartialEq<[T; N]> for SliceRef<'_, T>
source§impl<T> PartialEq<Slice<T>> for SliceRef<'_, T>
impl<T> PartialEq<Slice<T>> for SliceRef<'_, T>
source§impl<T> PartialEq<SliceMut<'_, T>> for SliceRef<'_, T>
impl<T> PartialEq<SliceMut<'_, T>> for SliceRef<'_, T>
source§impl<T> PartialEq<SliceRef<'_, T>> for &[T]
impl<T> PartialEq<SliceRef<'_, T>> for &[T]
source§impl<T, const N: usize> PartialEq<SliceRef<'_, T>> for &[T; N]
impl<T, const N: usize> PartialEq<SliceRef<'_, T>> for &[T; N]
source§impl<T> PartialEq<SliceRef<'_, T>> for &Slice<T>
impl<T> PartialEq<SliceRef<'_, T>> for &Slice<T>
source§impl<T> PartialEq<SliceRef<'_, T>> for &mut [T]
impl<T> PartialEq<SliceRef<'_, T>> for &mut [T]
source§impl<T, const N: usize> PartialEq<SliceRef<'_, T>> for &mut [T; N]
impl<T, const N: usize> PartialEq<SliceRef<'_, T>> for &mut [T; N]
source§impl<T> PartialEq<SliceRef<'_, T>> for &mut Slice<T>
impl<T> PartialEq<SliceRef<'_, T>> for &mut Slice<T>
source§impl<T> PartialEq<SliceRef<'_, T>> for [T]
impl<T> PartialEq<SliceRef<'_, T>> for [T]
source§impl<T, const N: usize> PartialEq<SliceRef<'_, T>> for [T; N]
impl<T, const N: usize> PartialEq<SliceRef<'_, T>> for [T; N]
source§impl<T> PartialEq<SliceRef<'_, T>> for Slice<T>
impl<T> PartialEq<SliceRef<'_, T>> for Slice<T>
source§impl<T> PartialEq<SliceRef<'_, T>> for SliceMut<'_, T>
impl<T> PartialEq<SliceRef<'_, T>> for SliceMut<'_, T>
source§impl<T> PartialEq<SliceRef<'_, T>> for SliceRef<'_, T>
impl<T> PartialEq<SliceRef<'_, T>> for SliceRef<'_, T>
source§impl<T> PartialEq<SliceRef<'_, T>> for Soa<T>
impl<T> PartialEq<SliceRef<'_, T>> for Soa<T>
source§impl<T> PartialEq<SliceRef<'_, T>> for Vec<T>
impl<T> PartialEq<SliceRef<'_, T>> for Vec<T>
source§impl<T> PartialEq<Soa<T>> for SliceRef<'_, T>
impl<T> PartialEq<Soa<T>> for SliceRef<'_, T>
source§impl<T> PartialEq<Vec<T>> for SliceRef<'_, T>
impl<T> PartialEq<Vec<T>> for SliceRef<'_, T>
source§impl<'a, T> PartialOrd for SliceRef<'a, T>
impl<'a, T> PartialOrd for SliceRef<'a, T>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more