Rollup merge of #128946 - orlp:faster-ip-hash, r=joboet · patricklam/verify-rust-std@16dd426 (original) (raw)
1
1
`use super::display_buffer::DisplayBuffer;
`
2
2
`use crate::cmp::Ordering;
`
3
3
`use crate::fmt::{self, Write};
`
``
4
`+
use crate::hash::{Hash, Hasher};
`
4
5
`use crate::iter;
`
5
6
`use crate::mem::transmute;
`
6
7
`use crate::ops::{BitAnd, BitAndAssign, BitOr, BitOrAssign, Not};
`
`@@ -67,12 +68,22 @@ pub enum IpAddr {
`
67
68
`/// assert!("0000000.0.0.0".parse::().is_err()); // first octet is a zero in octal
`
68
69
`/// assert!("0xcb.0x0.0x71.0x00".parse::().is_err()); // all octets are in hex
`
69
70
```` /// ```
`70`
``
`-
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
`
``
`71`
`+
#[derive(Copy, Clone, PartialEq, Eq)]
`
`71`
`72`
`#[stable(feature = "rust1", since = "1.0.0")]
`
`72`
`73`
`pub struct Ipv4Addr {
`
`73`
`74`
`octets: [u8; 4],
`
`74`
`75`
`}
`
`75`
`76`
``
``
`77`
`+
#[stable(feature = "rust1", since = "1.0.0")]
`
``
`78`
`+
impl Hash for Ipv4Addr {
`
``
`79`
`+
fn hash<H: Hasher>(&self, state: &mut H) {
`
``
`80`
`+
// Hashers are often more efficient at hashing a fixed-width integer
`
``
`81`
`+
// than a bytestring, so convert before hashing. We don't use to_bits()
`
``
`82`
`+
// here as that may involve a byteswap which is unnecessary.
`
``
`83`
`+
u32::from_ne_bytes(self.octets).hash(state);
`
``
`84`
`+
}
`
``
`85`
`+
}
`
``
`86`
`+`
`76`
`87`
`/// An IPv6 address.
`
`77`
`88`
`///
`
`78`
`89`
`/// IPv6 addresses are defined as 128-bit integers in [IETF RFC 4291].
`
`@@ -149,12 +160,22 @@ pub struct Ipv4Addr {
`
`149`
`160`
`/// assert_eq!("::1".parse(), Ok(localhost));
`
`150`
`161`
`/// assert_eq!(localhost.is_loopback(), true);
`
`151`
`162`
```` /// ```
152
``
`-
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
`
``
163
`+
#[derive(Copy, Clone, PartialEq, Eq)]
`
153
164
`#[stable(feature = "rust1", since = "1.0.0")]
`
154
165
`pub struct Ipv6Addr {
`
155
166
`octets: [u8; 16],
`
156
167
`}
`
157
168
``
``
169
`+
#[stable(feature = "rust1", since = "1.0.0")]
`
``
170
`+
impl Hash for Ipv6Addr {
`
``
171
`+
fn hash<H: Hasher>(&self, state: &mut H) {
`
``
172
`+
// Hashers are often more efficient at hashing a fixed-width integer
`
``
173
`+
// than a bytestring, so convert before hashing. We don't use to_bits()
`
``
174
`+
// here as that may involve unnecessary byteswaps.
`
``
175
`+
u128::from_ne_bytes(self.octets).hash(state);
`
``
176
`+
}
`
``
177
`+
}
`
``
178
+
158
179
`/// Scope of an [IPv6 multicast address] as defined in [IETF RFC 7346 section 2].
`
159
180
`///
`
160
181
`/// # Stability Guarantees
`