diff options
| author | bors <bors@rust-lang.org> | 2013-09-06 03:50:57 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-09-06 03:50:57 -0700 |
| commit | 9298af7e05b5eea00fff5c4dc4b55931a6f7c433 (patch) | |
| tree | c2e5ea40bda4069039b36a95f85f5eb2cfe8e7ef /src/libstd | |
| parent | 25ed29a0edb3d48fef843a0b818ee68faf2252da (diff) | |
| parent | fec6716eec69cf0db650d5b86e51a32a530ae57b (diff) | |
| download | rust-9298af7e05b5eea00fff5c4dc4b55931a6f7c433.tar.gz rust-9298af7e05b5eea00fff5c4dc4b55931a6f7c433.zip | |
auto merge of #9002 : brson/rust/issue-8769, r=catamorphism
This is an unsafe implementation detail of `push`.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/vec.rs | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index f607d1612ad..4cc5c4f14ff 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -1201,8 +1201,6 @@ pub trait OwnedVector<T> { fn shrink_to_fit(&mut self); fn push(&mut self, t: T); - unsafe fn push_fast(&mut self, t: T); - fn push_all_move(&mut self, rhs: ~[T]); fn pop(&mut self) -> T; fn pop_opt(&mut self) -> Option<T>; @@ -1334,7 +1332,7 @@ impl<T> OwnedVector<T> for ~[T] { self.reserve_at_least(new_len); } - self.push_fast(t); + push_fast(self, t); } else { let repr: **Vec<()> = cast::transmute(&mut *self); let fill = (**repr).fill; @@ -1343,29 +1341,30 @@ impl<T> OwnedVector<T> for ~[T] { self.reserve_at_least(new_len); } - self.push_fast(t); + push_fast(self, t); } } - } - // This doesn't bother to make sure we have space. - #[inline] // really pretty please - unsafe fn push_fast(&mut self, t: T) { - if contains_managed::<T>() { - let repr: **mut Box<Vec<u8>> = cast::transmute(self); - let fill = (**repr).data.fill; - (**repr).data.fill += sys::nonzero_size_of::<T>(); - let p = to_unsafe_ptr(&((**repr).data.data)); - let p = ptr::offset(p, fill as int) as *mut T; - intrinsics::move_val_init(&mut(*p), t); - } else { - let repr: **mut Vec<u8> = cast::transmute(self); - let fill = (**repr).fill; - (**repr).fill += sys::nonzero_size_of::<T>(); - let p = to_unsafe_ptr(&((**repr).data)); - let p = ptr::offset(p, fill as int) as *mut T; - intrinsics::move_val_init(&mut(*p), t); + // This doesn't bother to make sure we have space. + #[inline] // really pretty please + unsafe fn push_fast<T>(this: &mut ~[T], t: T) { + if contains_managed::<T>() { + let repr: **mut Box<Vec<u8>> = cast::transmute(this); + let fill = (**repr).data.fill; + (**repr).data.fill += sys::nonzero_size_of::<T>(); + let p = to_unsafe_ptr(&((**repr).data.data)); + let p = ptr::offset(p, fill as int) as *mut T; + intrinsics::move_val_init(&mut(*p), t); + } else { + let repr: **mut Vec<u8> = cast::transmute(this); + let fill = (**repr).fill; + (**repr).fill += sys::nonzero_size_of::<T>(); + let p = to_unsafe_ptr(&((**repr).data)); + let p = ptr::offset(p, fill as int) as *mut T; + intrinsics::move_val_init(&mut(*p), t); + } } + } /// Takes ownership of the vector `rhs`, moving all elements into |
