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