Speed up FuzzyContains a bit more

This commit is contained in:
ta264 2022-02-04 19:57:24 +00:00
parent e7410959fe
commit 4f46ab9a9a

View file

@ -107,12 +107,24 @@ private static Tuple<int, int, double> MatchBitap<T>(string text, string pattern
var adjustForWordBoundary = wordDelimiters != null;
var start = 1;
var finish = text.Length + pattern.Length;
var charMatches = new T[finish];
for (var c = start; c <= finish; c++)
{
if (text.Length <= c - 1 || !s.TryGetValue(text[c - 1], out var mask))
{
// Out of range.
mask = allOnes;
}
charMatches[c - 1] = mask;
}
for (var d = 0; d < pattern.Length; d++)
{
// Scan for the best match; each iteration allows for one more error.
var start = 1;
var finish = text.Length + pattern.Length;
var rd = new T[finish + 2];
rd[finish + 1] = calculator.BitwiseComplement(calculator.Subtract(calculator.LeftShift(one, d), one));
@ -124,11 +136,7 @@ private static Tuple<int, int, double> MatchBitap<T>(string text, string pattern
for (var j = finish; j >= start; j--)
{
if (text.Length <= j - 1 || !s.TryGetValue(text[j - 1], out var charMatch))
{
// Out of range.
charMatch = allOnes;
}
T charMatch = charMatches[j - 1];
if (d == 0)
{