Mercurial > hg > easyhg-kdiff3
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 } |