ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Event/Event.pm
(Generate patch)

Comparing Coro/Event/Event.pm (file contents):
Revision 1.3 by root, Fri Aug 17 03:33:00 2001 UTC vs.
Revision 1.8 by root, Sun Oct 28 17:00:09 2001 UTC

16 print "data> "; 16 print "data> ";
17 my $ev = $w->next; my $data = <STDIN>; 17 my $ev = $w->next; my $data = <STDIN>;
18 } 18 }
19 } 19 }
20 20
21 &loop; 21 loop;
22 22
23=head1 DESCRIPTION 23=head1 DESCRIPTION
24 24
25This module enables you to create programs using the powerful Event model 25This module enables you to create programs using the powerful Event model
26(and module), while retaining the linear style known from simple or 26(and module), while retaining the linear style known from simple or
38 38
39=cut 39=cut
40 40
41package Coro::Event; 41package Coro::Event;
42 42
43no warnings; 43no warnings qw(uninitialized);
44 44
45use Carp; 45use Carp;
46 46
47use Coro; 47use Coro;
48use Event qw(unloop); # we are re-exporting this, cooool! 48use Event qw(loop unloop); # we are re-exporting this, cooool!
49 49
50use base 'Exporter'; 50use base 'Exporter';
51 51
52@EXPORT = qw(loop unloop sweep); 52@EXPORT = qw(loop unloop sweep reschedule);
53 53
54BEGIN { 54BEGIN {
55 $VERSION = 0.45; 55 $VERSION = 0.45;
56 56
57 local $^W = 0; # avoid redefine warning for Coro::ready
57 require XSLoader; 58 require XSLoader;
58 XSLoader::load Coro::Event, $VERSION; 59 XSLoader::load Coro::Event, $VERSION;
59} 60}
60 61
61=item $w = Coro::Event->flavour(args...) 62=item $w = Coro::Event->flavour(args...)
107 }; 108 };
108 *{ $flavour } = $coronew; 109 *{ $flavour } = $coronew;
109 *{"do_$flavour"} = sub { 110 *{"do_$flavour"} = sub {
110 unshift @_, Coro::Event::; 111 unshift @_, Coro::Event::;
111 my $e = (&$coronew)->next; 112 my $e = (&$coronew)->next;
112 $e->w->cancel; 113 $e->cancel; # $e = $e->w->cancel ($e == $e->w!)
113 $e; 114 $e;
114 }; 115 };
115} 116}
116 117
117# double calls to avoid stack-cloning ;() 118# double calls to avoid stack-cloning ;()
118# is about 10% slower, though. 119# is about 10% slower, though.
119sub next($) { 120sub next($) {
120 &Coro::schedule if &_next; $_[0]; 121 &Coro::schedule if &_next; $_[0];
121} 122}
122 123
124sub Coro::Event::w { $_[0] }
123sub Coro::Event::w { $_[0]{Coro::Event}[2] } 125sub Coro::Event::prio { $_[0]{Coro::Event}[3] }
126sub Coro::Event::hits { $_[0]{Coro::Event}[4] }
124sub Coro::Event::got { $_[0]{Coro::Event}[3] } 127sub Coro::Event::got { $_[0]{Coro::Event}[5] }
125sub Coro::Event::prio { croak "prio not supported yet, please mail to pcg\@goof.com" }
126sub Coro::Event::hits { croak "prio not supported yet, please mail to pcg\@goof.com" }
127 128
128=item sweep 129=item sweep
129 130
130Similar to Event::one_event and Event::sweep: The idle task is called once 131Similar to Event::one_event and Event::sweep: The idle task is called once
131(this has the effect of jumping back into the Event loop once to serve new 132(this has the effect of jumping back into the Event loop once to serve new
137into the Event dispatcher. 138into the Event dispatcher.
138 139
139=cut 140=cut
140 141
141sub sweep { 142sub sweep {
142 one_event(0); # for now 143 Event::one_event(0); # for now
143} 144}
144 145
145=item $result = loop([$timeout]) 146=item $result = loop([$timeout])
146 147
147This is the version of C<loop> you should use instead of C<Event::loop> 148This is the version of C<loop> you should use instead of C<Event::loop>
155 156
156=end comment 157=end comment
157 158
158=cut 159=cut
159 160
161# no longer do something special - it's done internally now
162
160sub loop(;$) { 163#sub loop(;$) {
161 local $Coro::idle = $Coro::current; 164# #local $Coro::idle = $Coro::current;
162 Coro::schedule; # become idle task, which is implicitly ready 165# #Coro::schedule; # become idle task, which is implicitly ready
163 &Event::loop; 166# &Event::loop;
164} 167#}
165 168
166=item unloop([$result]) 169=item unloop([$result])
167 170
168Same as Event::unloop (provided here for your convinience only). 171Same as Event::unloop (provided here for your convinience only).
169 172

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines