1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
//! Traits provided by this crate /// Concatenate two numbers into a "wide" twice-width value, using the `rhs` /// value as the least significant value. pub trait Concat<Rhs = Self> { /// Concatenated output: twice the width of `Self`. type Output; /// Concate the two values, with `self` as most significant and `rhs` as /// the least significant. fn concat(&self, rhs: &Self) -> Self::Output; } /// Encoding support. pub trait Encoding: Sized { /// Size of this integer in bits. const BIT_SIZE: usize; /// Size of this integer in bytes. const BYTE_SIZE: usize; /// Byte array representation. type Repr: Copy + Clone + AsRef<[u8]> + AsMut<[u8]> + Sized; /// Decode from big endian bytes. fn from_be_bytes(bytes: Self::Repr) -> Self; /// Decode from little endian bytes. fn from_le_bytes(bytes: Self::Repr) -> Self; /// Encode to big endian bytes. fn to_be_bytes(&self) -> Self::Repr; /// Encode to little endian bytes. fn to_le_bytes(&self) -> Self::Repr; } /// Split a number in half, returning the most significant half followed by /// the least significant. pub trait Split<Rhs = Self> { /// Split output: high/low components of the value. type Output; /// Split this number in half, returning its high and low components /// respectively. fn split(&self) -> (Self::Output, Self::Output); }