mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-16 00:48:10 +00:00
Shrink the enumerate call on mask
This commit is contained in:

committed by
Abhishek Chanda

parent
ec79428c75
commit
b15eb54695
12
src/ipv6.rs
12
src/ipv6.rs
@ -192,15 +192,17 @@ impl Ipv6Network {
|
|||||||
/// assert_eq!(net.mask(), Ipv6Addr::new(0xffff, 0xffff, 0, 0, 0, 0, 0, 0));
|
/// assert_eq!(net.mask(), Ipv6Addr::new(0xffff, 0xffff, 0, 0, 0, 0, 0, 0));
|
||||||
/// ```
|
/// ```
|
||||||
pub fn mask(&self) -> Ipv6Addr {
|
pub fn mask(&self) -> Ipv6Addr {
|
||||||
// Ipv6Addr::from is only implemented for [u8; 16]
|
|
||||||
let mut segments = [0; 16];
|
let mut segments = [0; 16];
|
||||||
for (i, segment) in segments.iter_mut().enumerate() {
|
for (i, chunk) in segments.chunks_mut(2).enumerate() {
|
||||||
let bits_remaining = self.prefix.saturating_sub(i as u8 * 8);
|
let bits_remaining = self.prefix.saturating_sub(i as u8 * 16);
|
||||||
let set_bits = cmp::min(bits_remaining, 8);
|
let set_bits = cmp::min(bits_remaining, 16);
|
||||||
*segment = !(0xff as u16 >> set_bits) as u8;
|
let mask = !(0xffff >> set_bits) as u16;
|
||||||
|
chunk[0] = (mask >> 8) as u8;
|
||||||
|
chunk[1] = mask as u8;
|
||||||
}
|
}
|
||||||
Ipv6Addr::from(segments)
|
Ipv6Addr::from(segments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Checks if a given `Ipv6Addr` is in this `Ipv6Network`
|
/// Checks if a given `Ipv6Addr` is in this `Ipv6Network`
|
||||||
///
|
///
|
||||||
|
Reference in New Issue
Block a user