Skip to main content

Index

Trait Index 

1.0.0 (const: unstable) · Source
pub trait Index<Idx>
where Idx: ?Sized,
{ type Output: ?Sized; // Required method fn index(&self, index: Idx) -> &Self::Output; }
Expand description

Used for indexing operations (container[index]) in immutable contexts.

container[index] is actually syntactic sugar for *container.index(index), but only when used as an immutable value. If a mutable value is requested, IndexMut is used instead. This allows nice things such as let value = v[index] if the type of value implements Copy.

§Examples

The following example implements Index on a read-only NucleotideCount container, enabling individual counts to be retrieved with index syntax.

use std::ops::Index;

enum Nucleotide {
    A,
    C,
    G,
    T,
}

struct NucleotideCount {
    a: usize,
    c: usize,
    g: usize,
    t: usize,
}

impl Index<Nucleotide> for NucleotideCount {
    type Output = usize;

    fn index(&self, nucleotide: Nucleotide) -> &Self::Output {
        match nucleotide {
            Nucleotide::A => &self.a,
            Nucleotide::C => &self.c,
            Nucleotide::G => &self.g,
            Nucleotide::T => &self.t,
        }
    }
}

let nucleotide_count = NucleotideCount {a: 14, c: 9, g: 10, t: 12};
assert_eq!(nucleotide_count[Nucleotide::A], 14);
assert_eq!(nucleotide_count[Nucleotide::C], 9);
assert_eq!(nucleotide_count[Nucleotide::G], 10);
assert_eq!(nucleotide_count[Nucleotide::T], 12);

Required Associated Types§

1.0.0 (const: unstable) · Source

type Output: ?Sized

The returned type after indexing.

Required Methods§

1.0.0 (const: unstable) · Source

fn index(&self, index: Idx) -> &Self::Output

Performs the indexing (container[index]) operation.

§Panics

May panic if the index is out of bounds.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl Index<usize> for ByteString

Source§

impl Index<usize> for CStringArray

1.96.0 · Source§

impl Index<RangeFrom<usize>> for CStr

Source§

impl Index<Range<usize>> for Wtf8

Returns a slice of the given string for the byte range [begin..end).

§Panics

Panics when begin and end do not point to code point boundaries, or point beyond the end of the string.

Source§

impl Index<Range<usize>> for ByteString

Source§

impl Index<RangeFrom<usize>> for Wtf8

Returns a slice of the given string from byte begin to its end.

§Panics

Panics when begin is not at a code point boundary, or is beyond the end of the string.

Source§

impl Index<RangeFrom<usize>> for ByteString

1.47.0 · Source§

impl Index<RangeFrom<usize>> for CStr

Source§

impl Index<RangeFull> for Wtf8

Source§

impl Index<RangeFull> for ByteString

1.7.0 · Source§

impl Index<RangeFull> for CString

1.0.0 · Source§

impl Index<RangeFull> for OsString

Source§

impl Index<RangeInclusive<usize>> for ByteString

Source§

impl Index<RangeTo<usize>> for Wtf8

Returns a slice of the given string from its beginning to byte end.

§Panics

Panics when end is not at a code point boundary, or is beyond the end of the string.

Source§

impl Index<RangeTo<usize>> for ByteString

Source§

impl Index<RangeToInclusive<usize>> for ByteString

1.0.0 (const: unstable) · Source§

impl<I> Index<I> for str
where I: SliceIndex<str>,

Source§

impl<I> Index<I> for ByteStr
where I: SliceIndex<ByteStr>,

1.0.0 · Source§

impl<I> Index<I> for String
where I: SliceIndex<str>,

Source§

impl<I, T, const N: usize> Index<I> for Simd<T, N>
where T: SimdElement, I: SliceIndex<[T]>,

1.0.0 · Source§

impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
where A: Allocator + Clone, K: Borrow<Q> + Ord, Q: Ord + ?Sized,

1.0.0 · Source§

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher, A: Allocator,

1.0.0 · Source§

impl<T, A> Index<usize> for VecDeque<T, A>
where A: Allocator,

1.0.0 (const: unstable) · Source§

impl<T, I> Index<I> for [T]
where I: SliceIndex<[T]>,

1.0.0 (const: unstable) · Source§

impl<T, I, A> Index<I> for Vec<T, A>
where I: SliceIndex<[T]>, A: Allocator,

1.50.0 (const: unstable) · Source§

impl<T, I, const N: usize> Index<I> for [T; N]
where [T]: Index<I>,

Source§

type Output = <[T] as Index<I>>::Output