diff options
| author | Ulrik Sverdrup <bluss@users.noreply.github.com> | 2016-02-23 19:25:43 +0100 |
|---|---|---|
| committer | Ulrik Sverdrup <bluss@users.noreply.github.com> | 2016-02-26 14:51:38 +0100 |
| commit | 2d6496dd8432c71b65d67c7216fbd4428c06527b (patch) | |
| tree | e82e379131bb08248dc4d625b19a3a53673957d4 /src/libstd | |
| parent | 09130044ce7429beb95742afa7fd371960dbe607 (diff) | |
| download | rust-2d6496dd8432c71b65d67c7216fbd4428c06527b.tar.gz rust-2d6496dd8432c71b65d67c7216fbd4428c06527b.zip | |
Use .copy_from_slice() where applicable
.copy_from_slice() does the same job of .clone_from_slice(), but the former is explicitly for Copy elements and calls `memcpy` directly, and thus is it efficient without optimization too.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/io/cursor.rs | 2 | ||||
| -rw-r--r-- | src/libstd/io/impls.rs | 6 | ||||
| -rw-r--r-- | src/libstd/lib.rs | 1 | ||||
| -rw-r--r-- | src/libstd/net/parser.rs | 4 | ||||
| -rw-r--r-- | src/libstd/sys/common/wtf8.rs | 2 |
5 files changed, 8 insertions, 7 deletions
diff --git a/src/libstd/io/cursor.rs b/src/libstd/io/cursor.rs index 4573f465819..420fede34d2 100644 --- a/src/libstd/io/cursor.rs +++ b/src/libstd/io/cursor.rs @@ -256,7 +256,7 @@ impl Write for Cursor<Vec<u8>> { let pos = pos as usize; let space = self.inner.len() - pos; let (left, right) = buf.split_at(cmp::min(space, buf.len())); - self.inner[pos..pos + left.len()].clone_from_slice(left); + self.inner[pos..pos + left.len()].copy_from_slice(left); self.inner.extend_from_slice(right); } diff --git a/src/libstd/io/impls.rs b/src/libstd/io/impls.rs index 592e16b0a3c..ec63f14d453 100644 --- a/src/libstd/io/impls.rs +++ b/src/libstd/io/impls.rs @@ -156,7 +156,7 @@ impl<'a> Read for &'a [u8] { fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { let amt = cmp::min(buf.len(), self.len()); let (a, b) = self.split_at(amt); - buf[..amt].clone_from_slice(a); + buf[..amt].copy_from_slice(a); *self = b; Ok(amt) } @@ -168,7 +168,7 @@ impl<'a> Read for &'a [u8] { "failed to fill whole buffer")); } let (a, b) = self.split_at(buf.len()); - buf.clone_from_slice(a); + buf.copy_from_slice(a); *self = b; Ok(()) } @@ -189,7 +189,7 @@ impl<'a> Write for &'a mut [u8] { fn write(&mut self, data: &[u8]) -> io::Result<usize> { let amt = cmp::min(data.len(), self.len()); let (a, b) = mem::replace(self, &mut []).split_at_mut(amt); - a.clone_from_slice(&data[..amt]); + a.copy_from_slice(&data[..amt]); *self = b; Ok(amt) } diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index d8ecddcbe42..f9e7c1fede2 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -222,6 +222,7 @@ #![feature(collections)] #![feature(collections_bound)] #![feature(const_fn)] +#![feature(copy_from_slice)] #![feature(core_float)] #![feature(core_intrinsics)] #![feature(decode_utf16)] diff --git a/src/libstd/net/parser.rs b/src/libstd/net/parser.rs index 63eee6bcfde..5851ce7135d 100644 --- a/src/libstd/net/parser.rs +++ b/src/libstd/net/parser.rs @@ -191,8 +191,8 @@ impl<'a> Parser<'a> { fn ipv6_addr_from_head_tail(head: &[u16], tail: &[u16]) -> Ipv6Addr { assert!(head.len() + tail.len() <= 8); let mut gs = [0; 8]; - gs[..head.len()].clone_from_slice(head); - gs[(8 - tail.len()) .. 8].clone_from_slice(tail); + gs[..head.len()].copy_from_slice(head); + gs[(8 - tail.len()) .. 8].copy_from_slice(tail); Ipv6Addr::new(gs[0], gs[1], gs[2], gs[3], gs[4], gs[5], gs[6], gs[7]) } diff --git a/src/libstd/sys/common/wtf8.rs b/src/libstd/sys/common/wtf8.rs index 68ba2fe20b4..48e9adb9296 100644 --- a/src/libstd/sys/common/wtf8.rs +++ b/src/libstd/sys/common/wtf8.rs @@ -341,7 +341,7 @@ impl Wtf8Buf { Some((surrogate_pos, _)) => { pos = surrogate_pos + 3; self.bytes[surrogate_pos..pos] - .clone_from_slice(UTF8_REPLACEMENT_CHARACTER); + .copy_from_slice(UTF8_REPLACEMENT_CHARACTER); }, None => return unsafe { String::from_utf8_unchecked(self.bytes) } } |
