int64_t ObStringSearch::fast_search(const ObString & pattern, const ObString & text) { const char* pat = pattern.ptr(); const int64_t pat_len = pattern.length(); const char* txt = text.ptr(); const int64_t txt_len = text.length(); return fast_search(pat, pat_len, txt, txt_len); }
static inline ssize_t sub_str_find(const char *str, ssize_t str_len, const char *sub, ssize_t sub_len, ssize_t offset) { ssize_t pos; if (sub_len == 0) return offset; pos = fast_search(str, str_len, sub, sub_len, -1, FAST_SEARCH); if (pos >= 0) pos += offset; return pos; }
static inline ssize_t sub_str_count(const char *str, size_t str_len, const char *sub, size_t sub_len, size_t max_count) { ssize_t count; if (sub_len == 0) return (str_len < max_count) ? str_len + 1 : max_count; count = fast_search(str, str_len, sub, sub_len, max_count, FAST_COUNT); if (count < 0) return 0; /* no match */ return count; }