[][src]Struct gimli::read::EndianSlice

pub struct EndianSlice<'input, Endian> where
    Endian: Endianity
{ /* fields omitted */ }

A &[u8] slice with endianity metadata.

This implements the Reader trait, which is used for all reading of DWARF sections.

Methods

impl<'input, Endian> EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

pub fn new(slice: &'input [u8], endian: Endian) -> EndianSlice<'input, Endian>[src]

Construct a new EndianSlice with the given slice and endianity.

Important traits for &'_ [u8]
pub fn slice(&self) -> &'input [u8][src]

Return a reference to the raw slice.

pub fn split_at(
    &self,
    idx: usize
) -> (EndianSlice<'input, Endian>, EndianSlice<'input, Endian>)
[src]

Split the slice in two at the given index, resulting in the tuple where the first item has range [0, idx), and the second has range [idx, len). Panics if the index is out of bounds.

pub fn find(&self, byte: u8) -> Option<usize>[src]

Find the first occurence of a byte in the slice, and return its index.

pub fn offset_from(&self, base: EndianSlice<'input, Endian>) -> usize[src]

Return the offset of the start of the slice relative to the start of the given slice.

pub fn to_string(&self) -> Result<&'input str>[src]

Converts the slice to a string using str::from_utf8.

Returns an error if the slice contains invalid characters.

pub fn to_string_lossy(&self) -> Cow<'input, str>[src]

Converts the slice to a string, including invalid characters, using String::from_utf8_lossy.

impl<'input, Endian> EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

Range Methods

Unfortunately, std::ops::Index must return a reference, so we can't implement Index<Range<usize>> to return a new EndianSlice the way we would like to. Instead, we abandon fancy indexing operators and have these plain old methods.

pub fn range(&self, idx: Range<usize>) -> EndianSlice<'input, Endian>[src]

Take the given start..end range of the underlying slice and return a new EndianSlice.

use gimli::{EndianSlice, LittleEndian};

let slice = &[0x01, 0x02, 0x03, 0x04];
let endian_slice = EndianSlice::new(slice, LittleEndian);
assert_eq!(endian_slice.range(1..3),
           EndianSlice::new(&slice[1..3], LittleEndian));

pub fn range_from(&self, idx: RangeFrom<usize>) -> EndianSlice<'input, Endian>[src]

Take the given start.. range of the underlying slice and return a new EndianSlice.

use gimli::{EndianSlice, LittleEndian};

let slice = &[0x01, 0x02, 0x03, 0x04];
let endian_slice = EndianSlice::new(slice, LittleEndian);
assert_eq!(endian_slice.range_from(2..),
           EndianSlice::new(&slice[2..], LittleEndian));

pub fn range_to(&self, idx: RangeTo<usize>) -> EndianSlice<'input, Endian>[src]

Take the given ..end range of the underlying slice and return a new EndianSlice.

use gimli::{EndianSlice, LittleEndian};

let slice = &[0x01, 0x02, 0x03, 0x04];
let endian_slice = EndianSlice::new(slice, LittleEndian);
assert_eq!(endian_slice.range_to(..3),
           EndianSlice::new(&slice[..3], LittleEndian));

Methods from Deref<Target = [u8]>

pub const fn len(&self) -> usize1.0.0[src]

Returns the number of elements in the slice.

Examples

let a = [1, 2, 3];
assert_eq!(a.len(), 3);

pub const fn is_empty(&self) -> bool1.0.0[src]

Returns true if the slice has a length of 0.

Examples

let a = [1, 2, 3];
assert!(!a.is_empty());

pub fn first(&self) -> Option<&T>1.0.0[src]

Returns the first element of the slice, or None if it is empty.

Examples

let v = [10, 40, 30];
assert_eq!(Some(&10), v.first());

let w: &[i32] = &[];
assert_eq!(None, w.first());

pub fn split_first(&self) -> Option<(&T, &[T])>1.5.0[src]

Returns the first and all the rest of the elements of the slice, or None if it is empty.

Examples

let x = &[0, 1, 2];

if let Some((first, elements)) = x.split_first() {
    assert_eq!(first, &0);
    assert_eq!(elements, &[1, 2]);
}

pub fn split_last(&self) -> Option<(&T, &[T])>1.5.0[src]

Returns the last and all the rest of the elements of the slice, or None if it is empty.

Examples

let x = &[0, 1, 2];

if let Some((last, elements)) = x.split_last() {
    assert_eq!(last, &2);
    assert_eq!(elements, &[0, 1]);
}

pub fn last(&self) -> Option<&T>1.0.0[src]

Returns the last element of the slice, or None if it is empty.

Examples

let v = [10, 40, 30];
assert_eq!(Some(&30), v.last());

let w: &[i32] = &[];
assert_eq!(None, w.last());

pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output> where
    I: SliceIndex<[T]>, 
1.0.0[src]

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 v = [10, 40, 30];
assert_eq!(Some(&40), v.get(1));
assert_eq!(Some(&[10, 40][..]), v.get(0..2));
assert_eq!(None, v.get(3));
assert_eq!(None, v.get(0..4));

pub unsafe fn get_unchecked<I>(
    &self,
    index: I
) -> &<I as SliceIndex<[T]>>::Output where
    I: SliceIndex<[T]>, 
1.0.0[src]

Returns a reference to an element or subslice, without doing bounds checking.

This is generally not recommended, use with caution! For a safe alternative see get.

Examples

let x = &[1, 2, 4];

unsafe {
    assert_eq!(x.get_unchecked(1), &2);
}

pub const fn as_ptr(&self) -> *const T1.0.0[src]

Returns a raw pointer to the slice's buffer.

The caller must ensure that the slice outlives the pointer this function returns, or else it will end up pointing to garbage.

The caller must also ensure that the memory the pointer (non-transitively) points to is never written to (except inside an UnsafeCell) using this pointer or any pointer derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

Modifying the container referenced by this slice may cause its buffer to be reallocated, which would also make any pointers to it invalid.

Examples

let x = &[1, 2, 4];
let x_ptr = x.as_ptr();

unsafe {
    for i in 0..x.len() {
        assert_eq!(x.get_unchecked(i), &*x_ptr.add(i));
    }
}

pub fn iter(&self) -> Iter<T>1.0.0[src]

Returns an iterator over the slice.

Examples

let x = &[1, 2, 4];
let mut iterator = x.iter();

assert_eq!(iterator.next(), Some(&1));
assert_eq!(iterator.next(), Some(&2));
assert_eq!(iterator.next(), Some(&4));
assert_eq!(iterator.next(), None);

pub fn windows(&self, size: usize) -> Windows<T>1.0.0[src]

Returns an iterator over all contiguous windows of length size. The windows overlap. If the slice is shorter than size, the iterator returns no values.

Panics

Panics if size is 0.

Examples

let slice = ['r', 'u', 's', 't'];
let mut iter = slice.windows(2);
assert_eq!(iter.next().unwrap(), &['r', 'u']);
assert_eq!(iter.next().unwrap(), &['u', 's']);
assert_eq!(iter.next().unwrap(), &['s', 't']);
assert!(iter.next().is_none());

If the slice is shorter than size:

let slice = ['f', 'o', 'o'];
let mut iter = slice.windows(4);
assert!(iter.next().is_none());

pub fn chunks(&self, chunk_size: usize) -> Chunks<T>1.0.0[src]

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 chunk will not have length chunk_size.

See chunks_exact for a variant of this iterator that returns chunks of always exactly chunk_size elements, and rchunks for the same iterator but starting at the end of the slice of the slice.

Panics

Panics if chunk_size is 0.

Examples

let slice = ['l', 'o', 'r', 'e', 'm'];
let mut iter = slice.chunks(2);
assert_eq!(iter.next().unwrap(), &['l', 'o']);
assert_eq!(iter.next().unwrap(), &['r', 'e']);
assert_eq!(iter.next().unwrap(), &['m']);
assert!(iter.next().is_none());

pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<T>1.31.0[src]

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.

See chunks for a variant of this iterator that also returns the remainder as a smaller chunk, and rchunks_exact for the same iterator but starting at the end of the slice.

Panics

Panics if chunk_size is 0.

Examples

let slice = ['l', 'o', 'r', 'e', 'm'];
let mut iter = slice.chunks_exact(2);
assert_eq!(iter.next().unwrap(), &['l', 'o']);
assert_eq!(iter.next().unwrap(), &['r', 'e']);
assert!(iter.next().is_none());
assert_eq!(iter.remainder(), &['m']);

pub fn rchunks(&self, chunk_size: usize) -> RChunks<T>1.31.0[src]

Returns an iterator over chunk_size elements of the slice at a time, starting at the end 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 chunk will not have length chunk_size.

See rchunks_exact for a variant of this iterator that returns chunks of always exactly chunk_size elements, and chunks for the same iterator but starting at the beginning of the slice.

Panics

Panics if chunk_size is 0.

Examples

let slice = ['l', 'o', 'r', 'e', 'm'];
let mut iter = slice.rchunks(2);
assert_eq!(iter.next().unwrap(), &['e', 'm']);
assert_eq!(iter.next().unwrap(), &['o', 'r']);
assert_eq!(iter.next().unwrap(), &['l']);
assert!(iter.next().is_none());

pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<T>1.31.0[src]

Returns an iterator over chunk_size elements of the slice at a time, starting at the end 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.

See rchunks for a variant of this iterator that also returns the remainder as a smaller chunk, and chunks_exact for the same iterator but starting at the beginning of the slice.

Panics

Panics if chunk_size is 0.

Examples

let slice = ['l', 'o', 'r', 'e', 'm'];
let mut iter = slice.rchunks_exact(2);
assert_eq!(iter.next().unwrap(), &['e', 'm']);
assert_eq!(iter.next().unwrap(), &['o', 'r']);
assert!(iter.next().is_none());
assert_eq!(iter.remainder(), &['l']);

pub fn split_at(&self, mid: usize) -> (&[T], &[T])1.0.0[src]

Divides one slice into two at an index.

The first will contain all indices from [0, mid) (excluding the index mid itself) and the second will contain all indices from [mid, len) (excluding the index len itself).

Panics

Panics if mid > len.

Examples

let v = [1, 2, 3, 4, 5, 6];

{
   let (left, right) = v.split_at(0);
   assert!(left == []);
   assert!(right == [1, 2, 3, 4, 5, 6]);
}

{
    let (left, right) = v.split_at(2);
    assert!(left == [1, 2]);
    assert!(right == [3, 4, 5, 6]);
}

{
    let (left, right) = v.split_at(6);
    assert!(left == [1, 2, 3, 4, 5, 6]);
    assert!(right == []);
}

pub fn split<F>(&self, pred: F) -> Split<T, F> where
    F: FnMut(&T) -> bool
1.0.0[src]

Returns an iterator over subslices separated by elements that match pred. The matched element is not contained in the subslices.

Examples

let slice = [10, 40, 33, 20];
let mut iter = slice.split(|num| num % 3 == 0);

assert_eq!(iter.next().unwrap(), &[10, 40]);
assert_eq!(iter.next().unwrap(), &[20]);
assert!(iter.next().is_none());

If the first element is matched, an empty slice will be the first item returned by the iterator. Similarly, if the last element in the slice is matched, an empty slice will be the last item returned by the iterator:

let slice = [10, 40, 33];
let mut iter = slice.split(|num| num % 3 == 0);

assert_eq!(iter.next().unwrap(), &[10, 40]);
assert_eq!(iter.next().unwrap(), &[]);
assert!(iter.next().is_none());

If two matched elements are directly adjacent, an empty slice will be present between them:

let slice = [10, 6, 33, 20];
let mut iter = slice.split(|num| num % 3 == 0);

assert_eq!(iter.next().unwrap(), &[10]);
assert_eq!(iter.next().unwrap(), &[]);
assert_eq!(iter.next().unwrap(), &[20]);
assert!(iter.next().is_none());

pub fn rsplit<F>(&self, pred: F) -> RSplit<T, F> where
    F: FnMut(&T) -> bool
1.27.0[src]

Returns an iterator over subslices separated by elements that match pred, starting at the end of the slice and working backwards. The matched element is not contained in the subslices.

Examples

let slice = [11, 22, 33, 0, 44, 55];
let mut iter = slice.rsplit(|num| *num == 0);

assert_eq!(iter.next().unwrap(), &[44, 55]);
assert_eq!(iter.next().unwrap(), &[11, 22, 33]);
assert_eq!(iter.next(), None);

As with split(), if the first or last element is matched, an empty slice will be the first (or last) item returned by the iterator.

let v = &[0, 1, 1, 2, 3, 5, 8];
let mut it = v.rsplit(|n| *n % 2 == 0);
assert_eq!(it.next().unwrap(), &[]);
assert_eq!(it.next().unwrap(), &[3, 5]);
assert_eq!(it.next().unwrap(), &[1, 1]);
assert_eq!(it.next().unwrap(), &[]);
assert_eq!(it.next(), None);

pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<T, F> where
    F: FnMut(&T) -> bool
1.0.0[src]

Returns an iterator over subslices separated by elements that match pred, limited to returning at most n items. The matched element is not contained in the subslices.

The last element returned, if any, will contain the remainder of the slice.

Examples

Print the slice split once by numbers divisible by 3 (i.e., [10, 40], [20, 60, 50]):

let v = [10, 40, 30, 20, 60, 50];

for group in v.splitn(2, |num| *num % 3 == 0) {
    println!("{:?}", group);
}

pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<T, F> where
    F: FnMut(&T) -> bool
1.0.0[src]

Returns an iterator over subslices separated by elements that match pred limited to returning at most n items. This starts at the end of the slice and works backwards. The matched element is not contained in the subslices.

The last element returned, if any, will contain the remainder of the slice.

Examples

Print the slice split once, starting from the end, by numbers divisible by 3 (i.e., [50], [10, 40, 30, 20]):

let v = [10, 40, 30, 20, 60, 50];

for group in v.rsplitn(2, |num| *num % 3 == 0) {
    println!("{:?}", group);
}

pub fn contains(&self, x: &T) -> bool where
    T: PartialEq<T>, 
1.0.0[src]

Returns true if the slice contains an element with the given value.

Examples

let v = [10, 40, 30];
assert!(v.contains(&30));
assert!(!v.contains(&50));

pub fn starts_with(&self, needle: &[T]) -> bool where
    T: PartialEq<T>, 
1.0.0[src]

Returns true if needle is a prefix of the slice.

Examples

let v = [10, 40, 30];
assert!(v.starts_with(&[10]));
assert!(v.starts_with(&[10, 40]));
assert!(!v.starts_with(&[50]));
assert!(!v.starts_with(&[10, 50]));

Always returns true if needle is an empty slice:

let v = &[10, 40, 30];
assert!(v.starts_with(&[]));
let v: &[u8] = &[];
assert!(v.starts_with(&[]));

pub fn ends_with(&self, needle: &[T]) -> bool where
    T: PartialEq<T>, 
1.0.0[src]

Returns true if needle is a suffix of the slice.

Examples

let v = [10, 40, 30];
assert!(v.ends_with(&[30]));
assert!(v.ends_with(&[40, 30]));
assert!(!v.ends_with(&[50]));
assert!(!v.ends_with(&[50, 30]));

Always returns true if needle is an empty slice:

let v = &[10, 40, 30];
assert!(v.ends_with(&[]));
let v: &[u8] = &[];
assert!(v.ends_with(&[]));

Binary searches this sorted slice for a given element.

If the value is found then [Result::Ok] is returned, containing the index of the matching element. If there are multiple matches, then any one of the matches could be returned. If the value is not found then [Result::Err] is returned, containing the index where a matching element could be inserted while maintaining sorted order.

Examples

Looks up a series of four elements. The first is found, with a uniquely determined position; the second and third are not found; the fourth could match any position in [1, 4].

let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];

assert_eq!(s.binary_search(&13),  Ok(9));
assert_eq!(s.binary_search(&4),   Err(7));
assert_eq!(s.binary_search(&100), Err(13));
let r = s.binary_search(&1);
assert!(match r { Ok(1..=4) => true, _ => false, });

pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize> where
    F: FnMut(&'a T) -> Ordering
1.0.0[src]

Binary searches this sorted slice with a comparator function.

The comparator function should implement an order consistent with the sort order of the underlying slice, returning an order code that indicates whether its argument is Less, Equal or Greater the desired target.

If the value is found then [Result::Ok] is returned, containing the index of the matching element. If there are multiple matches, then any one of the matches could be returned. If the value is not found then [Result::Err] is returned, containing the index where a matching element could be inserted while maintaining sorted order.

Examples

Looks up a series of four elements. The first is found, with a uniquely determined position; the second and third are not found; the fourth could match any position in [1, 4].

let s = [0, 1, 1, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55];

let seek = 13;
assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Ok(9));
let seek = 4;
assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(7));
let seek = 100;
assert_eq!(s.binary_search_by(|probe| probe.cmp(&seek)), Err(13));
let seek = 1;
let r = s.binary_search_by(|probe| probe.cmp(&seek));
assert!(match r { Ok(1..=4) => true, _ => false, });

