comparison kdiff3/src-QT4/merger.cpp @ 75:08ea9b86c12c

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