1 /* 2 * This file is part of KDiff3. 3 * 4 * SPDX-FileCopyrightText: 2002-2011 Joachim Eibl, joachim.eibl at gmx.de 5 * SPDX-FileCopyrightText: 2018-2020 Michael Reeves reeves.87@gmail.com 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #include "merger.h" 10 11 #include <list> 12 Merger(const DiffList * pDiffList1,const DiffList * pDiffList2)13Merger::Merger(const DiffList* pDiffList1, const DiffList* pDiffList2) 14 : md1(pDiffList1, 0), md2(pDiffList2, 1) 15 { 16 } 17 MergeData(const DiffList * p,int i)18Merger::MergeData::MergeData(const DiffList* p, int i) 19 { 20 idx = i; 21 pDiffList = p; 22 if(p != nullptr) 23 { 24 it = p->begin(); 25 update(); 26 } 27 } 28 eq() const29bool Merger::MergeData::eq() const 30 { 31 return pDiffList == nullptr || d.numberOfEquals() > 0; 32 } 33 isEnd() const34bool Merger::MergeData::isEnd() const 35 { 36 return (pDiffList == nullptr || (it == pDiffList->end() && d.numberOfEquals() == 0 && 37 (idx == 0 ? d.diff1() == 0 : d.diff2() == 0))); 38 } 39 update()40void Merger::MergeData::update() 41 { 42 if(d.numberOfEquals() > 0) 43 d.adjustNumberOfEquals(-1); 44 else if(idx == 0 && d.diff1() > 0) 45 d.adjustDiff1(-1); 46 else if(idx == 1 && d.diff2() > 0) 47 d.adjustDiff2(-1); 48 49 while(d.numberOfEquals() == 0 && ((idx == 0 && d.diff1() == 0) || (idx == 1 && d.diff2() == 0)) && pDiffList != nullptr && it != pDiffList->end()) 50 { 51 d = *it; 52 ++it; 53 } 54 } 55 next()56void Merger::next() 57 { 58 md1.update(); 59 md2.update(); 60 } 61 whatChanged()62ChangeFlags Merger::whatChanged() 63 { 64 ChangeFlags changed = ChangeFlag::NoChange; 65 changed |= md1.eq() ? ChangeFlag::NoChange : ChangeFlag::AChanged; 66 changed |= md2.eq() ? ChangeFlag::NoChange : ChangeFlag::BChanged; 67 return changed; 68 } 69 isEndReached()70bool Merger::isEndReached() 71 { 72 return md1.isEnd() && md2.isEnd(); 73 } 74