Skip to content

Commit 9301e2e

Browse files
author
Clar Charr
committed
Comparison between IpAddr and Ipv[46]Addr.
1 parent 00b4019 commit 9301e2e

File tree

1 file changed

+100
-4
lines changed

1 file changed

+100
-4
lines changed

src/libstd/net/ip.rs

+100-4
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,26 @@ impl PartialEq for Ipv4Addr {
551551
}
552552
}
553553

554+
#[stable(feature = "ip_cmp", since = "1.15.0")]
555+
impl PartialEq<Ipv4Addr> for IpAddr {
556+
fn eq(&self, other: &Ipv4Addr) -> bool {
557+
match *self {
558+
IpAddr::V4(ref v4) => v4 == other,
559+
IpAddr::V6(_) => false,
560+
}
561+
}
562+
}
563+
564+
#[stable(feature = "ip_cmp", since = "1.15.0")]
565+
impl PartialEq<IpAddr> for Ipv4Addr {
566+
fn eq(&self, other: &IpAddr) -> bool {
567+
match *other {
568+
IpAddr::V4(ref v4) => self == v4,
569+
IpAddr::V6(_) => false,
570+
}
571+
}
572+
}
573+
554574
#[stable(feature = "rust1", since = "1.0.0")]
555575
impl Eq for Ipv4Addr {}
556576

@@ -568,6 +588,26 @@ impl PartialOrd for Ipv4Addr {
568588
}
569589
}
570590

591+
#[stable(feature = "ip_cmp", since = "1.15.0")]
592+
impl PartialOrd<Ipv4Addr> for IpAddr {
593+
fn partial_cmp(&self, other: &Ipv4Addr) -> Option<Ordering> {
594+
match *self {
595+
IpAddr::V4(ref v4) => v4.partial_cmp(other),
596+
IpAddr::V6(_) => Some(Ordering::Greater),
597+
}
598+
}
599+
}
600+
601+
#[stable(feature = "ip_cmp", since = "1.15.0")]
602+
impl PartialOrd<IpAddr> for Ipv4Addr {
603+
fn partial_cmp(&self, other: &IpAddr) -> Option<Ordering> {
604+
match *other {
605+
IpAddr::V4(ref v4) => self.partial_cmp(v4),
606+
IpAddr::V6(_) => Some(Ordering::Less),
607+
}
608+
}
609+
}
610+
571611
#[stable(feature = "rust1", since = "1.0.0")]
572612
impl Ord for Ipv4Addr {
573613
fn cmp(&self, other: &Ipv4Addr) -> Ordering {
@@ -1026,6 +1066,26 @@ impl PartialEq for Ipv6Addr {
10261066
}
10271067
}
10281068

1069+
#[stable(feature = "ip_cmp", since = "1.15.0")]
1070+
impl PartialEq<IpAddr> for Ipv6Addr {
1071+
fn eq(&self, other: &IpAddr) -> bool {
1072+
match *other {
1073+
IpAddr::V4(_) => false,
1074+
IpAddr::V6(ref v6) => self == v6,
1075+
}
1076+
}
1077+
}
1078+
1079+
#[stable(feature = "ip_cmp", since = "1.15.0")]
1080+
impl PartialEq<Ipv6Addr> for IpAddr {
1081+
fn eq(&self, other: &Ipv6Addr) -> bool {
1082+
match *self {
1083+
IpAddr::V4(_) => false,
1084+
IpAddr::V6(ref v6) => v6 == other,
1085+
}
1086+
}
1087+
}
1088+
10291089
#[stable(feature = "rust1", since = "1.0.0")]
10301090
impl Eq for Ipv6Addr {}
10311091

@@ -1043,6 +1103,26 @@ impl PartialOrd for Ipv6Addr {
10431103
}
10441104
}
10451105

1106+
#[stable(feature = "ip_cmp", since = "1.15.0")]
1107+
impl PartialOrd<Ipv6Addr> for IpAddr {
1108+
fn partial_cmp(&self, other: &Ipv6Addr) -> Option<Ordering> {
1109+
match *self {
1110+
IpAddr::V4(_) => Some(Ordering::Less),
1111+
IpAddr::V6(ref v6) => v6.partial_cmp(other),
1112+
}
1113+
}
1114+
}
1115+
1116+
#[stable(feature = "ip_cmp", since = "1.15.0")]
1117+
impl PartialOrd<IpAddr> for Ipv6Addr {
1118+
fn partial_cmp(&self, other: &IpAddr) -> Option<Ordering> {
1119+
match *other {
1120+
IpAddr::V4(_) => Some(Ordering::Greater),
1121+
IpAddr::V6(ref v6) => self.partial_cmp(v6),
1122+
}
1123+
}
1124+
}
1125+
10461126
#[stable(feature = "rust1", since = "1.0.0")]
10471127
impl Ord for Ipv6Addr {
10481128
fn cmp(&self, other: &Ipv6Addr) -> Ordering {
@@ -1444,10 +1524,26 @@ mod tests {
14441524
}
14451525

14461526
#[test]
1447-
fn ord() {
1448-
assert!(Ipv4Addr::new(100, 64, 3, 3) < Ipv4Addr::new(192, 0, 2, 2));
1449-
assert!("2001:db8:f00::1002".parse::<Ipv6Addr>().unwrap() <
1450-
"2001:db8:f00::2001".parse::<Ipv6Addr>().unwrap());
1527+
fn cmp() {
1528+
let v41 = Ipv4Addr::new(100, 64, 3, 3);
1529+
let v42 = Ipv4Addr::new(192, 0, 2, 2);
1530+
let v61 = "2001:db8:f00::1002".parse::<Ipv6Addr>().unwrap();
1531+
let v62 = "2001:db8:f00::2001".parse::<Ipv6Addr>().unwrap();
1532+
assert!(v41 < v42);
1533+
assert!(v61 < v62);
1534+
1535+
assert_eq!(v41, IpAddr::V4(v41));
1536+
assert_eq!(v61, IpAddr::V6(v61));
1537+
assert!(v41 != IpAddr::V4(v42));
1538+
assert!(v61 != IpAddr::V6(v62));
1539+
1540+
assert!(v41 < IpAddr::V4(v42));
1541+
assert!(v61 < IpAddr::V6(v62));
1542+
assert!(IpAddr::V4(v41) < v42);
1543+
assert!(IpAddr::V6(v61) < v62);
1544+
1545+
assert!(v41 < IpAddr::V6(v61));
1546+
assert!(IpAddr::V4(v41) < v61);
14511547
}
14521548

14531549
#[test]

0 commit comments

Comments
 (0)