Skip to content

Commit 1a8a550

Browse files
c410-f3rmbrubeck
authored andcommitted
Make use of NonNull
1 parent 1b8a145 commit 1a8a550

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

lib.rs

+19-17
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ impl<'a, T: 'a + Array> Drop for Drain<'a, T> {
260260
#[cfg(feature = "union")]
261261
union SmallVecData<A: Array> {
262262
inline: MaybeUninit<A>,
263-
heap: (*mut A::Item, usize),
263+
heap: (NonNull<A::Item>, usize),
264264
}
265265

266266
#[cfg(feature = "union")]
@@ -283,37 +283,39 @@ impl<A: Array> SmallVecData<A> {
283283
}
284284
#[inline]
285285
unsafe fn heap(&self) -> (*mut A::Item, usize) {
286-
self.heap
286+
(self.heap.0.as_ptr(), self.heap.1)
287287
}
288288
#[inline]
289-
unsafe fn heap_mut(&mut self) -> &mut (*mut A::Item, usize) {
290-
&mut self.heap
289+
unsafe fn heap_mut(&mut self) -> (*mut A::Item, &mut usize) {
290+
(self.heap.0.as_ptr(), &mut self.heap.1)
291291
}
292292
#[inline]
293293
fn from_heap(ptr: *mut A::Item, len: usize) -> SmallVecData<A> {
294-
SmallVecData { heap: (ptr, len) }
294+
SmallVecData {
295+
heap: (NonNull::new(ptr).unwrap(), len),
296+
}
295297
}
296298
}
297299

298300
#[cfg(not(feature = "union"))]
299301
enum SmallVecData<A: Array> {
300302
Inline(MaybeUninit<A>),
301-
Heap((*mut A::Item, usize)),
303+
Heap((NonNull<A::Item>, usize)),
302304
}
303305

304306
#[cfg(not(feature = "union"))]
305307
impl<A: Array> SmallVecData<A> {
306308
#[inline]
307309
unsafe fn inline(&self) -> *const A::Item {
308-
match *self {
309-
SmallVecData::Inline(ref a) => a.as_ptr() as *const A::Item,
310+
match self {
311+
SmallVecData::Inline(a) => a.as_ptr() as *const A::Item,
310312
_ => debug_unreachable!(),
311313
}
312314
}
313315
#[inline]
314316
unsafe fn inline_mut(&mut self) -> *mut A::Item {
315-
match *self {
316-
SmallVecData::Inline(ref mut a) => a.as_mut_ptr() as *mut A::Item,
317+
match self {
318+
SmallVecData::Inline(a) => a.as_mut_ptr() as *mut A::Item,
317319
_ => debug_unreachable!(),
318320
}
319321
}
@@ -330,21 +332,21 @@ impl<A: Array> SmallVecData<A> {
330332
}
331333
#[inline]
332334
unsafe fn heap(&self) -> (*mut A::Item, usize) {
333-
match *self {
334-
SmallVecData::Heap(data) => data,
335+
match self {
336+
SmallVecData::Heap(data) => (data.0.as_ptr(), data.1),
335337
_ => debug_unreachable!(),
336338
}
337339
}
338340
#[inline]
339-
unsafe fn heap_mut(&mut self) -> &mut (*mut A::Item, usize) {
340-
match *self {
341-
SmallVecData::Heap(ref mut data) => data,
341+
unsafe fn heap_mut(&mut self) -> (*mut A::Item, &mut usize) {
342+
match self {
343+
SmallVecData::Heap(data) => (data.0.as_ptr(), &mut data.1),
342344
_ => debug_unreachable!(),
343345
}
344346
}
345347
#[inline]
346348
fn from_heap(ptr: *mut A::Item, len: usize) -> SmallVecData<A> {
347-
SmallVecData::Heap((ptr, len))
349+
SmallVecData::Heap((NonNull::new(ptr).unwrap(), len))
348350
}
349351
}
350352

@@ -571,7 +573,7 @@ impl<A: Array> SmallVec<A> {
571573
fn triple_mut(&mut self) -> (*mut A::Item, &mut usize, usize) {
572574
unsafe {
573575
if self.spilled() {
574-
let &mut (ptr, ref mut len_ptr) = self.data.heap_mut();
576+
let (ptr, len_ptr) = self.data.heap_mut();
575577
(ptr, len_ptr, self.capacity)
576578
} else {
577579
(self.data.inline_mut(), &mut self.capacity, A::size())

0 commit comments

Comments
 (0)