Skip to content

Commit 7f73f8a

Browse files
committed
Make use of NonNull
1 parent c109e5c commit 7f73f8a

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

lib.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ use core::{
4141
iter::{IntoIterator, FromIterator, repeat},
4242
mem::{ManuallyDrop, self},
4343
ops,
44-
ptr,
44+
ptr::{self, NonNull},
4545
slice,
4646
};
4747
#[cfg(feature = "std")]
@@ -214,7 +214,7 @@ impl<'a, T: 'a> Drop for Drain<'a,T> {
214214
#[cfg(feature = "union")]
215215
union SmallVecData<A: Array> {
216216
inline: ManuallyDrop<A>,
217-
heap: (*mut A::Item, usize),
217+
heap: (NonNull<A::Item>, usize),
218218
}
219219

220220
#[cfg(feature = "union")]
@@ -235,22 +235,22 @@ impl<A: Array> SmallVecData<A> {
235235
unsafe fn into_inline(self) -> A { ManuallyDrop::into_inner(self.inline) }
236236
#[inline]
237237
unsafe fn heap(&self) -> (*mut A::Item, usize) {
238-
self.heap
238+
(self.heap.0.as_ptr(), self.heap.1)
239239
}
240240
#[inline]
241-
unsafe fn heap_mut(&mut self) -> &mut (*mut A::Item, usize) {
242-
&mut self.heap
241+
unsafe fn heap_mut(&mut self) -> (*mut A::Item, &mut usize) {
242+
(self.heap.0.as_ptr(), &mut self.heap.1)
243243
}
244244
#[inline]
245245
fn from_heap(ptr: *mut A::Item, len: usize) -> SmallVecData<A> {
246-
SmallVecData { heap: (ptr, len) }
246+
SmallVecData { heap: (NonNull::new(ptr).unwrap(), len) }
247247
}
248248
}
249249

250250
#[cfg(not(feature = "union"))]
251251
enum SmallVecData<A: Array> {
252252
Inline(ManuallyDrop<A>),
253-
Heap((*mut A::Item, usize)),
253+
Heap((NonNull<A::Item>, usize)),
254254
}
255255

256256
#[cfg(not(feature = "union"))]
@@ -283,20 +283,20 @@ impl<A: Array> SmallVecData<A> {
283283
#[inline]
284284
unsafe fn heap(&self) -> (*mut A::Item, usize) {
285285
match *self {
286-
SmallVecData::Heap(data) => data,
286+
SmallVecData::Heap(data) => (data.0.as_ptr(), data.1),
287287
_ => debug_unreachable!(),
288288
}
289289
}
290290
#[inline]
291-
unsafe fn heap_mut(&mut self) -> &mut (*mut A::Item, usize) {
291+
unsafe fn heap_mut(&mut self) -> (*mut A::Item, &mut usize) {
292292
match *self {
293-
SmallVecData::Heap(ref mut data) => data,
293+
SmallVecData::Heap(ref mut data) => (data.0.as_ptr(), &mut data.1),
294294
_ => debug_unreachable!(),
295295
}
296296
}
297297
#[inline]
298298
fn from_heap(ptr: *mut A::Item, len: usize) -> SmallVecData<A> {
299-
SmallVecData::Heap((ptr, len))
299+
SmallVecData::Heap((NonNull::new(ptr).unwrap(), len))
300300
}
301301
}
302302

@@ -519,7 +519,7 @@ impl<A: Array> SmallVec<A> {
519519
fn triple_mut(&mut self) -> (*mut A::Item, &mut usize, usize) {
520520
unsafe {
521521
if self.spilled() {
522-
let &mut (ptr, ref mut len_ptr) = self.data.heap_mut();
522+
let (ptr, len_ptr) = self.data.heap_mut();
523523
(ptr, len_ptr, self.capacity)
524524
} else {
525525
(self.data.inline_mut().as_mut_ptr(), &mut self.capacity, A::size())

0 commit comments

Comments
 (0)