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
48
use word::{Word, UnsignedWord, ToWord};
use word::reverse_bit_groups::*;
/// Reverses groups of bytes within each subword of `x`
///
/// * `group_byte_size` - The size (in bytes) of the groups of bytes to be
/// reversed.
/// * `no_subwords` - The number of subwords in `x`.
///
/// The word `x` is divided into `no_subwords`. The byte groups of size
/// `group_byte_size` are reversed within each subword. Bits within a byte group
/// are _not_ reversed.
///
/// The size in bits of a subword is thus `x::bit_size() / no_subword`. When
/// `no_suboword == 1` the subword equals the original word. When
/// `group_byte_size == 1` bytes are reversed within a subword.
///
/// # Examples
///
/// ```
/// use bitwise::word::*;
///
/// // Single bytes:
/// assert_eq!(0b0101_1101_1010_0101_u16.reverse_byte_groups(1u32, 1u32), 0b1010_0101_0101_1101u16);
///
/// // Single bytes within two half-words:
/// assert_eq!(reverse_byte_groups(0b0101_1101_1010_0101_0101_1101_1010_0101u32, 1u32, 2u32), 0b1010_0101_0101_1101_1010_0101_0101_1101u32);
/// ```
#[inline]
pub fn reverse_byte_groups<T: Word, U: UnsignedWord>(x: T,
group_byte_size: U,
no_subwords: U)
-> T {
reverse_bit_groups(x, group_byte_size * 8.to(), no_subwords)
}
/// Method version of [`reverse_byte_groups`](fn.reverse_byte_groups.html).
pub trait ReverseByteGroups: Word {
#[inline]
fn reverse_byte_groups<U: UnsignedWord>(self, group_byte_size: U, no_subwords: U) -> Self;
}
impl<T: Word> ReverseByteGroups for T {
#[inline]
fn reverse_byte_groups<U: UnsignedWord>(self, group_byte_size: U, no_subwords: U) -> T {
reverse_byte_groups(self, group_byte_size, no_subwords)
}
}