mirror of
https://github.com/dlang/phobos.git
synced 2025-05-01 15:40:36 +03:00
update1
This commit is contained in:
parent
43286f8074
commit
a69f9d0d66
1 changed files with 21 additions and 24 deletions
|
@ -1085,31 +1085,28 @@ size_t levenshteinDistance(alias equals = "a == b", Range1, Range2)
|
||||||
(Range1 s, Range2 t)
|
(Range1 s, Range2 t)
|
||||||
if (isForwardRange!(Range1) && isForwardRange!(Range2))
|
if (isForwardRange!(Range1) && isForwardRange!(Range2))
|
||||||
{
|
{
|
||||||
alias comp = binaryFun!(equals);
|
alias eq = binaryFun!(equals);
|
||||||
|
|
||||||
while (!s.empty() && !t.empty() && comp(s.front, t.front))
|
for (;;)
|
||||||
{
|
{
|
||||||
s.popFront();
|
if (s.empty) return t.walkLength;
|
||||||
t.popFront();
|
if (t.empty) return s.walkLength;
|
||||||
}
|
if (eq(s.front, t.front))
|
||||||
|
|
||||||
static if (isBidirectionalRange!(Range1) && isBidirectionalRange!(Range2))
|
|
||||||
{
|
|
||||||
while (!s.empty() && !t.empty() && comp(s.back, t.back))
|
|
||||||
{
|
{
|
||||||
s.popBack();
|
s.popFront();
|
||||||
t.popBack();
|
t.popFront();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
static if (isBidirectionalRange!(Range1) && isBidirectionalRange!(Range2))
|
||||||
|
{
|
||||||
if (s.empty())
|
if (eq(s.back, t.back))
|
||||||
{
|
{
|
||||||
return walkLength(t);
|
s.popBack();
|
||||||
}
|
t.popBack();
|
||||||
|
continue;
|
||||||
if (t.empty())
|
}
|
||||||
{
|
}
|
||||||
return walkLength(s);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto slen = walkLength(s.save);
|
auto slen = walkLength(s.save);
|
||||||
|
@ -1117,7 +1114,7 @@ size_t levenshteinDistance(alias equals = "a == b", Range1, Range2)
|
||||||
|
|
||||||
if (slen == 1 && tlen == 1)
|
if (slen == 1 && tlen == 1)
|
||||||
{
|
{
|
||||||
if (comp(s.front, t.front))
|
if (eq(s.front, t.front))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1125,12 +1122,12 @@ size_t levenshteinDistance(alias equals = "a == b", Range1, Range2)
|
||||||
|
|
||||||
if (slen > tlen)
|
if (slen > tlen)
|
||||||
{
|
{
|
||||||
Levenshtein!(Range1, comp, size_t) lev;
|
Levenshtein!(Range1, eq, size_t) lev;
|
||||||
return lev.distanceLowMem(s, t, slen, tlen);
|
return lev.distanceLowMem(s, t, slen, tlen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Levenshtein!(Range2, comp, size_t) lev;
|
Levenshtein!(Range2, eq, size_t) lev;
|
||||||
return lev.distanceLowMem(t, s, tlen, slen);
|
return lev.distanceLowMem(t, s, tlen, slen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue