void AppendTable(CLineVector & lineVector, const CTable & table, CLine::TYPE type) { for (size_t i = 1; i < table.size() - 1; ++i) { CLine line = table[i]; line.SetType(type); lineVector.push_back(line); } }
void AppendBlankLines(CLineVector & lineVector, const CTable & otherTable, CLine::TYPE type) { for (size_t i = 1; i < otherTable.size() - 1; ++i) { CLine line; if (!IsDummyLine(line)) { line.SetType(otherTable[i].GetType() == CLine::TYPE_MOVED ? CLine::TYPE_MATCH : type); lineVector.push_back(line); } } }
void CAnchors::GetResults(CLineVector & baseResult, CLineVector & compResult) { for(size_t i = 1; i < m_baseTable.size() - 1; ++i) { CLine line = m_baseTable[i]; if (AnchorsBaseContains(i)) line.SetType(CLine::TYPE_MATCH); else line.SetType(CLine::TYPE_SIMILAR); baseResult.push_back(line); } for(size_t i = 1; i < m_compTable.size() - 1; ++i) { CLine line = m_compTable[i]; if (AnchorsCompContains(i)) line.SetType(CLine::TYPE_MATCH); else line.SetType(CLine::TYPE_SIMILAR); compResult.push_back(line); } }
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; } } }