annotate kdiff3/src/merger.cpp @ 8:86d21651c8db

KDiff3 version 0.9.70
author joachim99
date Mon, 06 Oct 2003 18:50:45 +0000
parents
children c59d5a3a8ff3
rev   line source
joachim99@8 1 /***************************************************************************
joachim99@8 2 merger.cpp - description
joachim99@8 3 -------------------
joachim99@8 4 begin : Sun Mar 24 2002
joachim99@8 5 copyright : (C) 2002 by Joachim Eibl
joachim99@8 6 email : joachim.eibl@gmx.de
joachim99@8 7 ***************************************************************************/
joachim99@8 8
joachim99@8 9 /***************************************************************************
joachim99@8 10 * *
joachim99@8 11 * This program is free software; you can redistribute it and/or modify *
joachim99@8 12 * it under the terms of the GNU General Public License as published by *
joachim99@8 13 * the Free Software Foundation; either version 2 of the License, or *
joachim99@8 14 * (at your option) any later version. *
joachim99@8 15 * *
joachim99@8 16 ***************************************************************************/
joachim99@8 17
joachim99@8 18 /***************************************************************************
joachim99@8 19 * $Log$
joachim99@8 20 * Revision 1.1 2003/10/06 18:38:48 joachim99
joachim99@8 21 * KDiff3 version 0.9.70
joachim99@8 22 * *
joachim99@8 23 ***************************************************************************/
joachim99@8 24
joachim99@8 25 #include "merger.h"
joachim99@8 26 #include <assert.h>
joachim99@8 27 #include <iostream>
joachim99@8 28 #include <iomanip>
joachim99@8 29
joachim99@8 30 Merger::Merger( const DiffList* pDiffListAB, const DiffList* pDiffListCA )
joachim99@8 31 : md1( pDiffListAB, 0 ), md2( pDiffListCA, 1 )
joachim99@8 32 {
joachim99@8 33 }
joachim99@8 34
joachim99@8 35
joachim99@8 36 Merger::MergeData::MergeData( const DiffList* p, int i )
joachim99@8 37 : d(0,0,0)
joachim99@8 38 {
joachim99@8 39 idx=i;
joachim99@8 40 pDiffList = p;
joachim99@8 41 if ( p!=0 )
joachim99@8 42 {
joachim99@8 43 it=p->begin();
joachim99@8 44 update();
joachim99@8 45 }
joachim99@8 46 }
joachim99@8 47
joachim99@8 48 bool Merger::MergeData::eq()
joachim99@8 49 {
joachim99@8 50 return pDiffList==0 || d.nofEquals > 0;
joachim99@8 51 }
joachim99@8 52
joachim99@8 53 bool Merger::MergeData::isEnd()
joachim99@8 54 {
joachim99@8 55 return ( pDiffList==0 || ( it==pDiffList->end() && d.nofEquals==0 &&
joachim99@8 56 ( idx == 0 ? d.diff1==0 : d.diff2==0 )
joachim99@8 57 ) );
joachim99@8 58 }
joachim99@8 59
joachim99@8 60 void Merger::MergeData::update()
joachim99@8 61 {
joachim99@8 62 if ( d.nofEquals > 0 )
joachim99@8 63 --d.nofEquals;
joachim99@8 64 else if ( idx==0 && d.diff1 > 0 )
joachim99@8 65 --d.diff1;
joachim99@8 66 else if ( idx==1 && d.diff2 > 0 )
joachim99@8 67 --d.diff2;
joachim99@8 68
joachim99@8 69 while( d.nofEquals == 0 && (idx==0 && d.diff1 == 0 || idx==1 && d.diff2 == 0)
joachim99@8 70 && pDiffList!=0 && it != pDiffList->end() )
joachim99@8 71 {
joachim99@8 72 d = *it;
joachim99@8 73 ++it;
joachim99@8 74 }
joachim99@8 75 }
joachim99@8 76
joachim99@8 77 void Merger::next()
joachim99@8 78 {
joachim99@8 79 md1.update();
joachim99@8 80 md2.update();
joachim99@8 81 }
joachim99@8 82
joachim99@8 83 int Merger::whatChanged()
joachim99@8 84 {
joachim99@8 85 int changed = 0;
joachim99@8 86 changed |= md1.eq() ? 0 : 1;
joachim99@8 87 changed |= md2.eq() ? 0 : 2;
joachim99@8 88 return changed;
joachim99@8 89 }
joachim99@8 90
joachim99@8 91 bool Merger::isEndReached()
joachim99@8 92 {
joachim99@8 93 return md1.isEnd() && md2.isEnd();
joachim99@8 94 }