@@ -55,6 +55,9 @@ impl<A: Aliasing, AA: Alignment, V: Validity> Invariants for (A, AA, V) {
55
55
}
56
56
57
57
/// The aliasing invariant of a [`Ptr`][super::Ptr].
58
+ ///
59
+ /// All aliasing invariants must permit reading from the bytes of a pointer's
60
+ /// referent which are not covered by [`UnsafeCell`]s.
58
61
pub trait Aliasing : Sealed {
59
62
/// Is `Self` [`Exclusive`]?
60
63
#[ doc( hidden) ]
@@ -65,9 +68,6 @@ pub trait Aliasing: Sealed {
65
68
/// Aliasing>::Variance<'a, T>` to inherit this variance.
66
69
#[ doc( hidden) ]
67
70
type Variance < ' a , T : ' a + ?Sized > ;
68
-
69
- #[ doc( hidden) ]
70
- type MappedTo < M : AliasingMapping > : Aliasing ;
71
71
}
72
72
73
73
/// The alignment invariant of a [`Ptr`][super::Ptr].
@@ -113,7 +113,6 @@ impl Aliasing for Inaccessible {
113
113
//
114
114
// [1] https://doc.rust-lang.org/1.81.0/reference/subtyping.html#variance
115
115
type Variance < ' a , T : ' a + ?Sized > = & ' a T ;
116
- type MappedTo < M : AliasingMapping > = M :: FromInaccessible ;
117
116
}
118
117
119
118
/// The `Ptr<'a, T>` adheres to the aliasing rules of a `&'a T`.
@@ -128,7 +127,6 @@ pub enum Shared {}
128
127
impl Aliasing for Shared {
129
128
const IS_EXCLUSIVE : bool = false ;
130
129
type Variance < ' a , T : ' a + ?Sized > = & ' a T ;
131
- type MappedTo < M : AliasingMapping > = M :: FromShared ;
132
130
}
133
131
impl Reference for Shared { }
134
132
@@ -141,7 +139,6 @@ pub enum Exclusive {}
141
139
impl Aliasing for Exclusive {
142
140
const IS_EXCLUSIVE : bool = true ;
143
141
type Variance < ' a , T : ' a + ?Sized > = & ' a mut T ;
144
- type MappedTo < M : AliasingMapping > = M :: FromExclusive ;
145
142
}
146
143
impl Reference for Exclusive { }
147
144
@@ -230,7 +227,7 @@ define_because!(
230
227
pub BecauseImmutable
231
228
) ;
232
229
// SAFETY: `T: Immutable`.
233
- unsafe impl < A : Reference , T : ?Sized + crate :: Immutable > Read < A , BecauseImmutable > for T { }
230
+ unsafe impl < A : Aliasing , T : ?Sized + crate :: Immutable > Read < A , BecauseImmutable > for T { }
234
231
235
232
use sealed:: Sealed ;
236
233
mod sealed {
@@ -257,23 +254,6 @@ pub use mapping::*;
257
254
mod mapping {
258
255
use super :: * ;
259
256
260
- /// A mapping from one [`Aliasing`] type to another.
261
- ///
262
- /// An `AliasingMapping` is a type-level map which maps one `Aliasing` type
263
- /// to another. It is always "total" in the sense of having a mapping for
264
- /// any `A: Aliasing`.
265
- ///
266
- /// Given `A: Aliasing` and `M: AliasingMapping`, `M` can be applied to `A`
267
- /// as [`MappedAliasing<A, M>`](MappedAliasing).
268
- ///
269
- /// Mappings are used by [`Ptr`](crate::Ptr) conversion methods to preserve
270
- /// or modify invariants as required by each method's semantics.
271
- pub trait AliasingMapping {
272
- type FromInaccessible : Aliasing ;
273
- type FromShared : Aliasing ;
274
- type FromExclusive : Aliasing ;
275
- }
276
-
277
257
/// A mapping from one [`Alignment`] type to another.
278
258
///
279
259
/// An `AlignmentMapping` is a type-level map which maps one `Alignment`
@@ -308,10 +288,6 @@ mod mapping {
308
288
type FromValid : Validity ;
309
289
}
310
290
311
- /// The application of the [`AliasingMapping`] `M` to the [`Aliasing`] `A`.
312
- #[ allow( type_alias_bounds) ]
313
- pub type MappedAliasing < A : Aliasing , M : AliasingMapping > = A :: MappedTo < M > ;
314
-
315
291
/// The application of the [`AlignmentMapping`] `M` to the [`Alignment`] `A`.
316
292
#[ allow( type_alias_bounds) ]
317
293
pub type MappedAlignment < A : Alignment , M : AlignmentMapping > = A :: MappedTo < M > ;
@@ -320,14 +296,6 @@ mod mapping {
320
296
#[ allow( type_alias_bounds) ]
321
297
pub type MappedValidity < V : Validity , M : ValidityMapping > = V :: MappedTo < M > ;
322
298
323
- impl < FromInaccessible : Aliasing , FromShared : Aliasing , FromExclusive : Aliasing > AliasingMapping
324
- for ( ( Inaccessible , FromInaccessible ) , ( Shared , FromShared ) , ( Exclusive , FromExclusive ) )
325
- {
326
- type FromInaccessible = FromInaccessible ;
327
- type FromShared = FromShared ;
328
- type FromExclusive = FromExclusive ;
329
- }
330
-
331
299
impl < FromUnknown : Alignment , FromAligned : Alignment > AlignmentMapping
332
300
for ( ( Unknown , FromUnknown ) , ( Shared , FromAligned ) )
333
301
{
0 commit comments