Skip to content

Commit b293984

Browse files
committed
Simplify example so that emplace_back is "just" an additional method on Vec.
1 parent 731e9ba commit b293984

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/test/run-pass/placement-box-emplace-back.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,26 @@
1616
use std::cell::{UnsafeCell};
1717
use std::ops::{Placer,PlacementAgent};
1818

19-
struct EmplaceBack<'a, T:'a> {
19+
struct EmplaceBackPlacer<'a, T:'a> {
2020
vec: &'a mut Vec<T>,
2121
}
2222

23+
trait EmplaceBack<'a, T> {
24+
fn emplace_back(&'a mut self) -> EmplaceBackPlacer<'a, T>;
25+
}
26+
27+
impl<'a, T:'a> EmplaceBack<'a, T> for Vec<T> {
28+
fn emplace_back(&'a mut self) -> EmplaceBackPlacer<'a, T> {
29+
EmplaceBackPlacer { vec: self }
30+
}
31+
}
32+
2333
pub fn main() {
2434
let mut v : Vec<[f32, ..4]> = vec![];
2535
v.push([10., 20., 30., 40.]);
2636
v.push([11., 21., 31., 41.]);
27-
let mut pv = EmplaceBack { vec: &mut v };
28-
let () = box (pv) [12., 22., 32., 42.];
29-
let v = pv.vec;
37+
let () = // (Explicitly showing `box` returns `()` here.)
38+
box (v.emplace_back()) [12., 22., 32., 42.];
3039
assert!(same_contents(
3140
v.as_slice(),
3241
[[10., 20., 30., 40.],
@@ -51,7 +60,7 @@ struct EmplaceBackAgent<T> {
5160
offset: uint,
5261
}
5362

54-
impl<'a, T> Placer<T, (), EmplaceBackAgent<T>> for EmplaceBack<'a, T> {
63+
impl<'a, T> Placer<T, (), EmplaceBackAgent<T>> for EmplaceBackPlacer<'a, T> {
5564
fn make_place(&self) -> EmplaceBackAgent<T> {
5665
let len = self.vec.len();
5766
let v = self.vec as *mut Vec<T>;

0 commit comments

Comments
 (0)