MCPcopy Create free account
hub / github.com/KDE/kdiff3 / fineDiff

Method fineDiff

src/diff.cpp:1436–1501  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1434}
1435
1436bool Diff3Line::fineDiff(bool inBTextsTotalEqual, const e_SrcSelector selector, const std::shared_ptr<LineDataVector> &v1, const std::shared_ptr<LineDataVector> &v2, const IgnoreFlags eIgnoreFlags)
1437{
1438 LineRef k1 = 0;
1439 LineRef k2 = 0;
1440 qint32 maxSearchLength = 500;
1441 bool bTextsTotalEqual = inBTextsTotalEqual;
1442 bool bIgnoreComments = eIgnoreFlags & IgnoreFlag::ignoreComments;
1443 bool bIgnoreWhiteSpace = eIgnoreFlags & IgnoreFlag::ignoreWhiteSpace;
1444
1445 assert(selector == e_SrcSelector::A || selector == e_SrcSelector::B || selector == e_SrcSelector::C);
1446
1447 if(selector == e_SrcSelector::A)
1448 {
1449 k1 = getLineA();
1450 k2 = getLineB();
1451 }
1452 else if(selector == e_SrcSelector::B)
1453 {
1454 k1 = getLineB();
1455 k2 = getLineC();
1456 }
1457 else if(selector == e_SrcSelector::C)
1458 {
1459 k1 = getLineC();
1460 k2 = getLineA();
1461 }
1462
1463 qCDebug(kdiffCore) << "k1 = " << k1 << ", k2 = " << k2;
1464 if((!k1.isValid() && k2.isValid()) || (k1.isValid() && !k2.isValid())) bTextsTotalEqual = false;
1465 if(k1.isValid() && k2.isValid())
1466 {
1467 assert(((unsigned long)k1) <= (*v1).size() && (*v1)[k1].getBuffer() != nullptr);
1468 assert(((unsigned long)k2) <= (*v2).size() && (*v2)[k2].getBuffer() != nullptr);
1469
1470 if((*v1)[k1].size() != (*v2)[k2].size() || QString::compare((*v1)[k1].getLine(), (*v2)[k2].getLine()) != 0)
1471 {
1472 bTextsTotalEqual = false;
1473 auto pDiffList = std::make_shared<DiffList>();
1474 pDiffList->calcDiff((*v1)[k1].getLine(), (*v2)[k2].getLine(), maxSearchLength);
1475
1476 // Optimize the diff list.
1477 pDiffList->optimize();
1478 setFineDiff(selector, pDiffList);
1479 }
1480 /*
1481 Override default euality for white lines and comments.
1482 */
1483 if(((bIgnoreComments && (*v1)[k1].isSkipable()) || (bIgnoreWhiteSpace && (*v1)[k1].whiteLine())) && ((bIgnoreComments && (*v2)[k2].isSkipable()) || (bIgnoreWhiteSpace && (*v2)[k2].whiteLine())))
1484 {
1485 if(selector == e_SrcSelector::A)
1486 {
1487 bAEqB = true;
1488 }
1489 else if(selector == e_SrcSelector::B)
1490 {
1491 bBEqC = true;
1492 }
1493 else if(selector == e_SrcSelector::C)

Callers 2

determineFileAlignmentFunction · 0.80
mainInitMethod · 0.80

Calls 7

getLineMethod · 0.80
calcDiffMethod · 0.80
optimizeMethod · 0.80
whiteLineMethod · 0.80
isValidMethod · 0.45
sizeMethod · 0.45
isSkipableMethod · 0.45

Tested by 1

determineFileAlignmentFunction · 0.64