@@ -296,9 +296,11 @@ impl<T> Clone for Bucket<T> {
296
296
}
297
297
298
298
impl < T > Bucket < T > {
299
+ const IS_ZERO_SIZED_TYPE : bool = mem:: size_of :: < T > ( ) == 0 ;
300
+
299
301
#[ inline]
300
302
unsafe fn from_base_index ( base : NonNull < T > , index : usize ) -> Self {
301
- let ptr = if mem :: size_of :: < T > ( ) == 0 {
303
+ let ptr = if Self :: IS_ZERO_SIZED_TYPE {
302
304
// won't overflow because index must be less than length
303
305
( index + 1 ) as * mut T
304
306
} else {
@@ -310,15 +312,15 @@ impl<T> Bucket<T> {
310
312
}
311
313
#[ inline]
312
314
unsafe fn to_base_index ( & self , base : NonNull < T > ) -> usize {
313
- if mem :: size_of :: < T > ( ) == 0 {
315
+ if Self :: IS_ZERO_SIZED_TYPE {
314
316
self . ptr . as_ptr ( ) as usize - 1
315
317
} else {
316
318
offset_from ( base. as_ptr ( ) , self . ptr . as_ptr ( ) )
317
319
}
318
320
}
319
321
#[ inline]
320
322
pub fn as_ptr ( & self ) -> * mut T {
321
- if mem :: size_of :: < T > ( ) == 0 {
323
+ if Self :: IS_ZERO_SIZED_TYPE {
322
324
// Just return an arbitrary ZST pointer which is properly aligned
323
325
mem:: align_of :: < T > ( ) as * mut T
324
326
} else {
@@ -327,7 +329,7 @@ impl<T> Bucket<T> {
327
329
}
328
330
#[ inline]
329
331
unsafe fn next_n ( & self , offset : usize ) -> Self {
330
- let ptr = if mem :: size_of :: < T > ( ) == 0 {
332
+ let ptr = if Self :: IS_ZERO_SIZED_TYPE {
331
333
( self . ptr . as_ptr ( ) as usize + offset) as * mut T
332
334
} else {
333
335
self . ptr . as_ptr ( ) . sub ( offset)
0 commit comments