class FastImage

def parse_size_for_jpeg

def parse_size_for_jpeg
  loop do
    @state = case @state
    when nil
      get_chars(2)
      :started
    when :started
      get_byte == 0xFF ? :sof : :started          
    when :sof
      c = get_byte
      if (0xe0..0xef).include?(c)
        :skipframe
      elsif [0xC0..0xC3, 0xC5..0xC7, 0xC9..0xCB, 0xCD..0xCF].detect {|r| r.include? c}
        :readsize
      else
        :skipframe
      end
    when :skipframe
      @skip_chars = read_int(get_chars(2)) - 2
      :do_skip
    when :do_skip
      get_chars(@skip_chars)
      :started
    when :readsize
      s = get_chars(7)
      return [read_int(s[5..6]), read_int(s[3..4])]
    end
  end
end