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§

source

type Output: ?Sized

The returned type after indexing.

Required Methods§

source

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

Performs the indexing (container[index]) operation.

§Panics

May panic if the index is out of bounds.

Implementors§

source§

impl Index<usize> for Scalar

§

type Output = u8

§

impl Index<usize> for KeyPair

§

type Output = u8

§

impl Index<usize> for Message

§

type Output = u8

§

impl Index<usize> for PublicKey

§

type Output = u8

§

impl Index<usize> for RecoverableSignature

§

type Output = u8

§

impl Index<usize> for SecretKey

§

type Output = u8

§

impl Index<usize> for Signature

§

type Output = u8

§

impl Index<usize> for Signature

§

type Output = u8

§

impl Index<usize> for XOnlyPublicKey

§

type Output = u8

source§

impl Index<Range<usize>> for String

§

type Output = str

§

impl Index<Range<usize>> for KeyPair

§

type Output = [u8]

§

impl Index<Range<usize>> for Message

§

type Output = [u8]

§

impl Index<Range<usize>> for PublicKey

§

type Output = [u8]

§

impl Index<Range<usize>> for RecoverableSignature

§

type Output = [u8]

§

impl Index<Range<usize>> for SecretKey

§

type Output = [u8]

§

impl Index<Range<usize>> for Signature

§

type Output = [u8]

§

impl Index<Range<usize>> for Signature

§

type Output = [u8]

§

impl Index<Range<usize>> for XOnlyPublicKey

§

type Output = [u8]

source§

impl Index<RangeFrom<usize>> for String

§

type Output = str

1.47.0 · source§

impl Index<RangeFrom<usize>> for CStr

§

type Output = CStr

§

impl Index<RangeFrom<usize>> for KeyPair

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for Message

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for PublicKey

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for RecoverableSignature

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for SecretKey

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for Signature

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for Signature

§

type Output = [u8]

§

impl Index<RangeFrom<usize>> for XOnlyPublicKey

§

type Output = [u8]

source§

impl Index<RangeFull> for String

§

type Output = str

1.7.0 · source§

impl Index<RangeFull> for CString

§

type Output = CStr

source§

impl Index<RangeFull> for OsString

§

impl Index<RangeFull> for KeyPair

§

type Output = [u8]

§

impl Index<RangeFull> for Message

§

type Output = [u8]

§

impl Index<RangeFull> for PublicKey

§

type Output = [u8]

§

impl Index<RangeFull> for RecoverableSignature

§

type Output = [u8]

§

impl Index<RangeFull> for SecretKey

§

type Output = [u8]

§

impl Index<RangeFull> for Signature

§

type Output = [u8]

§

impl Index<RangeFull> for Signature

§

type Output = [u8]

§

impl Index<RangeFull> for XOnlyPublicKey

§

type Output = [u8]

1.26.0 · source§

impl Index<RangeInclusive<usize>> for String

§

type Output = str

source§

impl Index<RangeTo<usize>> for String

§

type Output = str

§

impl Index<RangeTo<usize>> for KeyPair

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for Message

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for PublicKey

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for RecoverableSignature

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for SecretKey

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for Signature

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for Signature

§

type Output = [u8]

§

impl Index<RangeTo<usize>> for XOnlyPublicKey

§

type Output = [u8]

1.26.0 · source§

impl Index<RangeToInclusive<usize>> for String

§

type Output = str

§

impl Index<Span> for str

§

type Output = str

§

impl Index<Span> for [u8]

§

type Output = [u8]

§

impl<'h> Index<usize> for Captures<'h>

Get a matching capture group’s haystack substring by index.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use [Captures::get] instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

§Panics

If there is no matching group at the given index.

§

type Output = str

§

impl<'h> Index<usize> for Captures<'h>

Get a matching capture group’s haystack substring by index.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use [Captures::get] instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

§Panics

If there is no matching group at the given index.

§

type Output = [u8]

§

impl<'h, 'n> Index<&'n str> for Captures<'h>

Get a matching capture group’s haystack substring by name.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use [Captures::get] instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

'n is the lifetime of the group name used to index the Captures value.

§Panics

If there is no matching group at the given name.

§

type Output = str

§

impl<'h, 'n> Index<&'n str> for Captures<'h>

Get a matching capture group’s haystack substring by name.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use [Captures::get] instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

'n is the lifetime of the group name used to index the Captures value.

§Panics

If there is no matching group at the given name.

