Skip to content

Commit fe25667

Browse files
committed
Use swap_remove in pipes::select(). Close #3219.
1 parent 20773f3 commit fe25667

File tree

2 files changed

+9
-23
lines changed

2 files changed

+9
-23
lines changed

src/libcore/pipes.rs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -666,12 +666,10 @@ fn select2<A: send, Ab: send, B: send, Bb: send>(
666666
{
667667
let i = wait_many([a.header(), b.header()]/_);
668668

669-
unsafe {
670-
match i {
671-
0 => Left((try_recv(a), b)),
672-
1 => Right((a, try_recv(b))),
673-
_ => fail ~"select2 return an invalid packet"
674-
}
669+
match i {
670+
0 => Left((try_recv(a), b)),
671+
1 => Right((a, try_recv(b))),
672+
_ => fail ~"select2 return an invalid packet"
675673
}
676674
}
677675

@@ -706,17 +704,9 @@ fn select<T: send, Tb: send>(+endpoints: ~[recv_packet_buffered<T, Tb>])
706704
-> (uint, option<T>, ~[recv_packet_buffered<T, Tb>])
707705
{
708706
let ready = wait_many(endpoints.map(|p| p.header()));
709-
let mut remaining = ~[];
710-
let mut result = none;
711-
do vec::consume(endpoints) |i, p| {
712-
if i == ready {
713-
result = try_recv(p);
714-
}
715-
else {
716-
vec::push(remaining, p);
717-
}
718-
}
719-
707+
let mut remaining = endpoints;
708+
let port = vec::swap_remove(remaining, ready);
709+
let result = try_recv(port);
720710
(ready, result, remaining)
721711
}
722712

@@ -1054,12 +1044,7 @@ struct PortSet<T: send> : recv<T> {
10541044
}
10551045
none => {
10561046
// Remove this port.
1057-
let mut ports_ = ~[];
1058-
ports <-> ports_;
1059-
vec::consume(ports_,
1060-
|j, x| if i != j {
1061-
vec::push(ports, x)
1062-
});
1047+
let _ = vec::swap_remove(ports, i);
10631048
}
10641049
}
10651050
}

src/libcore/vec.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export rsplitn;
3636
export shift;
3737
export unshift;
3838
export pop;
39+
export swap_remove;
3940
export push, push_all, push_all_move;
4041
export grow;
4142
export grow_fn;

0 commit comments

Comments
 (0)