@@ -2008,187 +2008,98 @@ mod impls {
2008
2008
}
2009
2009
}
2010
2010
2011
- // & pointers
2011
+ // reference types
2012
2012
2013
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2014
- #[ rustc_const_unstable( feature = "const_cmp" , issue = "92391" ) ]
2015
- impl < A : PointeeSized , B : PointeeSized > const PartialEq < & B > for & A
2016
- where
2017
- A : ~const PartialEq < B > ,
2018
- {
2019
- #[ inline]
2020
- fn eq ( & self , other : & & B ) -> bool {
2021
- PartialEq :: eq ( * self , * other)
2022
- }
2023
- // if <A as PartialEq<B>>::ne uses inline assembly or FFI, then
2024
- // this forwarding impl may be more efficient than the default impl
2025
- #[ inline]
2026
- fn ne ( & self , other : & & B ) -> bool {
2027
- PartialEq :: ne ( * self , * other)
2028
- }
2029
- }
2030
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2031
- impl < A : PointeeSized , B : PointeeSized > PartialOrd < & B > for & A
2032
- where
2033
- A : PartialOrd < B > ,
2034
- {
2035
- #[ inline]
2036
- fn partial_cmp ( & self , other : & & B ) -> Option < Ordering > {
2037
- PartialOrd :: partial_cmp ( * self , * other)
2038
- }
2039
- #[ inline]
2040
- fn lt ( & self , other : & & B ) -> bool {
2041
- PartialOrd :: lt ( * self , * other)
2042
- }
2043
- #[ inline]
2044
- fn le ( & self , other : & & B ) -> bool {
2045
- PartialOrd :: le ( * self , * other)
2046
- }
2047
- #[ inline]
2048
- fn gt ( & self , other : & & B ) -> bool {
2049
- PartialOrd :: gt ( * self , * other)
2050
- }
2051
- #[ inline]
2052
- fn ge ( & self , other : & & B ) -> bool {
2053
- PartialOrd :: ge ( * self , * other)
2054
- }
2055
- #[ inline]
2056
- fn __chaining_lt ( & self , other : & & B ) -> ControlFlow < bool > {
2057
- PartialOrd :: __chaining_lt ( * self , * other)
2058
- }
2059
- #[ inline]
2060
- fn __chaining_le ( & self , other : & & B ) -> ControlFlow < bool > {
2061
- PartialOrd :: __chaining_le ( * self , * other)
2062
- }
2063
- #[ inline]
2064
- fn __chaining_gt ( & self , other : & & B ) -> ControlFlow < bool > {
2065
- PartialOrd :: __chaining_gt ( * self , * other)
2066
- }
2067
- #[ inline]
2068
- fn __chaining_ge ( & self , other : & & B ) -> ControlFlow < bool > {
2069
- PartialOrd :: __chaining_ge ( * self , * other)
2070
- }
2071
- }
2072
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2073
- impl < A : PointeeSized > Ord for & A
2074
- where
2075
- A : Ord ,
2076
- {
2077
- #[ inline]
2078
- fn cmp ( & self , other : & Self ) -> Ordering {
2079
- Ord :: cmp ( * self , * other)
2080
- }
2013
+ macro_rules! partial_eq_impl {
2014
+ ( $( ( $ref_A: ty => $A: ident, $ref_B: ty => $B: ident) ) * ) => ( $(
2015
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2016
+ #[ rustc_const_unstable( feature = "const_cmp" , issue = "92391" ) ]
2017
+ impl <$A, $B> const PartialEq <$ref_B> for $ref_A
2018
+ where
2019
+ $A: ~const PartialEq <$B> + PointeeSized ,
2020
+ $B: PointeeSized ,
2021
+ {
2022
+ #[ inline]
2023
+ fn eq( & self , other: & $ref_B) -> bool {
2024
+ PartialEq :: eq( * self , * other)
2025
+ }
2026
+ // if <A as PartialEq<B>>::ne uses inline assembly or FFI, then
2027
+ // this forwarding impl may be more efficient than the default impl
2028
+ #[ inline]
2029
+ fn ne( & self , other: & $ref_B) -> bool {
2030
+ PartialEq :: ne( * self , * other)
2031
+ }
2032
+ }
2033
+ ) * )
2081
2034
}
2082
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2083
- impl < A : PointeeSized > Eq for & A where A : Eq { }
2084
2035
2085
- // & mut pointers
2036
+ partial_eq_impl ! ( ( & A => A , & B => B ) ( & A => A , & mut B => B ) ( & mut A => A , & B => B ) ( & mut A => A , & mut B => B ) ) ;
2086
2037
2087
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2088
- #[ rustc_const_unstable( feature = "const_cmp" , issue = "92391" ) ]
2089
- impl < A : PointeeSized , B : PointeeSized > const PartialEq < & mut B > for & mut A
2090
- where
2091
- A : ~const PartialEq < B > ,
2092
- {
2093
- #[ inline]
2094
- fn eq ( & self , other : & & mut B ) -> bool {
2095
- PartialEq :: eq ( * self , * other)
2096
- }
2097
- // if <A as PartialEq<B>>::ne uses inline assembly or FFI, then
2098
- // this forwarding impl may be more efficient than the default impl
2099
- #[ inline]
2100
- fn ne ( & self , other : & & mut B ) -> bool {
2101
- PartialEq :: ne ( * self , * other)
2102
- }
2103
- }
2104
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2105
- impl < A : PointeeSized , B : PointeeSized > PartialOrd < & mut B > for & mut A
2106
- where
2107
- A : PartialOrd < B > ,
2108
- {
2109
- #[ inline]
2110
- fn partial_cmp ( & self , other : & & mut B ) -> Option < Ordering > {
2111
- PartialOrd :: partial_cmp ( * self , * other)
2112
- }
2113
- #[ inline]
2114
- fn lt ( & self , other : & & mut B ) -> bool {
2115
- PartialOrd :: lt ( * self , * other)
2116
- }
2117
- #[ inline]
2118
- fn le ( & self , other : & & mut B ) -> bool {
2119
- PartialOrd :: le ( * self , * other)
2120
- }
2121
- #[ inline]
2122
- fn gt ( & self , other : & & mut B ) -> bool {
2123
- PartialOrd :: gt ( * self , * other)
2124
- }
2125
- #[ inline]
2126
- fn ge ( & self , other : & & mut B ) -> bool {
2127
- PartialOrd :: ge ( * self , * other)
2128
- }
2129
- #[ inline]
2130
- fn __chaining_lt ( & self , other : & & mut B ) -> ControlFlow < bool > {
2131
- PartialOrd :: __chaining_lt ( * self , * other)
2132
- }
2133
- #[ inline]
2134
- fn __chaining_le ( & self , other : & & mut B ) -> ControlFlow < bool > {
2135
- PartialOrd :: __chaining_le ( * self , * other)
2136
- }
2137
- #[ inline]
2138
- fn __chaining_gt ( & self , other : & & mut B ) -> ControlFlow < bool > {
2139
- PartialOrd :: __chaining_gt ( * self , * other)
2140
- }
2141
- #[ inline]
2142
- fn __chaining_ge ( & self , other : & & mut B ) -> ControlFlow < bool > {
2143
- PartialOrd :: __chaining_ge ( * self , * other)
2144
- }
2145
- }
2146
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2147
- impl < A : PointeeSized > Ord for & mut A
2148
- where
2149
- A : Ord ,
2150
- {
2151
- #[ inline]
2152
- fn cmp ( & self , other : & Self ) -> Ordering {
2153
- Ord :: cmp ( * self , * other)
2154
- }
2038
+ macro_rules! partial_ord_impl {
2039
+ ( $( ( $ref_A: ty => $A: ident, $ref_B: ty => $B: ident) ) * ) => ( $(
2040
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2041
+ impl <$A, $B> PartialOrd <$ref_B> for $ref_A
2042
+ where
2043
+ $A: PartialOrd <$B> + PointeeSized ,
2044
+ $B: PointeeSized ,
2045
+ {
2046
+ #[ inline]
2047
+ fn partial_cmp( & self , other: & $ref_B) -> Option <Ordering > {
2048
+ PartialOrd :: partial_cmp( * self , * other)
2049
+ }
2050
+ #[ inline]
2051
+ fn lt( & self , other: & $ref_B) -> bool {
2052
+ PartialOrd :: lt( * self , * other)
2053
+ }
2054
+ #[ inline]
2055
+ fn le( & self , other: & $ref_B) -> bool {
2056
+ PartialOrd :: le( * self , * other)
2057
+ }
2058
+ #[ inline]
2059
+ fn gt( & self , other: & $ref_B) -> bool {
2060
+ PartialOrd :: gt( * self , * other)
2061
+ }
2062
+ #[ inline]
2063
+ fn ge( & self , other: & $ref_B) -> bool {
2064
+ PartialOrd :: ge( * self , * other)
2065
+ }
2066
+ #[ inline]
2067
+ fn __chaining_lt( & self , other: & $ref_B) -> ControlFlow <bool > {
2068
+ PartialOrd :: __chaining_lt( * self , * other)
2069
+ }
2070
+ #[ inline]
2071
+ fn __chaining_le( & self , other: & $ref_B) -> ControlFlow <bool > {
2072
+ PartialOrd :: __chaining_le( * self , * other)
2073
+ }
2074
+ #[ inline]
2075
+ fn __chaining_gt( & self , other: & $ref_B) -> ControlFlow <bool > {
2076
+ PartialOrd :: __chaining_gt( * self , * other)
2077
+ }
2078
+ #[ inline]
2079
+ fn __chaining_ge( & self , other: & $ref_B) -> ControlFlow <bool > {
2080
+ PartialOrd :: __chaining_ge( * self , * other)
2081
+ }
2082
+ }
2083
+ ) * )
2155
2084
}
2156
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2157
- impl < A : PointeeSized > Eq for & mut A where A : Eq { }
2158
2085
2159
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2160
- #[ rustc_const_unstable( feature = "const_cmp" , issue = "92391" ) ]
2161
- impl < A : PointeeSized , B : PointeeSized > const PartialEq < & mut B > for & A
2162
- where
2163
- A : ~const PartialEq < B > ,
2164
- {
2165
- #[ inline]
2166
- fn eq ( & self , other : & & mut B ) -> bool {
2167
- PartialEq :: eq ( * self , * other)
2168
- }
2169
- // if <A as PartialEq<B>>::ne uses inline assembly or FFI, then
2170
- // this forwarding impl may be more efficient than the default impl
2171
- #[ inline]
2172
- fn ne ( & self , other : & & mut B ) -> bool {
2173
- PartialEq :: ne ( * self , * other)
2174
- }
2175
- }
2086
+ partial_ord_impl ! ( ( & A => A , & B => B ) /*(&A => A, &mut B => B) (&mut A => A, &B => B)*/ ( & mut A => A , & mut B => B ) ) ;
2176
2087
2177
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2178
- #[ rustc_const_unstable( feature = "const_cmp" , issue = "92391" ) ]
2179
- impl < A : PointeeSized , B : PointeeSized > const PartialEq < & B > for & mut A
2180
- where
2181
- A : ~const PartialEq < B > ,
2182
- {
2183
- #[ inline]
2184
- fn eq ( & self , other : & & B ) -> bool {
2185
- PartialEq :: eq ( * self , * other)
2186
- }
2187
- // if <A as PartialEq<B>>::ne uses inline assembly or FFI, then
2188
- // this forwarding impl may be more efficient than the default impl
2189
- #[ inline]
2190
- fn ne ( & self , other : & & B ) -> bool {
2191
- PartialEq :: ne ( * self , * other)
2192
- }
2088
+ macro_rules! ord_eq_impl {
2089
+ ( $( $ref_A: ty => $A: ident) ,* ) => ( $(
2090
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2091
+ impl <$A: Ord + PointeeSized > Ord for $ref_A
2092
+ {
2093
+ #[ inline]
2094
+ fn cmp( & self , other: & Self ) -> Ordering {
2095
+ Ord :: cmp( * self , * other)
2096
+ }
2097
+ }
2098
+
2099
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
2100
+ impl <$A: Eq + PointeeSized > Eq for $ref_A { }
2101
+ ) * )
2193
2102
}
2103
+
2104
+ ord_eq_impl ! ( & A => A , & mut A => A ) ;
2194
2105
}
0 commit comments