@@ -542,10 +542,13 @@ impl Ipv4Addr {
542
542
/// assert_eq!(Ipv4Addr::new(1, 1, 1, 1).is_global(), true);
543
543
/// assert_eq!(Ipv4Addr::new(80, 9, 12, 3).is_global(), true);
544
544
/// ```
545
- pub fn is_global ( & self ) -> bool {
545
+ #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
546
+ pub const fn is_global ( & self ) -> bool {
546
547
// check if this address is 192.0.0.9 or 192.0.0.10. These addresses are the only two
547
548
// globally routable addresses in the 192.0.0.0/24 range.
548
- if u32:: from ( * self ) == 0xc0000009 || u32:: from ( * self ) == 0xc000000a {
549
+ if u32:: from_be_bytes ( self . octets ( ) ) == 0xc0000009
550
+ || u32:: from_be_bytes ( self . octets ( ) ) == 0xc000000a
551
+ {
549
552
return true ;
550
553
}
551
554
!self . is_private ( )
@@ -667,7 +670,8 @@ impl Ipv4Addr {
667
670
/// // The broadcast address is not considered as reserved for future use by this implementation
668
671
/// assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_reserved(), false);
669
672
/// ```
670
- pub fn is_reserved ( & self ) -> bool {
673
+ #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
674
+ pub const fn is_reserved ( & self ) -> bool {
671
675
self . octets ( ) [ 0 ] & 240 == 240 && !self . is_broadcast ( )
672
676
}
673
677
@@ -709,9 +713,10 @@ impl Ipv4Addr {
709
713
/// assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_broadcast(), true);
710
714
/// assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_broadcast(), false);
711
715
/// ```
716
+ #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
712
717
#[ stable( since = "1.7.0" , feature = "ip_17" ) ]
713
- pub fn is_broadcast ( & self ) -> bool {
714
- self == & Self :: BROADCAST
718
+ pub const fn is_broadcast ( & self ) -> bool {
719
+ u32 :: from_be_bytes ( self . octets ( ) ) == u32 :: from_be_bytes ( Self :: BROADCAST . octets ( ) )
715
720
}
716
721
717
722
/// Returns [`true`] if this address is in a range designated for documentation.
@@ -762,10 +767,13 @@ impl Ipv4Addr {
762
767
/// Ipv6Addr::new(0, 0, 0, 0, 0, 0, 49152, 767)
763
768
/// );
764
769
/// ```
770
+ #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
765
771
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
766
- pub fn to_ipv6_compatible ( & self ) -> Ipv6Addr {
772
+ pub const fn to_ipv6_compatible ( & self ) -> Ipv6Addr {
767
773
let [ a, b, c, d] = self . octets ( ) ;
768
- Ipv6Addr :: from ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , a, b, c, d] )
774
+ Ipv6Addr {
775
+ inner : c:: in6_addr { s6_addr : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , a, b, c, d] } ,
776
+ }
769
777
}
770
778
771
779
/// Converts this address to an IPv4-mapped [`IPv6` address].
@@ -782,10 +790,13 @@ impl Ipv4Addr {
782
790
/// assert_eq!(Ipv4Addr::new(192, 0, 2, 255).to_ipv6_mapped(),
783
791
/// Ipv6Addr::new(0, 0, 0, 0, 0, 65535, 49152, 767));
784
792
/// ```
793
+ #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
785
794
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
786
- pub fn to_ipv6_mapped ( & self ) -> Ipv6Addr {
795
+ pub const fn to_ipv6_mapped ( & self ) -> Ipv6Addr {
787
796
let [ a, b, c, d] = self . octets ( ) ;
788
- Ipv6Addr :: from ( [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0xFF , 0xFF , a, b, c, d] )
797
+ Ipv6Addr {
798
+ inner : c:: in6_addr { s6_addr : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0xFF , 0xFF , a, b, c, d] } ,
799
+ }
789
800
}
790
801
}
791
802
0 commit comments