pub fn binary_search_by_key<'a, B, F>(
    &'a self,
    b: &B,
    f: F
) -> Result<usize, usize> where
    B: Ord,
    F: FnMut(&'a T) -> B, 
1.10.0[src]

Binary searches this sorted slice with a key extraction function.

Assumes that the slice is sorted by the key, for instance with sort_by_key using the same key extraction function.

If the value is found then [Result::Ok] is returned, containing the index of the matching element. If there are multiple matches, then any one of the matches could be returned. If the value is not found then [Result::Err] is returned, containing the index where a matching element could be inserted while maintaining sorted order.

Examples

Looks up a series of four elements in a slice of pairs sorted by their second elements. The first is found, with a uniquely determined position; the second and third are not found; the fourth could match any position in [1, 4].

let s = [(0, 0), (2, 1), (4, 1), (5, 1), (3, 1),
         (1, 2), (2, 3), (4, 5), (5, 8), (3, 13),
         (1, 21), (2, 34), (4, 55)];

assert_eq!(s.binary_search_by_key(&13, |&(a,b)| b),  Ok(9));
assert_eq!(s.binary_search_by_key(&4, |&(a,b)| b),   Err(7));
assert_eq!(s.binary_search_by_key(&100, |&(a,b)| b), Err(13));
let r = s.binary_search_by_key(&1, |&(a,b)| b);
assert!(match r { Ok(1..=4) => true, _ => false, });

pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T])1.30.0[src]

Transmute the slice to a slice of another type, ensuring alignment of the types is maintained.

This method splits the slice into three distinct slices: prefix, correctly aligned middle slice of a new type, and the suffix slice. The method does a best effort to make the middle slice the greatest length possible for a given type and input slice, but only your algorithm's performance should depend on that, not its correctness.

This method has no purpose when either input element T or output element U are zero-sized and will return the original slice without splitting anything.

Safety

This method is essentially a transmute with respect to the elements in the returned middle slice, so all the usual caveats pertaining to transmute::<T, U> also apply here.

Examples

Basic usage:

unsafe {
    let bytes: [u8; 7] = [1, 2, 3, 4, 5, 6, 7];
    let (prefix, shorts, suffix) = bytes.align_to::<u16>();
    // less_efficient_algorithm_for_bytes(prefix);
    // more_efficient_algorithm_for_aligned_shorts(shorts);
    // less_efficient_algorithm_for_bytes(suffix);
}

pub fn is_sorted(&self) -> bool where
    T: PartialOrd<T>, 
[src]

🔬 This is a nightly-only experimental API. (is_sorted)

new API

Checks if the elements of this slice are sorted.

That is, for each element a and its following element b, a <= b must hold. If the slice yields exactly zero or one element, true is returned.

Note that if Self::Item is only PartialOrd, but not Ord, the above definition implies that this function returns false if any two consecutive items are not comparable.

