Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/drain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ impl<T> Drop for Drain<'_, T> {
// a pointer with mutable provenance is necessary. Therefore we must reconstruct
// it from the original vec but also avoid creating a &mut to the front since that could
// invalidate raw pointers to it which some unsafe code might rely on.
let vec_ptr = vec.as_mut().as_mut_ptr();
let vec_ptr = vec.as_mut().data.as_ptr();
let drop_offset = sub_ptr(drop_ptr, vec_ptr);
let to_drop = ptr::slice_from_raw_parts_mut(vec_ptr.add(drop_offset), drop_len);
ptr::drop_in_place(to_drop);
Expand All @@ -149,4 +149,3 @@ fn sub_ptr<T>(a: *const T, b: *const T) -> usize {
}

impl<T> FusedIterator for Drain<'_, T> {}

8 changes: 4 additions & 4 deletions src/splice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ impl<T> Drain<'_, T> {
let range_start = vec.header.len as usize;
let range_end = self.tail_start as usize;
let range_slice = unsafe {
slice::from_raw_parts_mut(vec.as_mut_ptr().add(range_start), range_end - range_start)
slice::from_raw_parts_mut(vec.data.as_ptr().add(range_start), range_end - range_start)
};

for place in range_slice {
Expand All @@ -126,10 +126,10 @@ impl<T> Drain<'_, T> {

let new_tail_start = self.tail_start + additional;
unsafe {
let src = vec.as_ptr().add(self.tail_start);
let dst = vec.as_mut_ptr().add(new_tail_start);
let src = vec.data.as_ptr().add(self.tail_start);
let dst = vec.data.as_ptr().add(new_tail_start);
ptr::copy(src, dst, self.tail_len);
}
self.tail_start = new_tail_start;
}
}
}
2 changes: 1 addition & 1 deletion src/vector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,7 @@ impl<T> RawVector<T> {
unsafe {
// Set self.vec length's to start, to be safe in case Drain is leaked
self.header.len = start as u32;
let range_slice = core::slice::from_raw_parts(self.as_ptr().add(start), end - start);
let range_slice = core::slice::from_raw_parts(self.data.as_ptr().add(start), end - start);
Drain {
tail_start: end,
tail_len: len - end,
Expand Down
Loading