The attached patch allows you to obtain the number of events
for a watcher that are still in the event queue. It also removes
unwanted ;'s from the typemap.

The situation where I have used this to force an event to
happen, unless I know one is already pending. eg

$idle = Event->idle( cb => sub { warn "idle" }, parked => 1);

then when I want this event to happen I can do

  $idle->now unless $idle->pending;

Graham.

--- Event-0.63/lib/Event.pod.orig       Fri Feb  4 22:06:54 2000
+++ Event-0.63/lib/Event.pod    Fri Feb  4 22:08:47 2000
@@ -179,6 +179,11 @@
 
 Reports whether the C<$watcher> is suspended.
 
+=item $watcher->pending
+
+Returns how many events this watcher has with the callback still pending
+in the event queue.
+
 =back
 
 =head2 Watcher Types
--- Event-0.63/Event.xs.orig    Wed Feb  2 18:21:15 2000
+++ Event-0.63/Event.xs Fri Feb  4 22:05:07 2000
@@ -531,6 +531,13 @@
        }
 }
 
+int
+pe_watcher::pending()
+       CODE:
+       RETVAL = THIS->event_counter;
+       OUTPUT:
+       RETVAL
+
 void
 pe_watcher::again()
        CODE:
--- Event-0.63/typemap.orig     Fri Feb  4 22:03:51 2000
+++ Event-0.63/typemap  Fri Feb  4 22:04:09 2000
@@ -6,15 +6,15 @@
 INPUT
 
 O_WATCHER
-       $var = ($type) sv_2watcher($arg);
+       $var = ($type) sv_2watcher($arg)
 
 O_EVENT
-       $var = ($type) sv_2event($arg);
+       $var = ($type) sv_2event($arg)
 
 OUTPUT
 
 O_WATCHER
-       croak("use watcher_2sv($var)");
+       croak("use watcher_2sv($var)")
 
 O_EVENT
-       croak("use event_2sv($var)");
+       croak("use event_2sv($var)")

Reply via email to