[−][src]Struct byte_set::ByteSet
An efficient, general-purpose set of u8s.
Implementation
This is a 256-bit mask where a byte is contained based on whether its bit is enabled. The first (least significant) bit in the mask represents the first byte in the set. Likewise, the last last (most significant) bit represents the last byte.
The mask is composed a of "chunk" array. Each chunk is either 64 or 32 bits wide, depending on the target architecture. As of right now, this is based on native register size. This may change in the future based on target features that enable better performance.
Implementations
impl ByteSet[src]
#[must_use]pub const fn new() -> Self[src]
Returns a set containing no bytes.
#[must_use]pub const fn full() -> Self[src]
Returns a set containing all bytes (0-255).
pub fn rand<R: RngCore>(rng: R) -> Self[src]
feature="rand" or feature="rand_core" only.Returns a set containing uniformly-distributed random bytes from rng.
This uses fill_bytes under the hood.
pub fn try_rand<R: RngCore>(rng: R) -> Result<Self, Error>[src]
feature="rand" or feature="rand_core" only.Returns a set containing uniformly-distributed random bytes from rng,
or Err if rng failed.
This uses try_fill_bytes under the hood.
pub const ASCII: Self[src]
The set of all ASCII characters: U+0000 NULL ..= U+007F DELETE.
Examples
This contains all bytes for which u8::is_ascii returns true:
for byte in ByteSet::ASCII { assert!(byte.is_ascii()); } for byte in !ByteSet::ASCII { assert!(!byte.is_ascii()); }
pub const ASCII_ALPHABETIC: Self[src]
The set of all ASCII alphabetic characters:
- U+0041 'A' ..= U+005A 'Z'
- U+0061 'a' ..= U+007A 'z'
Examples
This contains all bytes for which u8::is_ascii_alphabetic returns
true:
for byte in ByteSet::ASCII_ALPHABETIC { assert!(byte.is_ascii_alphabetic()); } for byte in !ByteSet::ASCII_ALPHABETIC { assert!(!byte.is_ascii_alphabetic()); }
pub const ASCII_UPPERCASE: Self[src]
The set of all ASCII uppercase characters: U+0041 'A' ..= U+005A 'Z'.
Examples
This contains all bytes for which u8::is_ascii_uppercase returns
true:
for byte in ByteSet::ASCII_UPPERCASE { assert!(byte.is_ascii_uppercase()); } for byte in !ByteSet::ASCII_UPPERCASE { assert!(!byte.is_ascii_uppercase()); }
pub const ASCII_LOWERCASE: Self[src]
The set of all ASCII lowercase characters: U+0061 'a' ..= U+007A 'z'.
Examples
This contains all bytes for which u8::is_ascii_lowercase returns
true:
for byte in ByteSet::ASCII_LOWERCASE { assert!(byte.is_ascii_lowercase()); } for byte in !ByteSet::ASCII_LOWERCASE { assert!(!byte.is_ascii_lowercase()); }
pub const ASCII_ALPHANUMERIC: Self[src]
The set of all ASCII alphanumeric characters:
- U+0041 'A' ..= U+005A 'Z'
- U+0061 'a' ..= U+007A 'z'
- U+0030 '0' ..= U+0039 '9'
Examples
This contains all bytes for which u8::is_ascii_alphanumeric returns
true:
for byte in ByteSet::ASCII_ALPHANUMERIC { assert!(byte.is_ascii_alphanumeric()); } for byte in !ByteSet::ASCII_ALPHANUMERIC { assert!(!byte.is_ascii_alphanumeric()); }
pub const ASCII_DIGIT: Self[src]
The set of all ASCII decimal digits: U+0030 '0' ..= U+0039 '9'.
Examples
This contains all bytes for which u8::is_ascii_digit returns true:
for byte in ByteSet::ASCII_DIGIT { assert!(byte.is_ascii_digit()); } for byte in !ByteSet::ASCII_DIGIT { assert!(!byte.is_ascii_digit()); }
pub const ASCII_HEXDIGIT: Self[src]
The set of all ASCII hexadecimal digits:
- U+0030 '0' ..= U+0039 '9'
- U+0041 'A' ..= U+0046 'F'
- U+0061 'a' ..= U+0066 'f'
Examples
This contains all bytes for which u8::is_ascii_hexdigit returns
true:
for byte in ByteSet::ASCII_HEXDIGIT { assert!(byte.is_ascii_hexdigit()); } for byte in !ByteSet::ASCII_HEXDIGIT { assert!(!byte.is_ascii_hexdigit()); }
pub const ASCII_PUNCTUATION: Self[src]
The set of all ASCII punctuation characters:
- U+0021 ..= U+002F
! " # $ % & ' ( ) * + , - . / - U+003A ..= U+0040
: ; < = > ? @ - U+005B ..= U+0060
[ \ ] ^ _ ` - U+007B ..= U+007E
{ | } ~
Examples
This contains all bytes for which u8::is_ascii_punctuation returns
true:
for byte in ByteSet::ASCII_PUNCTUATION { assert!(byte.is_ascii_punctuation()); } for byte in !ByteSet::ASCII_PUNCTUATION { assert!(!byte.is_ascii_punctuation()); }
pub const ASCII_GRAPHIC: Self[src]
The set of all ASCII graphic characters: U+0021 '!' ..= U+007E '~'.
Examples
This contains all bytes for which u8::is_ascii_graphic returns
true:
for byte in ByteSet::ASCII_GRAPHIC { assert!(byte.is_ascii_graphic()); } for byte in !ByteSet::ASCII_GRAPHIC { assert!(!byte.is_ascii_graphic()); }
pub const ASCII_WHITESPACE: Self[src]
The set of all ASCII whitespace characters:
- U+0020 SPACE
- U+0009 HORIZONTAL TAB
- U+000A LINE FEED
- U+000C FORM FEED
- U+000D CARRIAGE RETURN
Examples
This contains all bytes for which u8::is_ascii_whitespace returns
true:
for byte in ByteSet::ASCII_WHITESPACE { assert!(byte.is_ascii_whitespace()); } for byte in !ByteSet::ASCII_WHITESPACE { assert!(!byte.is_ascii_whitespace()); }
pub const ASCII_CONTROL: Self[src]
The set of all ASCII control characters:
- U+0000 NUL ..= U+001F UNIT SEPARATOR
- U+007F DELETE.
Note that most ASCII whitespace characters are control characters, but SPACE is not.
Examples
This contains all bytes for which u8::is_ascii_control returns
true:
for byte in ByteSet::ASCII_CONTROL { assert!(byte.is_ascii_control()); } for byte in !ByteSet::ASCII_CONTROL { assert!(!byte.is_ascii_control()); }
#[must_use]pub const fn is_empty(&self) -> bool[src]
Returns true if self contains no bytes.
This is more efficient than checking self.len() == 0.
#[must_use]pub const fn is_full(&self) -> bool[src]
Returns true if self contains all bytes.
This is more efficient than checking self.len() == 256.
#[must_use]pub const fn is_ascii(&self) -> bool[src]
Returns true if self contains only ASCII characters, or is empty.
This is more efficient than checking whether self.last() is ASCII or
None.
#[must_use]pub const fn len(&self) -> usize[src]
Returns the number of bytes contained in self.
pub fn clear(&mut self)[src]
Removes all bytes from self.
pub fn first(&self) -> Option<u8>[src]
Returns the first (least) byte in self, or None if self is empty.
pub fn pop_first(&mut self) -> Option<u8>[src]
Removes the first (least) byte in self and returns it, or None if
self is empty.
pub fn last(&self) -> Option<u8>[src]
Returns the last (greatest) byte in self, or None if self is
empty.
pub fn pop_last(&mut self) -> Option<u8>[src]
Removes the last (least) byte in self and returns it, or None if
self is empty.
pub fn insert(&mut self, byte: u8)[src]
Inserts byte into self in-place.
Unlike HashSet::insert and BTreeSet::insert, this does not
return a bool for whether byte was not present. This is because it's
just as efficient to call contains before.
pub fn insert_all(&mut self, other: Self)[src]
Inserts all bytes of other into self in-place.
#[must_use]pub const fn inserting(self, byte: u8) -> Self[src]
Returns a copy of self with byte inserted.
#[must_use]pub const fn inserting_all(self, other: Self) -> Self[src]
Returns a copy of self with all of other inserted.
This is equivalent to the union method.
pub fn remove(&mut self, byte: u8)[src]
Removes byte from self in-place.
Unlike HashSet::remove and BTreeSet::remove, this does not
return a bool for whether byte was present. This is because it's
just as efficient to call contains before.
pub fn remove_all(&mut self, other: Self)[src]
Removes all bytes of other from self in-place.
#[must_use]pub const fn removing(self, byte: u8) -> Self[src]
Returns a copy of self with byte removed.
#[must_use]pub const fn removing_all(self, other: Self) -> Self[src]
Returns a copy of self with byte removed.
pub fn set(&mut self, byte: u8, enabled: bool)[src]
Sets byte in self to enabled in-place.
#[must_use]pub const fn setting(self, byte: u8, enabled: bool) -> Self[src]
Returns a copy of self with byte set to enabled.
#[must_use]pub const fn contains(&self, byte: u8) -> bool[src]
Returns true if byte is contained in self.
#[must_use]pub fn contains_any(&self, other: &Self) -> bool[src]
Returns true if self contains any bytes in other.
#[must_use]pub fn is_subset(&self, other: &Self) -> bool[src]
Returns true if other contains all bytes in self.
#[must_use]pub fn is_strict_subset(&self, other: &Self) -> bool[src]
Returns true if other contains all bytes in self and at least one
other byte not contained in self.
This is also known as a "proper subset".
#[must_use]pub fn is_superset(&self, other: &Self) -> bool[src]
Returns true if self contains all bytes in other.
#[must_use]pub fn is_strict_superset(&self, other: &Self) -> bool[src]
Returns true if self contains all bytes in other and at least one
other byte not contained in other.
This is also known as a "proper superset".
#[must_use]pub fn is_disjoint(&self, other: &Self) -> bool[src]
Returns true if self and other have no bytes in common.
#[must_use]pub const fn difference(self, other: Self) -> Self[src]
Returns a set with the bytes contained in self, but not in other.
#[must_use]pub const fn symmetric_difference(self, other: Self) -> Self[src]
Returns a set with the bytes contained in self or other, but not in
both.
#[must_use]pub const fn intersection(self, other: Self) -> Self[src]
Returns a set with the bytes contained both in self and other.
#[must_use]pub const fn union(self, other: Self) -> Self[src]
Returns a new set with the bytes contained in self or other.
#[must_use]pub const fn not(self) -> Self[src]
Returns a new set with the bytes not contained in self.
This exists because the Not trait cannot be used in const yet.
#[must_use]pub const fn reverse_bits(self) -> Self[src]
Returns self with its bits reversed.
This is equivalent to checking for 255 - b in all subsequent searches
of b.
#[must_use]pub const fn eq(&self, other: &Self) -> bool[src]
Returns true if self and other contain the same bytes.
This exists because PartialEq is currently unstable in const.
#[must_use]pub const fn ne(&self, other: &Self) -> bool[src]
Returns true if self and other do not contain the same bytes.
This exists because PartialEq is currently unstable in const.
impl ByteSet[src]
Operations over the internal memory representation.
pub fn as_bytes(&self) -> &[u8; 32][src]
Returns a shared reference to the underlying bytes of self.
pub fn as_bytes_mut(&mut self) -> &mut [u8; 32][src]
Returns a mutable reference to the underlying bytes of self.
pub fn slice_as_bytes(slice: &[Self]) -> &[u8][src]
Returns a shared reference to the underlying bytes of slice.
pub fn slice_as_bytes_mut(slice: &mut [Self]) -> &mut [u8][src]
Returns a mutable reference to the underlying bytes of slice.
Trait Implementations
impl BitAnd<ByteSet> for ByteSet[src]
type Output = Self
The resulting type after applying the & operator.
fn bitand(self, rhs: Self) -> Self::Output[src]
impl BitAndAssign<ByteSet> for ByteSet[src]
fn bitand_assign(&mut self, rhs: Self)[src]
impl BitOr<ByteSet> for ByteSet[src]
type Output = Self
The resulting type after applying the | operator.
fn bitor(self, rhs: Self) -> Self::Output[src]
impl BitOrAssign<ByteSet> for ByteSet[src]
fn bitor_assign(&mut self, rhs: Self)[src]
impl BitXor<ByteSet> for ByteSet[src]
type Output = Self
The resulting type after applying the ^ operator.
fn bitxor(self, rhs: Self) -> Self::Output[src]
impl BitXorAssign<ByteSet> for ByteSet[src]
fn bitxor_assign(&mut self, rhs: Self)[src]
impl Clone for ByteSet[src]
impl Copy for ByteSet[src]
impl Debug for ByteSet[src]
impl Default for ByteSet[src]
impl Distribution<ByteSet> for Standard[src]
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> ByteSet[src]
fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> where
R: Rng, [src]
R: Rng,
impl Eq for ByteSet[src]
impl<'a> Extend<&'a u8> for ByteSet[src]
fn extend<T: IntoIterator<Item = &'a u8>>(&mut self, iter: T)[src]
fn extend_one(&mut self, item: A)[src]
fn extend_reserve(&mut self, additional: usize)[src]
impl Extend<u8> for ByteSet[src]
fn extend<T: IntoIterator<Item = u8>>(&mut self, iter: T)[src]
fn extend_one(&mut self, item: A)[src]
fn extend_reserve(&mut self, additional: usize)[src]
impl<'_> From<&'_ [u8]> for ByteSet[src]
impl<'_> From<&'_ str> for ByteSet[src]
impl From<ByteSet> for Iter[src]
impl From<u8> for ByteSet[src]
impl<'a> FromIterator<&'a u8> for ByteSet[src]
fn from_iter<T: IntoIterator<Item = &'a u8>>(iter: T) -> Self[src]
impl FromIterator<u8> for ByteSet[src]
fn from_iter<T: IntoIterator<Item = u8>>(iter: T) -> Self[src]
impl Hash for ByteSet[src]
fn hash<H: Hasher>(&self, state: &mut H)[src]
fn hash_slice<H: Hasher>(data: &[Self], state: &mut H)[src]
impl IntoIterator for ByteSet[src]
type Item = u8
The type of the elements being iterated over.
type IntoIter = Iter
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter[src]
impl Not for ByteSet[src]
type Output = Self
The resulting type after applying the ! operator.
fn not(self) -> Self::Output[src]
impl Ord for ByteSet[src]
fn cmp(&self, other: &Self) -> Ordering[src]
#[must_use]fn max(self, other: Self) -> Self1.21.0[src]
#[must_use]fn min(self, other: Self) -> Self1.21.0[src]
#[must_use]fn clamp(self, min: Self, max: Self) -> Self[src]
impl PartialEq<ByteSet> for ByteSet[src]
impl PartialOrd<ByteSet> for ByteSet[src]
fn partial_cmp(&self, other: &Self) -> Option<Ordering>[src]
fn lt(&self, other: &Self) -> bool[src]
fn le(&self, other: &Self) -> bool[src]
fn gt(&self, other: &Self) -> bool[src]
fn ge(&self, other: &Self) -> bool[src]
impl StructuralEq for ByteSet[src]
impl StructuralPartialEq for ByteSet[src]
impl Sub<ByteSet> for ByteSet[src]
type Output = Self
The resulting type after applying the - operator.
fn sub(self, rhs: Self) -> Self::Output[src]
impl SubAssign<ByteSet> for ByteSet[src]
fn sub_assign(&mut self, rhs: Self)[src]
Auto Trait Implementations
impl RefUnwindSafe for ByteSet
impl Send for ByteSet
impl Sync for ByteSet
impl Unpin for ByteSet
impl UnwindSafe for ByteSet
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<I> IntoIterator for I where
I: Iterator, [src]
I: Iterator,
type Item = <I as Iterator>::Item
The type of the elements being iterated over.
type IntoIter = I
Which kind of iterator are we turning this into?
fn into_iter(self) -> I[src]
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T[src]
fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,