Struct bitvec::indices::BitIdx[][src]

pub struct BitIdx<T> where
    T: BitStore
{ /* fields omitted */ }

Indicates a semantic index of a bit within a memory element.

This type is consumed by BitOrder implementors, which use it to produce a concrete bit position inside an element.

BitIdx is a semantic counter which has a defined, constant, and predictable ordering. Values of BitIdx refer strictly to an abstract ordering, and not to any actual bit positions within a memory element, so BitIdx::<T>(0) is always the first bit counted within an element, but is not required to be the most or least significant bits, or any other particular bits. Which specific bit is referred by a BitIdx value is governed by implementors of BitOrder.

Type Parameters

Implementations

impl<T> BitIdx<T> where
    T: BitStore
[src]

pub fn new(idx: u8) -> Option<Self>[src]

Wraps a counter value as a known-good index of the T element type.

Parameters

  • idx: A semantic index within a T memory element.

Returns

If idx is within the range 0 .. T::BITS, then this returns the index value wrapped in the index type; if idx exceeds this range, then this returns None.

Methods from Deref<Target = u8>

pub const MIN: u81.43.0[src]

pub const MAX: u81.43.0[src]

pub const BITS: u32[src]

pub fn as_ne_bytes(&self) -> &[u8; 1][src]

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

Return the memory representation of this integer as a byte array in native byte order.

to_ne_bytes should be preferred over this whenever possible.

Examples

#![feature(num_as_ne_bytes)]
let num = 0x12u8;
let bytes = num.as_ne_bytes();
assert_eq!(
    bytes,
    if cfg!(target_endian = "big") {
        &[0x12]
    } else {
        &[0x12]
    }
);

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

Checks if the value is within the ASCII range.

Examples

let ascii = 97u8;
let non_ascii = 150u8;

assert!(ascii.is_ascii());
assert!(!non_ascii.is_ascii());

pub const fn to_ascii_uppercase(&self) -> u81.23.0 (const: 1.52.0)[src]

Makes a copy of the value in 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.

Examples

let lowercase_a = 97u8;

assert_eq!(65, lowercase_a.to_ascii_uppercase());

pub const fn to_ascii_lowercase(&self) -> u81.23.0 (const: 1.52.0)[src]

Makes a copy of the value in 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.

Examples

let uppercase_a = 65u8;

assert_eq!(97, uppercase_a.to_ascii_lowercase());

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

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

This is equivalent to to_ascii_lowercase(a) == to_ascii_lowercase(b).

Examples

let lowercase_a = 97u8;
let uppercase_a = 65u8;

assert!(lowercase_a.eq_ignore_ascii_case(&uppercase_a));