Examples

#![feature(is_sorted)]
let empty: [i32; 0] = [];

assert!([1, 2, 2, 9].is_sorted());
assert!(![1, 3, 2, 4].is_sorted());
assert!([0].is_sorted());
assert!(empty.is_sorted());
assert!(![0.0, 1.0, std::f32::NAN].is_sorted());

pub fn is_sorted_by<F>(&self, compare: F) -> bool where
    F: FnMut(&T, &T) -> Option<Ordering>, 
[src]

🔬 This is a nightly-only experimental API. (is_sorted)

new API

Checks if the elements of this slice are sorted using the given comparator function.

Instead of using PartialOrd::partial_cmp, this function uses the given compare function to determine the ordering of two elements. Apart from that, it's equivalent to is_sorted; see its documentation for more information.

pub fn is_sorted_by_key<F, K>(&self, f: F) -> bool where
    F: FnMut(&T) -> K,
    K: PartialOrd<K>, 
[src]

🔬 This is a nightly-only experimental API. (is_sorted)

new API

Checks if the elements of this slice are sorted using the given key extraction function.

Instead of comparing the slice's elements directly, this function compares the keys of the elements, as determined by f. Apart from that, it's equivalent to is_sorted; see its documentation for more information.

Examples

#![feature(is_sorted)]

