@@ -164,7 +164,17 @@ struct PacketHeader {
164
164
// This is a reinterpret_cast of a ~buffer, that can also be cast
165
165
// to a buffer_header if need be.
166
166
mut buffer : * libc:: c_void ,
167
+ }
168
+
169
+ fn PacketHeader ( ) -> PacketHeader {
170
+ PacketHeader {
171
+ state : Empty ,
172
+ blocked_task : ptr:: null ( ) ,
173
+ buffer : ptr:: null ( )
174
+ }
175
+ }
167
176
177
+ impl PacketHeader {
168
178
// Returns the old state.
169
179
unsafe fn mark_blocked ( this : * rust_task ) -> State {
170
180
rustrt:: rust_task_ref ( this) ;
@@ -196,14 +206,6 @@ struct PacketHeader {
196
206
}
197
207
}
198
208
199
- fn PacketHeader ( ) -> PacketHeader {
200
- PacketHeader {
201
- state : Empty ,
202
- blocked_task : ptr:: null ( ) ,
203
- buffer : ptr:: null ( )
204
- }
205
- }
206
-
207
209
#[ doc( hidden) ]
208
210
type Packet < T : Send > = {
209
211
header : PacketHeader ,
@@ -794,6 +796,21 @@ struct SendPacketBuffered<T: Send, Tbuffer: Send> {
794
796
// "none"
795
797
// } else { "some" }); }
796
798
}
799
+ }
800
+
801
+ fn SendPacketBuffered < T : Send , Tbuffer : Send > ( p : * Packet < T > )
802
+ -> SendPacketBuffered < T , Tbuffer > {
803
+ //debug!("take send %?", p);
804
+ SendPacketBuffered {
805
+ p : Some ( p) ,
806
+ buffer : unsafe {
807
+ Some ( BufferResource (
808
+ get_buffer ( ptr:: addr_of ( ( * p) . header ) ) ) )
809
+ }
810
+ }
811
+ }
812
+
813
+ impl < T : Send , Tbuffer : Send > SendPacketBuffered < T , Tbuffer > {
797
814
fn unwrap ( ) -> * Packet < T > {
798
815
let mut p = None ;
799
816
p <-> self . p ;
@@ -820,18 +837,6 @@ struct SendPacketBuffered<T: Send, Tbuffer: Send> {
820
837
}
821
838
}
822
839
823
- fn SendPacketBuffered < T : Send , Tbuffer : Send > ( p : * Packet < T > )
824
- -> SendPacketBuffered < T , Tbuffer > {
825
- //debug!("take send %?", p);
826
- SendPacketBuffered {
827
- p : Some ( p) ,
828
- buffer : unsafe {
829
- Some ( BufferResource (
830
- get_buffer ( ptr:: addr_of ( ( * p) . header ) ) ) )
831
- }
832
- }
833
- }
834
-
835
840
// XXX remove me
836
841
#[ cfg( stage0) ]
837
842
#[ allow( non_camel_case_types) ]
@@ -858,7 +863,7 @@ fn recv_packet<T: Send>(p: *packet<T>) -> RecvPacket<T> {
858
863
RecvPacket ( p)
859
864
}
860
865
861
- struct RecvPacketBuffered < T : Send , Tbuffer : Send > : Selectable {
866
+ struct RecvPacketBuffered < T : Send , Tbuffer : Send > {
862
867
mut p: Option < * Packet < T > > ,
863
868
mut buffer : Option < BufferResource < Tbuffer > > ,
864
869
drop {
@@ -875,6 +880,9 @@ struct RecvPacketBuffered<T: Send, Tbuffer: Send> : Selectable {
875
880
// "none"
876
881
// } else { "some" }); }
877
882
}
883
+ }
884
+
885
+ impl < T : Send , Tbuffer : Send > RecvPacketBuffered < T , Tbuffer > : Selectable {
878
886
fn unwrap ( ) -> * Packet < T > {
879
887
let mut p = None ;
880
888
p <-> self . p ;
@@ -1095,9 +1103,27 @@ impl<T: Send> Port<T>: Recv<T> {
1095
1103
}
1096
1104
}
1097
1105
1106
+ impl < T : Send > Port < T > : Selectable {
1107
+ pure fn header ( ) -> * PacketHeader unchecked {
1108
+ match self . endp {
1109
+ Some ( endp) => endp. header ( ) ,
1110
+ None => fail ~"peeking empty stream"
1111
+ }
1112
+ }
1113
+ }
1114
+
1098
1115
/// Treat many ports as one.
1099
- struct PortSet < T : Send > : Recv < T > {
1116
+ struct PortSet < T : Send > {
1100
1117
mut ports : ~[ pipes:: Port < T > ] ,
1118
+ }
1119
+
1120
+ fn PortSet < T : Send > ( ) -> PortSet < T > {
1121
+ PortSet {
1122
+ ports : ~[ ]
1123
+ }
1124
+ }
1125
+
1126
+ impl < T : Send > PortSet < T > : Recv < T > {
1101
1127
1102
1128
fn add ( +port : pipes:: Port < T > ) {
1103
1129
vec:: push ( self . ports , move port)
@@ -1145,21 +1171,6 @@ struct PortSet<T: Send> : Recv<T> {
1145
1171
}
1146
1172
}
1147
1173
1148
- fn PortSet < T : Send > ( ) -> PortSet < T > {
1149
- PortSet {
1150
- ports : ~[ ]
1151
- }
1152
- }
1153
-
1154
- impl < T : Send > Port < T > : Selectable {
1155
- pure fn header ( ) -> * PacketHeader unchecked {
1156
- match self . endp {
1157
- Some ( endp) => endp. header ( ) ,
1158
- None => fail ~"peeking empty stream"
1159
- }
1160
- }
1161
- }
1162
-
1163
1174
/// A channel that can be shared between many senders.
1164
1175
type SharedChan < T : Send > = unsafe :: Exclusive < Chan < T > > ;
1165
1176
0 commit comments