module BinData::Skip::SkipUntilValidPlugin

def next_search_index(io, fs)

def next_search_index(io, fs)
  buffer = binary_string("")
  # start searching at fast_search offset
  pos = fs.offset
  io.skip(fs.offset)
  loop do
    data = io.read(SEARCH_SIZE)
    raise EOFError, "no match" if data.nil?
    buffer << data
    index = buffer.index(fs.pattern)
    if index
      return pos + index - fs.offset
    end
    # advance buffer
    searched = buffer.slice!(0..-fs.pattern.size)
    pos += searched.size
  end
end