assert!(["c", "bb", "aaa"].is_sorted_by_key(|s| s.len()));
assert!(![-2i32, -1, 0, 3].is_sorted_by_key(|n| n.abs()));

pub fn is_ascii(&self) -> bool1.23.0[src]

Checks if all bytes in this slice are within the ASCII range.

pub fn eq_ignore_ascii_case(&self, other: &[u8]) -> bool1.23.0[src]

Checks that two slices are an ASCII case-insensitive match.

Same as to_ascii_lowercase(a) == to_ascii_lowercase(b), but without allocating and copying temporaries.

Important traits for Vec<u8>
pub fn to_vec(&self) -> Vec<T> where
    T: Clone
1.0.0[src]

Copies self into a new Vec.

Examples

let s = [10, 40, 30];
let x = s.to_vec();
// Here, `s` and `x` can be modified independently.

Important traits for Vec<u8>
pub fn repeat(&self, n: usize) -> Vec<T> where
    T: Copy
[src]

🔬 This is a nightly-only experimental API. (repeat_generic_slice)

it's on str, why not on slice?

Creates a vector by repeating a slice n times.

Panics

This function will panic if the capacity would overflow.

Examples

Basic usage:

#![feature(repeat_generic_slice)]

fn main() {
    assert_eq!([1, 2].repeat(3), vec![1, 2, 1, 2, 1, 2]);
}

