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 }
|