Skip to content

Commit 7c155f8

Browse files
author
blake2-ppc
committed
---
yaml --- r: 83535 b: refs/heads/try c: 24a4d0d h: refs/heads/master i: 83533: 39a725a 83531: 6002e9c 83527: 1a1f687 83519: 549ba0e v: v3
1 parent a4656fe commit 7c155f8

File tree

2 files changed

+16
-27
lines changed

2 files changed

+16
-27
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: 0e4d1fc8cae42e15e00f71d9f439b01bb25a86ae
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 6c08cc2db4f98e9f07ae7d50338396c4123c2f0a
5-
refs/heads/try: 5444f601dc02cd9f5fc886f438ea60310f664cc6
5+
refs/heads/try: 24a4d0daf0ba954b94eeeb9eb83355cd2f16ede5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/src/libstd/vec.rs

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -356,43 +356,32 @@ pub fn connect_slices<T:Clone>(v: &[&[T]], sep: &T) -> ~[T] { v.connect_vec(sep)
356356
pub trait VectorVector<T> {
357357
// FIXME #5898: calling these .concat and .connect conflicts with
358358
// StrVector::con{cat,nect}, since they have generic contents.
359+
/// Flattens a vector of vectors of T into a single vector of T.
359360
fn concat_vec(&self) -> ~[T];
360-
fn connect_vec(&self, sep: &T) -> ~[T];
361-
}
362-
363-
impl<'self, T:Clone> VectorVector<T> for &'self [~[T]] {
364-
/// Flattens a vector of slices of T into a single vector of T.
365-
fn concat_vec(&self) -> ~[T] {
366-
self.flat_map(|inner| (*inner).clone())
367-
}
368361

369362
/// Concatenate a vector of vectors, placing a given separator between each.
370-
fn connect_vec(&self, sep: &T) -> ~[T] {
371-
let mut r = ~[];
372-
let mut first = true;
373-
for inner in self.iter() {
374-
if first { first = false; } else { r.push((*sep).clone()); }
375-
r.push_all((*inner).clone());
376-
}
377-
r
378-
}
363+
fn connect_vec(&self, sep: &T) -> ~[T];
379364
}
380365

381-
impl<'self,T:Clone> VectorVector<T> for &'self [&'self [T]] {
382-
/// Flattens a vector of slices of T into a single vector of T.
366+
impl<'self, T: Clone, V: Vector<T>> VectorVector<T> for &'self [V] {
383367
fn concat_vec(&self) -> ~[T] {
384-
self.flat_map(|&inner| inner.to_owned())
368+
let size = self.iter().fold(0u, |acc, v| acc + v.as_slice().len());
369+
let mut result = with_capacity(size);
370+
for v in self.iter() {
371+
result.push_all(v.as_slice())
372+
}
373+
result
385374
}
386375

387-
/// Concatenate a vector of slices, placing a given separator between each.
388376
fn connect_vec(&self, sep: &T) -> ~[T] {
389-
let mut r = ~[];
377+
let size = self.iter().fold(0u, |acc, v| acc + v.as_slice().len());
378+
let mut result = with_capacity(size + self.len());
390379
let mut first = true;
391-
for &inner in self.iter() {
392-
if first { first = false; } else { r.push((*sep).clone()); }
393-
r.push_all(inner);
380+
for v in self.iter() {
381+
if first { first = false } else { result.push(sep.clone()) }
382+
result.push_all(v.as_slice())
394383
}
395-
r
384+
result
396385
}
397386
}
398387

0 commit comments

Comments
 (0)