A panic upon overflow:

#![feature(repeat_generic_slice)]
fn main() {
    // this will panic at runtime
    b"0123456789abcdef".repeat(usize::max_value());
}

Important traits for Vec<u8>
pub fn to_ascii_uppercase(&self) -> Vec<u8>1.23.0[src]

Returns a vector containing a copy of this slice where each byte is mapped to its ASCII upper case equivalent.

ASCII letters 'a' to 'z' are mapped to 'A' to 'Z', but non-ASCII letters are unchanged.

To uppercase the value in-place, use make_ascii_uppercase.

Important traits for Vec<u8>
pub fn to_ascii_lowercase(&self) -> Vec<u8>1.23.0[src]

Returns a vector containing a copy of this slice where each byte is mapped to its ASCII lower case equivalent.

ASCII letters 'A' to 'Z' are mapped to 'a' to 'z', but non-ASCII letters are unchanged.

To lowercase the value in-place, use make_ascii_lowercase.

Trait Implementations

impl<'input, Endian> Reader for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

type Endian = Endian

The endianity of bytes that are read.

type Offset = usize

The type used for offsets and lengths.

fn read_u8_array<A>(&mut self) -> Result<A> where
    A: Sized + Default + AsMut<[u8]>, 
[src]

Read a u8 array.