pub const fn is_ascii_alphabetic(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII alphabetic character:

  • U+0041 ‘A’ ..= U+005A ‘Z’, or
  • U+0061 ‘a’ ..= U+007A ‘z’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(uppercase_a.is_ascii_alphabetic());
assert!(uppercase_g.is_ascii_alphabetic());
assert!(a.is_ascii_alphabetic());
assert!(g.is_ascii_alphabetic());
assert!(!zero.is_ascii_alphabetic());
assert!(!percent.is_ascii_alphabetic());
assert!(!space.is_ascii_alphabetic());
assert!(!lf.is_ascii_alphabetic());
assert!(!esc.is_ascii_alphabetic());

pub const fn is_ascii_uppercase(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII uppercase character: U+0041 ‘A’ ..= U+005A ‘Z’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(uppercase_a.is_ascii_uppercase());
assert!(uppercase_g.is_ascii_uppercase());
assert!(!a.is_ascii_uppercase());
assert!(!g.is_ascii_uppercase());
assert!(!zero.is_ascii_uppercase());
assert!(!percent.is_ascii_uppercase());
assert!(!space.is_ascii_uppercase());
assert!(!lf.is_ascii_uppercase());
assert!(!esc.is_ascii_uppercase());

pub const fn is_ascii_lowercase(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII lowercase character: U+0061 ‘a’ ..= U+007A ‘z’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(!uppercase_a.is_ascii_lowercase());
assert!(!uppercase_g.is_ascii_lowercase());
assert!(a.is_ascii_lowercase());
assert!(g.is_ascii_lowercase());
assert!(!zero.is_ascii_lowercase());
assert!(!percent.is_ascii_lowercase());
assert!(!space.is_ascii_lowercase());
assert!(!lf.is_ascii_lowercase());
assert!(!esc.is_ascii_lowercase());

pub const fn is_ascii_alphanumeric(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII alphanumeric character:

  • U+0041 ‘A’ ..= U+005A ‘Z’, or
  • U+0061 ‘a’ ..= U+007A ‘z’, or
  • U+0030 ‘0’ ..= U+0039 ‘9’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(uppercase_a.is_ascii_alphanumeric());
assert!(uppercase_g.is_ascii_alphanumeric());
assert!(a.is_ascii_alphanumeric());
assert!(g.is_ascii_alphanumeric());
assert!(zero.is_ascii_alphanumeric());
assert!(!percent.is_ascii_alphanumeric());
assert!(!space.is_ascii_alphanumeric());
assert!(!lf.is_ascii_alphanumeric());
assert!(!esc.is_ascii_alphanumeric());

pub const fn is_ascii_digit(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII decimal digit: U+0030 ‘0’ ..= U+0039 ‘9’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(!uppercase_a.is_ascii_digit());
assert!(!uppercase_g.is_ascii_digit());
assert!(!a.is_ascii_digit());
assert!(!g.is_ascii_digit());
assert!(zero.is_ascii_digit());
assert!(!percent.is_ascii_digit());
assert!(!space.is_ascii_digit());
assert!(!lf.is_ascii_digit());
assert!(!esc.is_ascii_digit());

pub const fn is_ascii_hexdigit(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII hexadecimal digit:

  • U+0030 ‘0’ ..= U+0039 ‘9’, or
  • U+0041 ‘A’ ..= U+0046 ‘F’, or
  • U+0061 ‘a’ ..= U+0066 ‘f’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(uppercase_a.is_ascii_hexdigit());
assert!(!uppercase_g.is_ascii_hexdigit());
assert!(a.is_ascii_hexdigit());
assert!(!g.is_ascii_hexdigit());
assert!(zero.is_ascii_hexdigit());
assert!(!percent.is_ascii_hexdigit());
assert!(!space.is_ascii_hexdigit());
assert!(!lf.is_ascii_hexdigit());
assert!(!esc.is_ascii_hexdigit());

pub const fn is_ascii_punctuation(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII punctuation character:

  • U+0021 ..= U+002F ! " # $ % & ' ( ) * + , - . /, or
  • U+003A ..= U+0040 : ; < = > ? @, or
  • U+005B ..= U+0060 [ \ ] ^ _ ` , or
  • U+007B ..= U+007E { | } ~

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(!uppercase_a.is_ascii_punctuation());
assert!(!uppercase_g.is_ascii_punctuation());
assert!(!a.is_ascii_punctuation());
assert!(!g.is_ascii_punctuation());
assert!(!zero.is_ascii_punctuation());
assert!(percent.is_ascii_punctuation());
assert!(!space.is_ascii_punctuation());
assert!(!lf.is_ascii_punctuation());
assert!(!esc.is_ascii_punctuation());

pub const fn is_ascii_graphic(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII graphic character: U+0021 ‘!’ ..= U+007E ‘~’.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(uppercase_a.is_ascii_graphic());
assert!(uppercase_g.is_ascii_graphic());
assert!(a.is_ascii_graphic());
assert!(g.is_ascii_graphic());
assert!(zero.is_ascii_graphic());
assert!(percent.is_ascii_graphic());
assert!(!space.is_ascii_graphic());
assert!(!lf.is_ascii_graphic());
assert!(!esc.is_ascii_graphic());

pub const fn is_ascii_whitespace(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII whitespace character: U+0020 SPACE, U+0009 HORIZONTAL TAB, U+000A LINE FEED, U+000C FORM FEED, or U+000D CARRIAGE RETURN.

Rust uses the WhatWG Infra Standard’s definition of ASCII whitespace. There are several other definitions in wide use. For instance, the POSIX locale includes U+000B VERTICAL TAB as well as all the above characters, but—from the very same specification—the default rule for “field splitting” in the Bourne shell considers only SPACE, HORIZONTAL TAB, and LINE FEED as whitespace.

If you are writing a program that will process an existing file format, check what that format’s definition of whitespace is before using this function.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(!uppercase_a.is_ascii_whitespace());
assert!(!uppercase_g.is_ascii_whitespace());
assert!(!a.is_ascii_whitespace());
assert!(!g.is_ascii_whitespace());
assert!(!zero.is_ascii_whitespace());
assert!(!percent.is_ascii_whitespace());
assert!(space.is_ascii_whitespace());
assert!(lf.is_ascii_whitespace());
assert!(!esc.is_ascii_whitespace());

pub const fn is_ascii_control(&self) -> bool1.24.0 (const: 1.47.0)[src]

Checks if the value is an ASCII control character: U+0000 NUL ..= U+001F UNIT SEPARATOR, or U+007F DELETE. Note that most ASCII whitespace characters are control characters, but SPACE is not.

Examples

let uppercase_a = b'A';
let uppercase_g = b'G';
let a = b'a';
let g = b'g';
let zero = b'0';
let percent = b'%';
let space = b' ';
let lf = b'\n';
let esc = 0x1b_u8;

assert!(!uppercase_a.is_ascii_control());
assert!(!uppercase_g.is_ascii_control());
assert!(!a.is_ascii_control());
assert!(!g.is_ascii_control());
assert!(!zero.is_ascii_control());
assert!(!percent.is_ascii_control());
assert!(!space.is_ascii_control());
assert!(lf.is_ascii_control());
assert!(esc.is_ascii_control());

Trait Implementations

impl<T: Clone> Clone for BitIdx<T> where
    T: BitStore
[src]

impl<T: Copy> Copy for BitIdx<T> where
    T: BitStore
[src]

impl<T: Debug> Debug for BitIdx<T> where
    T: BitStore
[src]

impl<T: Default> Default for BitIdx<T> where
    T: BitStore
[src]

impl<T> Deref for BitIdx<T> where
    T: BitStore
[src]

type Target = u8

The resulting type after dereferencing.

impl<T: Eq> Eq for BitIdx<T> where
    T: BitStore
[src]

impl<T: Hash> Hash for BitIdx<T> where
    T: BitStore
[src]

impl<T: Ord> Ord for BitIdx<T> where
    T: BitStore
[src]

impl<T: PartialEq> PartialEq<BitIdx<T>> for BitIdx<T> where
    T: BitStore
[src]

impl<T: PartialOrd> PartialOrd<BitIdx<T>> for BitIdx<T> where
    T: BitStore
[src]

impl<T> StructuralEq for BitIdx<T> where
    T: BitStore
[src]

impl<T> StructuralPartialEq for BitIdx<T> where
    T: BitStore
[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for BitIdx<T> where
    T: RefUnwindSafe

impl<T> Send for BitIdx<T>

impl<T> Sync for BitIdx<T>

impl<T> Unpin for BitIdx<T> where
    T: Unpin

impl<T> UnwindSafe for BitIdx<T> where
    T: UnwindSafe

Blanket Implementations

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

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

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

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

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

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

type Owned = T

The resulting type after obtaining ownership.

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> 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.