commit
355bbfb895
4 changed files with 28 additions and 11 deletions
|
|
@ -167,12 +167,22 @@ use vec::{self, Vec};
|
|||
/// item's ordering relative to any other item, as determined by the `Ord`
|
||||
/// trait, changes while it is in the heap. This is normally only possible
|
||||
/// through `Cell`, `RefCell`, global state, I/O, or unsafe code.
|
||||
#[derive(Clone)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub struct BinaryHeap<T> {
|
||||
data: Vec<T>,
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: Clone> Clone for BinaryHeap<T> {
|
||||
fn clone(&self) -> Self {
|
||||
BinaryHeap { data: self.data.clone() }
|
||||
}
|
||||
|
||||
fn clone_from(&mut self, source: &Self) {
|
||||
self.data.clone_from(&source.data);
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: Ord> Default for BinaryHeap<T> {
|
||||
#[inline]
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
#![feature(unsafe_no_drop_flag, filling_drop)]
|
||||
#![feature(decode_utf16)]
|
||||
#![feature(utf8_error)]
|
||||
#![cfg_attr(test, feature(rand, test))]
|
||||
#![cfg_attr(test, feature(clone_from_slice, rand, test))]
|
||||
|
||||
#![feature(no_std)]
|
||||
#![no_std]
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ use vec::Vec;
|
|||
use boxed::Box;
|
||||
|
||||
/// A growable string stored as a UTF-8 encoded buffer.
|
||||
#[derive(Clone, PartialOrd, Eq, Ord)]
|
||||
#[derive(PartialOrd, Eq, Ord)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub struct String {
|
||||
vec: Vec<u8>,
|
||||
|
|
@ -765,6 +765,17 @@ impl fmt::Display for FromUtf16Error {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl Clone for String {
|
||||
fn clone(&self) -> Self {
|
||||
String { vec: self.vec.clone() }
|
||||
}
|
||||
|
||||
fn clone_from(&mut self, source: &Self) {
|
||||
self.vec.clone_from(&source.vec);
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl FromIterator<char> for String {
|
||||
fn from_iter<I: IntoIterator<Item=char>>(iterable: I) -> String {
|
||||
|
|
|
|||
|
|
@ -1007,19 +1007,15 @@ impl<T:Clone> Clone for Vec<T> {
|
|||
|
||||
fn clone_from(&mut self, other: &Vec<T>) {
|
||||
// drop anything in self that will not be overwritten
|
||||
if self.len() > other.len() {
|
||||
self.truncate(other.len())
|
||||
}
|
||||
self.truncate(other.len());
|
||||
let len = self.len();
|
||||
|
||||
// reuse the contained values' allocations/resources.
|
||||
for (place, thing) in self.iter_mut().zip(other) {
|
||||
place.clone_from(thing)
|
||||
}
|
||||
self.clone_from_slice(&other[..len]);
|
||||
|
||||
// self.len <= other.len due to the truncate above, so the
|
||||
// slice here is always in-bounds.
|
||||
let slice = &other[self.len()..];
|
||||
self.push_all(slice);
|
||||
self.push_all(&other[len..]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue