- Модуль: wiki
- Путь к файлу: ~/bitrix/modules/wiki/lib/diff.php
- Класс: BitrixWikiDiff
- Вызов: Diff::longestCommonSubsequence
protected function longestCommonSubsequence(array $a, $lowerA, $upperA, array $b, $lowerB, $upperB)
{
// Skipping equal lines at the start
while ($lowerA < $upperA && $lowerB < $upperB && $a[$lowerA] == $b[$lowerB])
{
$lowerA++;
$lowerB++;
}
// Skipping equal lines at the end
while ($lowerA < $upperA && $lowerB < $upperB && $a[$upperA - 1] == $b[$upperB - 1])
{
$upperA--;
$upperB--;
}
if ($lowerA === $upperA)
{
// mark as inserted lines.
while ($lowerB < $upperB)
{
$this->modifiedB[$lowerB++] = true;
}
}
else
{
if ($lowerB === $upperB)
{
// mark as deleted lines.
while ($lowerA < $upperA)
{
$this->modifiedA[$lowerA++] = true;
}
}
else
{
// Find the middle snake and length of an optimal path for A and B
$sms = $this->shortestMiddleSnake($a, $lowerA, $upperA, $b, $lowerB, $upperB);
// The path is from LowerX to (x,y) and (x,y) to UpperX
$this->longestCommonSubsequence($a, $lowerA, $sms['x'], $b, $lowerB, $sms['y']);
$this->longestCommonSubsequence($a, $sms['x'], $upperA, $b, $sms['y'], $upperB);
}
}
}