void BoyerMooreSearch::FindNextWorker(SearchParams* searchParams) {
  const char* text = searchParams->TextStart;
  int textLen = searchParams->TextLength;
  if (searchParams->MatchStart != nullptr) {
    text = searchParams->MatchStart + searchParams->MatchLength;
    // TODO(rpaquay): 2GB Limit
    textLen = (int)(searchParams->TextStart + searchParams->TextLength - text);
  }

  searchParams->MatchStart = (const char*)boyer_moore_algo(
    (const uint8_t*)text,
    textLen,
    (const uint8_t*)pattern_,
    patternLen_,
    matchCase_,
    delta1_,
    delta2_);
  if (searchParams->MatchStart != nullptr) {
    searchParams->MatchLength = patternLen_;
  }
}
const char *BoyerMooreSearch::Search(const char *text, int textLen) {
  return (const char*)boyer_moore_algo((const uint8_t*)text, textLen, (const uint8_t*)pattern_, patternLen_, matchCase_, delta1_, delta2_);
}