§

type Output = [u8]

source§

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

§

type Output = <I as SliceIndex<str>>::Output

§

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

§

type Output = <I as SliceIndex<[blst_p1_affine]>>::Output

§

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

§

type Output = <I as SliceIndex<[blst_p2_affine]>>::Output

source§

impl<I, T, const N: usize> Index<I> for Simd<T, N>

§

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

source§

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

§

type Output = V

source§

impl<K, Q, V, S> Index<&Q> for scrypto::prelude::radix_engine_common::prelude::hash_map::ext_HashMap<K, V, S>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher,

§

type Output = V

§

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

§

type Output = V

source§

impl<K, V> Index<(Bound<usize>, Bound<usize>)> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V> Index<usize> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = V

source§

impl<K, V> Index<Range<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V> Index<RangeFrom<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V> Index<RangeFull> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V> Index<RangeInclusive<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V> Index<RangeTo<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V> Index<RangeToInclusive<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::map::Slice<K, V>

§

type Output = Slice<K, V>

source§

impl<K, V, Q, S> Index<&Q> for IndexMap<K, V, S>
where Q: Hash + Equivalent<K> + ?Sized, K: Hash + Eq, S: BuildHasher,

Access IndexMap values corresponding to a key.

§Examples

use indexmap::IndexMap;

let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map["lorem"], "LOREM");
assert_eq!(map["ipsum"], "IPSUM");
use indexmap::IndexMap;

let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map["bar"]); // panics!
§

type Output = V

source§

impl<K, V, S> Index<(Bound<usize>, Bound<usize>)> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<K, V, S> Index<usize> for IndexMap<K, V, S>

Access IndexMap values at indexed positions.

§Examples

use indexmap::IndexMap;

let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map[0], "LOREM");
assert_eq!(map[1], "IPSUM");
map.reverse();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "SIT");
map.sort_keys();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "DOLOR");
use indexmap::IndexMap;

let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map[10]); // panics!
§

type Output = V

source§

impl<K, V, S> Index<Range<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<K, V, S> Index<RangeFrom<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<K, V, S> Index<RangeFull> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<K, V, S> Index<RangeInclusive<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<K, V, S> Index<RangeTo<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<K, V, S> Index<RangeToInclusive<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

source§

impl<T> Index<(Bound<usize>, Bound<usize>)> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

source§

impl<T> Index<usize> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = T

source§

impl<T> Index<Range<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

source§

impl<T> Index<RangeFrom<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

source§

impl<T> Index<RangeFull> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

source§

impl<T> Index<RangeInclusive<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

source§

impl<T> Index<RangeTo<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

source§

impl<T> Index<RangeToInclusive<usize>> for scrypto::prelude::radix_engine_common::prelude::indexmap::set::Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<PatternID> for [T]

§

type Output = T

§

impl<T> Index<PatternID> for Vec<T>

§

type Output = T

§

impl<T> Index<SmallIndex> for [T]

§

type Output = T

§

impl<T> Index<SmallIndex> for Vec<T>

§

type Output = T

§

impl<T> Index<StateID> for [T]

§

type Output = T

§

impl<T> Index<StateID> for Vec<T>

§

type Output = T

source§

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

§

type Output = T

source§

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

§

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

source§

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

§

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

1.50.0 · source§

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

§

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

source§

impl<T, S> Index<(Bound<usize>, Bound<usize>)> for IndexSet<T, S>

§

type Output = Slice<T>

source§

impl<T, S> Index<usize> for IndexSet<T, S>

Access IndexSet values at indexed positions.

§Examples

use indexmap::IndexSet;

let mut set = IndexSet::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    set.insert(word.to_string());
}
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "ipsum");
set.reverse();
assert_eq!(set[0], "amet");
assert_eq!(set[1], "sit");
set.sort();
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "amet");
use indexmap::IndexSet;

let mut set = IndexSet::new();
set.insert("foo");
println!("{:?}", set[10]); // panics!
§

type Output = T

source§

impl<T, S> Index<Range<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

source§

impl<T, S> Index<RangeFrom<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

source§

impl<T, S> Index<RangeFull> for IndexSet<T, S>

§

type Output = Slice<T>

source§

impl<T, S> Index<RangeInclusive<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

source§

impl<T, S> Index<RangeTo<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

source§

impl<T, S> Index<RangeToInclusive<usize>> for IndexSet<T, S>

§

type Output = Slice<T>