class ActionDispatch::Journey::NFA::Simulator

:nodoc:

def initialize(transition_table)

def initialize(transition_table)
  @tt = transition_table
end

def simulate(string)

def simulate(string)
  input = StringScanner.new(string)
  state = tt.eclosure(0)
  until input.eos?
    sym   = input.scan(%r([/.?]|[^/.?]+))
    # FIXME: tt.eclosure is not needed for the GTG
    state = tt.eclosure(tt.move(state, sym))
  end
  acceptance_states = state.find_all { |s|
    tt.accepting?(tt.eclosure(s).sort.last)
  }
  return if acceptance_states.empty?
  memos = acceptance_states.flat_map { |x| tt.memo(x) }.compact
  MatchData.new(memos)
end