| 1501 | } |
| 1502 | |
| 1503 | void Diff3Line::getLineInfo(const e_SrcSelector winIdx, const bool isTriple, LineRef& lineIdx, |
| 1504 | std::shared_ptr<const DiffList>& pFineDiff1, std::shared_ptr<const DiffList>& pFineDiff2, // return values |
| 1505 | ChangeFlags& changed, ChangeFlags& changed2) const |
| 1506 | { |
| 1507 | changed = NoChange; |
| 1508 | changed2 = NoChange; |
| 1509 | bool bAEqualB = this->isEqualAB() || (bWhiteLineA && bWhiteLineB); |
| 1510 | bool bAEqualC = this->isEqualAC() || (bWhiteLineA && bWhiteLineC); |
| 1511 | bool bBEqualC = this->isEqualBC() || (bWhiteLineB && bWhiteLineC); |
| 1512 | |
| 1513 | assert(winIdx >= e_SrcSelector::A && winIdx <= e_SrcSelector::C); |
| 1514 | if(winIdx == e_SrcSelector::A) |
| 1515 | { |
| 1516 | lineIdx = getLineA(); |
| 1517 | pFineDiff1 = pFineAB; |
| 1518 | pFineDiff2 = pFineCA; |
| 1519 | |
| 1520 | changed = ((!getLineB().isValid()) != (!lineIdx.isValid()) ? AChanged : NoChange) | |
| 1521 | ((!getLineC().isValid()) != (!lineIdx.isValid()) && isTriple ? BChanged : NoChange); |
| 1522 | changed2 = (bAEqualB ? NoChange : AChanged) | (bAEqualC || !isTriple ? NoChange : BChanged); |
| 1523 | } |
| 1524 | else if(winIdx == e_SrcSelector::B) |
| 1525 | { |
| 1526 | lineIdx = getLineB(); |
| 1527 | pFineDiff1 = pFineBC; |
| 1528 | pFineDiff2 = pFineAB; |
| 1529 | changed = ((!getLineC().isValid()) != (!lineIdx.isValid()) && isTriple ? AChanged : NoChange) | |
| 1530 | ((!getLineA().isValid()) != (!lineIdx.isValid()) ? BChanged : NoChange); |
| 1531 | changed2 = (bBEqualC || !isTriple ? NoChange : AChanged) | (bAEqualB ? NoChange : BChanged); |
| 1532 | } |
| 1533 | else if(winIdx == e_SrcSelector::C) |
| 1534 | { |
| 1535 | lineIdx = getLineC(); |
| 1536 | pFineDiff1 = pFineCA; |
| 1537 | pFineDiff2 = pFineBC; |
| 1538 | changed = ((!getLineA().isValid()) != (!lineIdx.isValid()) ? AChanged : NoChange) | |
| 1539 | ((!getLineB().isValid()) != (!lineIdx.isValid()) ? BChanged : NoChange); |
| 1540 | changed2 = (bAEqualC ? NoChange : AChanged) | (bBEqualC ? NoChange : BChanged); |
| 1541 | } |
| 1542 | } |
| 1543 | |
| 1544 | bool Diff3LineList::fineDiff(const e_SrcSelector selector, const std::shared_ptr<LineDataVector> &v1, const std::shared_ptr<LineDataVector> &v2, const IgnoreFlags eIgnoreFlags) |
| 1545 | { |