From 4e14df11336c7ca561e57227360771eaf2fc3eea Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 14 Nov 2024 20:39:39 +0000 Subject: [PATCH] owned --- src/lib.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 65d4f20..c651a81 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,10 +16,10 @@ pub struct NoAliasSingleton { /// /// Implemented for `NoAliasSingleton` and the ZST reference tokens, /// and `&`-references to them. -pub unsafe trait IsRefToken<'a> { +pub unsafe trait IsRefToken<'a>: Sized { /// Obtain a new ZST token from something that might be a real object. #[inline] - fn ref_token(&'a self) -> RefToken<'a> { + fn ref_token(self) -> RefToken<'a> { RefToken(PhantomData) } } @@ -28,17 +28,17 @@ pub unsafe trait IsRefToken<'a> { /// /// Implemented for `NoAliasSingleton` and `MutToken`, /// and `&mut`-references to them. -pub unsafe trait IsMutToken<'a>: IsRefToken<'a> { +pub unsafe trait IsMutToken<'a>: IsRefToken<'a> + Sized { /// Obtain a new ZST token from something that might be a real object. #[inline] - fn mut_token<'r, 's>(&'s mut self) -> MutToken<'r> + fn mut_token<'r, 's>(mut self) -> MutToken<'r> where 's: 'r, 'a: 'r, { MutToken(PhantomData) } - fn multi_static<'r, 's>(&'s mut self) -> MultiStatic<'r, ()> - where 's: 'r, 'a: 'r, + fn multi_static<'r>(mut self) -> MultiStatic<'r, ()> + where 'a: 'r, { MultiStatic { tok: self.mut_token(), @@ -46,8 +46,9 @@ pub unsafe trait IsMutToken<'a>: IsRefToken<'a> { } } } -unsafe impl<'a> IsRefToken<'a> for NoAliasSingleton {} -unsafe impl<'a> IsMutToken<'a> for NoAliasSingleton {} +unsafe impl<'a> IsRefToken<'a> for &'a NoAliasSingleton {} +unsafe impl<'a> IsRefToken<'a> for &'a mut NoAliasSingleton {} +unsafe impl<'a> IsMutToken<'a> for &'a mut NoAliasSingleton {} unsafe impl<'a> IsRefToken<'a> for RefToken<'a> {} unsafe impl<'a> IsRefToken<'a> for MutToken<'a> {} unsafe impl<'a> IsMutToken<'a> for MutToken<'a> {} -- 2.30.2