Changeset 400

Show
Ignore:
Timestamp:
07/06/07 02:51:47 (2 years ago)
Author:
blackhedd
Message:

changed the callback dispatcher to use if/elsif rather than case/when.
Runs faster.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • version_0/ChangeLog

    r385 r400  
    363612Jun07: Added an evented popen implementation that, like Ruby's, is 
    3737        full-duplex and makes the subprocess PID available to the caller. 
    38  
     3806Jul07: Performance-tweaked the callback dispatcher in eventmachine.rb. 
  • version_0/lib/eventmachine.rb

    r394 r400  
    928928 
    929929 
    930   private 
    931   def EventMachine::event_callback conn_binding, opcode, data 
    932     case opcode 
    933     when ConnectionData 
    934       c = @conns[conn_binding] or raise ConnectionNotBound 
    935       c.receive_data data 
    936     when ConnectionUnbound 
    937       if c = @conns.delete( conn_binding ) 
    938         c.unbind 
    939       elsif c = @acceptors.delete( conn_binding ) 
    940         # no-op 
    941       else 
    942         raise ConnectionNotBound 
    943       end 
    944     when ConnectionAccepted 
    945       accep,blk = @acceptors[conn_binding] 
    946       raise NoHandlerForAcceptedConnection unless accep 
    947       c = accep.new data 
    948       @conns[data] = c 
    949       blk and blk.call(c) 
    950       c # (needed?) 
    951     when TimerFired 
    952       t = @timers.delete( data ) or raise UnknownTimerFired 
    953       t.call 
    954     when ConnectionCompleted 
    955       c = @conns[conn_binding] or raise ConnectionNotBound 
    956       c.connection_completed 
    957     when LoopbreakSignalled 
    958       run_deferred_callbacks 
    959     end 
    960   end 
     930        private 
     931        def EventMachine::event_callback conn_binding, opcode, data 
     932                if opcode == ConnectionData 
     933                        c = @conns[conn_binding] or raise ConnectionNotBound 
     934                        c.receive_data data 
     935                elsif opcode == ConnectionUnbound 
     936                        if c = @conns.delete( conn_binding ) 
     937                                c.unbind 
     938                        elsif c = @acceptors.delete( conn_binding ) 
     939                                # no-op 
     940                        else 
     941                                raise ConnectionNotBound 
     942                        end 
     943                elsif opcode == ConnectionAccepted 
     944                        accep,blk = @acceptors[conn_binding] 
     945                        raise NoHandlerForAcceptedConnection unless accep 
     946                        c = accep.new data 
     947                        @conns[data] = c 
     948                        blk and blk.call(c) 
     949                        c # (needed?) 
     950                elsif opcode == TimerFired 
     951                        t = @timers.delete( data ) or raise UnknownTimerFired 
     952                        t.call 
     953                elsif opcode == ConnectionCompleted 
     954                        c = @conns[conn_binding] or raise ConnectionNotBound 
     955                        c.connection_completed 
     956                elsif opcode == LoopbreakSignalled 
     957                        run_deferred_callbacks 
     958                end 
     959        end 
    961960 
    962961