All pastes #524829 Raw Edit

imMute

public text v1 · immutable
#524829 ·published 2007-05-31 05:23 UTC
rendered paste body
Index: ReadWrite.pm
===================================================================
--- ReadWrite.pm	(revision 2190)
+++ ReadWrite.pm	(working copy)
@@ -238,7 +238,7 @@
 }
 
 #------------------------------------------------------------------------------
-# Redefine the select-read handler.  This uses stupid closure tricks
+# Redefine the select-read handler.  This uses clever closure tricks
 # to prevent keeping extra references to $self around.
 
 sub _define_read_state {
@@ -275,13 +275,13 @@
           my ($k, $me, $handle) = @_[KERNEL, SESSION, ARG0];
           if (defined(my $raw_input = $driver->get($handle))) {
             $$input_filter->get_one_start($raw_input);
+            my @recs;
             while (1) {
               my $next_rec = $$input_filter->get_one();
               last unless @$next_rec;
-              foreach my $cooked_input (@$next_rec) {
-                $k->call($me, $$event_input, $cooked_input, $unique_id);
-              }
+              push @recs, @$next_rec;
             }
+            $self->_cook_input($me, $$input_filter, $$event_input, $unique_id, \@recs);
           }
           else {
             $$event_error and $k->call(
@@ -307,9 +307,7 @@
           # The actual code starts here.
           my ($k, $me, $handle) = @_[KERNEL, SESSION, ARG0];
           if (defined(my $raw_input = $driver->get($handle))) {
-            foreach my $cooked_input (@{$$input_filter->get($raw_input)}) {
-              $k->call($me, $$event_input, $cooked_input, $unique_id);
-            }
+            $self->_cook_input($me, $$input_filter, $$event_input, $unique_id, $$input_filter->get($raw_input));
           }
           else {
             $$event_error and $k->call(
@@ -320,16 +318,26 @@
         }
       );
     }
-                                        # register the state's select
+    # register the state's select
     $poe_kernel->select_read($self->[HANDLE_INPUT], $self->[STATE_READ]);
   }
-                                        # undefine the select, just in case
+  # undefine the select, just in case
   else {
     $poe_kernel->select_read($self->[HANDLE_INPUT])
   }
 }
 
 #------------------------------------------------------------------------------
+# $self->_cook_input($me,$$event_input, $unique_id, \@recs);
+sub _cook_input {
+  my ($self, $filter, $me, $event, $uid, $records) = @_;
+  foreach my $record ( $filter->get($raw_input) ){
+    $k->call($me, $event, $record, $uid);
+  }
+}
+
+
+#------------------------------------------------------------------------------
 # Redefine events.
 
 sub event {
@@ -595,6 +603,7 @@
 sub pause_input {
   my $self = shift;
   return unless defined $self->[HANDLE_INPUT];
+  $self->[PAUSED_INPUT] = 1;
   $poe_kernel->select_pause_read( $self->[HANDLE_INPUT] );
 }
 
@@ -602,6 +611,7 @@
 sub resume_input {
   my $self = shift;
   return unless  defined $self->[HANDLE_INPUT];
+  $self->[PAUSED_INPUT] = 0;
   $poe_kernel->select_resume_read( $self->[HANDLE_INPUT] );
 }