fn read_u8(&mut self) -> Result<u8>[src]

Read a u8.

fn read_i8(&mut self) -> Result<i8>[src]

Read an i8.

fn read_u16(&mut self) -> Result<u16>[src]

Read a u16.

fn read_i16(&mut self) -> Result<i16>[src]

Read an i16.

fn read_u32(&mut self) -> Result<u32>[src]

Read a u32.

fn read_i32(&mut self) -> Result<i32>[src]

Read an i32.

fn read_u64(&mut self) -> Result<u64>[src]

Read a u64.

fn read_i64(&mut self) -> Result<i64>[src]

Read an i64.

fn read_f32(&mut self) -> Result<f32>[src]

Read a f32.

fn read_f64(&mut self) -> Result<f64>[src]

Read a f64.

fn read_uint(&mut self, n: usize) -> Result<u64>[src]

Read an unsigned n-bytes integer u64. Read more

fn read_null_terminated_slice(&mut self) -> Result<Self>[src]

Read a null-terminated slice, and return it (excluding the null).

fn read_uleb128(&mut self) -> Result<u64>[src]

Read an unsigned LEB128 encoded integer.

fn read_sleb128(&mut self) -> Result<i64>[src]

Read a signed LEB128 encoded integer.

fn read_initial_length(&mut self) -> Result<(Self::Offset, Format)>[src]

Read an initial length field. Read more

fn read_address(&mut self, address_size: u8) -> Result<u64>[src]

Read an address-sized integer, and return it as a u64.

fn read_word(&mut self, format: Format) -> Result<Self::Offset>[src]

Parse a word-sized integer according to the DWARF format. Read more

fn read_length(&mut self, format: Format) -> Result<Self::Offset>[src]

Parse a word-sized section length according to the DWARF format.

fn read_offset(&mut self, format: Format) -> Result<Self::Offset>[src]

Parse a word-sized section offset according to the DWARF format.

fn read_sized_offset(&mut self, size: u8) -> Result<Self::Offset>[src]

Parse a section offset of the given size. Read more

impl<'input, Endian> Deref for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

type Target = [u8]

The resulting type after dereferencing.

impl<'input, Endian: PartialEq> PartialEq<EndianSlice<'input, Endian>> for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

impl<'input, Endian: Eq> Eq for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

impl<'input, Endian: Hash> Hash for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher
1.3.0[src]

Feeds a slice of this type into the given [Hasher]. Read more

impl<'input, Endian: Copy> Copy for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

impl<'input, Endian> Index<usize> for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

type Output = u8

The returned type after indexing.

impl<'input, Endian> Index<RangeFrom<usize>> for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

type Output = [u8]

The returned type after indexing.

impl<'input, Endian: Debug> Debug for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

impl<'input, Endian> Into<&'input [u8]> for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

impl<'input, Endian: Clone> Clone for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<'input, Endian: Default> Default for EndianSlice<'input, Endian> where
    Endian: Endianity
[src]

Auto Trait Implementations

impl<'input, Endian> Send for EndianSlice<'input, Endian> where
    Endian: Send

impl<'input, Endian> Sync for EndianSlice<'input, Endian> where
    Endian: Sync

impl<'input, Endian> Unpin for EndianSlice<'input, Endian> where
    Endian: Unpin

impl<'input, Endian> UnwindSafe for EndianSlice<'input, Endian> where
    Endian: UnwindSafe

impl<'input, Endian> RefUnwindSafe for EndianSlice<'input, Endian> where
    Endian: RefUnwindSafe

Blanket Implementations

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]