ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.xs
(Generate patch)

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.47 by root, Sun Oct 22 10:10:23 2006 UTC vs.
Revision 1.48 by root, Sun Oct 22 10:33:19 2006 UTC

146 146
147 errno = req->errorno; 147 errno = req->errorno;
148 148
149 ENTER; 149 ENTER;
150 PUSHMARK (SP); 150 PUSHMARK (SP);
151 EXTEND (SP, 1);
151 152
152 switch (req->type) 153 switch (req->type)
153 { 154 {
154 case REQ_READDIR: 155 case REQ_READDIR:
155 { 156 {
170 } 171 }
171 172
172 rv = sv_2mortal (newRV_noinc ((SV *)av)); 173 rv = sv_2mortal (newRV_noinc ((SV *)av));
173 } 174 }
174 175
175 XPUSHs (rv); 176 PUSHs (rv);
176 } 177 }
177 break; 178 break;
178 179
179 case REQ_OPEN: 180 case REQ_OPEN:
180 { 181 {
181 /* convert fd to fh */ 182 /* convert fd to fh */
182 SV *fh; 183 SV *fh;
183 184
184 XPUSHs (sv_2mortal (newSViv (req->result))); 185 PUSHs (sv_2mortal (newSViv (req->result)));
185 PUTBACK; 186 PUTBACK;
186 call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL); 187 call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL);
187 SPAGAIN; 188 SPAGAIN;
188 189
189 fh = SvREFCNT_inc (POPs); 190 fh = SvREFCNT_inc (POPs);
191 PUSHMARK (SP); 192 PUSHMARK (SP);
192 XPUSHs (sv_2mortal (fh)); 193 XPUSHs (sv_2mortal (fh));
193 } 194 }
194 break; 195 break;
195 196
197 case REQ_GROUP:
198 if (req->data)
199 {
200 int i;
201 AV *av = (AV *)req->data;
202
203 EXTEND (SP, AvFILL (av) + 1);
204 for (i = 0; i <= AvFILL (av); ++i)
205 PUSHs (*av_fetch (av, i, 0));
206 }
207 break;
208
196 case REQ_SLEEP: 209 case REQ_SLEEP:
197 case REQ_GROUP:
198 break; 210 break;
199 211
200 default: 212 default:
201 XPUSHs (sv_2mortal (newSViv (req->result))); 213 PUSHs (sv_2mortal (newSViv (req->result)));
202 break; 214 break;
203 } 215 }
204 216
205 217
206 PUTBACK; 218 PUTBACK;
1207 CODE: 1219 CODE:
1208 RETVAL = nreqs; 1220 RETVAL = nreqs;
1209 OUTPUT: 1221 OUTPUT:
1210 RETVAL 1222 RETVAL
1211 1223
1224PROTOTYPES: DISABLE
1225
1212MODULE = IO::AIO PACKAGE = IO::AIO::REQ 1226MODULE = IO::AIO PACKAGE = IO::AIO::REQ
1213 1227
1214void 1228void
1215cancel (aio_req_ornot req) 1229cancel (aio_req_ornot req)
1216 PROTOTYPE: 1230 PROTOTYPE:
1219 1233
1220MODULE = IO::AIO PACKAGE = IO::AIO::GRP 1234MODULE = IO::AIO PACKAGE = IO::AIO::GRP
1221 1235
1222void 1236void
1223add (aio_req grp, ...) 1237add (aio_req grp, ...)
1224 PROTOTYPE: $;@
1225 PPCODE: 1238 PPCODE:
1226{ 1239{
1227 int i; 1240 int i;
1228 1241
1229 for (i = 1; i < items; ++i ) 1242 for (i = 1; i < items; ++i )
1243 req->grp = grp; 1256 req->grp = grp;
1244 } 1257 }
1245 } 1258 }
1246} 1259}
1247 1260
1261void
1262result (aio_req grp, ...)
1263 CODE:
1264{
1265 int i;
1266 AV *av = newAV ();
1267
1268 if (grp->data)
1269 SvREFCNT_dec (grp->data);
1270
1271 for (i = 1; i < items; ++i )
1272 av_push (av, newSVsv (ST (i)));
1273
1274 grp->data = (SV *)av;
1275}
1276

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines