void CAnchors::GetPaddedResults(CLineVector & baseResult, CLineVector & compResult) const { unsigned int matchCount = GetMatchCount(); unsigned int gapCount = GetGapCount(); unsigned int matchPos = 0; unsigned int gapPos = 0; while(matchPos < matchCount) { { CTable baseTable, compTable; GetMatch(matchPos, baseTable, compTable); for (size_t i = 1; i < baseTable.size() - 1; ++i) { CLine baseLine = baseTable[i]; CLine compLine = compTable[i]; CLine::TYPE type = baseLine.Equals(compLine, 0) ? CLine::TYPE_MATCH : CLine::TYPE_SIMILAR; if (type == CLine::TYPE_SIMILAR) { CTable baseLineTable(baseLine.GetText(), true); CTable compLineTable(compLine.GetText(), true); CAnchors lineAnchors(baseLineTable, compLineTable, 0); CLineVector baseLineVector, compLineVector; lineAnchors.GetResults(baseLineVector, compLineVector); SetCharTypes(baseLine, baseLineVector); SetCharTypes(compLine, compLineVector); } baseLine.SetType(type); compLine.SetType(type); baseResult.push_back(baseLine); compResult.push_back(compLine); } ATLASSERT(baseResult.size() == compResult.size()); ++matchPos; } if (gapPos < gapCount) { CTable baseTable, compTable; GetGap(gapPos, baseTable, compTable); if (baseTable.size() <= 2) //Added lines { ATLASSERT(compTable.size() > 2); AppendBlankLines(baseResult, compTable, CLine::TYPE_ADDED); AppendTable(compResult, compTable, CLine::TYPE_ADDED); } else if (compTable.size() <= 2) //Deleted lines { ATLASSERT(baseTable.size() > 2); AppendTable(baseResult, baseTable, CLine::TYPE_DELETED); AppendBlankLines(compResult, baseTable, CLine::TYPE_DELETED); } else if (m_accuracy > 35) // Don't recurse too much. { AppendTable(baseResult, baseTable, CLine::TYPE_DELETED); AppendBlankLines(compResult, baseTable, CLine::TYPE_DELETED); AppendBlankLines(baseResult, compTable, CLine::TYPE_ADDED); AppendTable(compResult, compTable, CLine::TYPE_ADDED); } else { CAnchors gapAnchors(baseTable, compTable, m_accuracy + 5); gapAnchors.GetPaddedResults(baseResult, compResult); } ATLASSERT(baseResult.size() == compResult.size()); ++gapPos; } } }
bool IsDummyLine(const CLine & line) { ATLASSERT((line.Equals(startLine, 0) || line.Equals(endLine, 0)) == false); return (line.Equals(startLine, 0) || line.Equals(endLine, 0)); }