<<( event )
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def <<( event )
  add_event_to_arry( @choices, event )
end
             
             
            
           
          
          
         
      
        
          
          
          
            expected()
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def expected
  return [@events[@current]] if @events.size > 0
  return @choices.collect do |x|
    if x[0].kind_of? State
      x[0].expected
    else
      x[0]
    end
  end.flatten
end
             
             
            
           
          
          
         
      
        
          
          
          
            inspect()
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def inspect
  "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' or ')} >"
end
             
             
            
           
          
          
         
      
        
          
          
          
            matches?( event )
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def matches?( event )
  return @events[@current].matches?( event ) if @events.size > 0
  !@choices.find{|evt| evt[0].matches?(event)}.nil?
end
             
             
            
           
          
          
         
      
        
          
          
          
            next( event )
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def next( event )
  
  if @events.size == 0
    c = 0 ; max = @choices.size
    while c < max
      if @choices[c][0].class == Ref
        expand_ref_in( @choices[c], 0 )
        @choices += @choices[c]
        @choices.delete( @choices[c] )
        max -= 1
      else
        c += 1
      end
    end
    @events = @choices.find { |evt| evt[0].matches? event }
    
    
  end
  unless @events
    @events = []
    return nil
  end
  super
end
             
             
            
           
          
          
         
      
        
          
          
          
            reset()
            click to toggle source
          
          
          
  
            
            
            
            
            
               
               
def reset
  super
  @events = []
  @choices.each { |c| c.each { |s| s.reset if s.kind_of? State } }
end