mirror of
https://github.com/tstack/lnav
synced 2024-11-05 21:21:19 +00:00
f241704a93
Prototype for #541
48 lines
1.8 KiB
C++
48 lines
1.8 KiB
C++
// LICENSE
|
|
//
|
|
// This software is dual-licensed to the public domain and under the following
|
|
// license: you are granted a perpetual, irrevocable license to copy, modify,
|
|
// publish, and distribute this file as you see fit.
|
|
//
|
|
// VERSION
|
|
// 0.2.0 (2017-02-18) Scored matches perform exhaustive search for best score
|
|
// 0.1.0 (2016-03-28) Initial release
|
|
//
|
|
// AUTHOR
|
|
// Forrest Smith
|
|
//
|
|
// NOTES
|
|
// Compiling
|
|
// You MUST add '#define FTS_FUZZY_MATCH_IMPLEMENTATION' before including this header in ONE source file to create implementation.
|
|
//
|
|
// fuzzy_match_simple(...)
|
|
// Returns true if each character in pattern is found sequentially within str
|
|
//
|
|
// fuzzy_match(...)
|
|
// Returns true if pattern is found AND calculates a score.
|
|
// Performs exhaustive search via recursion to find all possible matches and match with highest score.
|
|
// Scores values have no intrinsic meaning. Possible score range is not normalized and varies with pattern.
|
|
// Recursion is limited internally (default=10) to prevent degenerate cases (pattern="aaaaaa" str="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
|
|
// Uses uint8_t for match indices. Therefore patterns are limited to 256 characters.
|
|
// Score system should be tuned for YOUR use case. Words, sentences, file names, or method names all prefer different tuning.
|
|
|
|
|
|
#ifndef FTS_FUZZY_MATCH_H
|
|
#define FTS_FUZZY_MATCH_H
|
|
|
|
|
|
#include <cstdint> // uint8_t
|
|
#include <ctype.h> // ::tolower, ::toupper
|
|
#include <cstring> // memcpy
|
|
|
|
#include <cstdio>
|
|
|
|
// Public interface
|
|
namespace fts {
|
|
bool fuzzy_match_simple(char const * pattern, char const * str);
|
|
bool fuzzy_match(char const * pattern, char const * str, int & outScore);
|
|
bool fuzzy_match(char const * pattern, char const * str, int & outScore, uint8_t * matches, int maxMatches);
|
|
}
|
|
|
|
#endif // FTS_FUZZY_MATCH_H
|