From 76718abdb2138623102398a10f3228e576dd0ae8 Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 10 Feb 2010 01:27:27 +0000 Subject: Added abandoned KDE3 version of kdiff3 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kdiff3@1088041 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- src/merger.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/merger.cpp (limited to 'src/merger.cpp') diff --git a/src/merger.cpp b/src/merger.cpp new file mode 100644 index 0000000..371548c --- /dev/null +++ b/src/merger.cpp @@ -0,0 +1,87 @@ +/*************************************************************************** + merger.cpp - description + ------------------- + begin : Sun Mar 24 2002 + copyright : (C) 2002-2007 by Joachim Eibl + email : joachim.eibl at gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "merger.h" +#include +#include +#include + +Merger::Merger( const DiffList* pDiffListAB, const DiffList* pDiffListCA ) +: md1( pDiffListAB, 0 ), md2( pDiffListCA, 1 ) +{ +} + + +Merger::MergeData::MergeData( const DiffList* p, int i ) +: d(0,0,0) +{ + idx=i; + pDiffList = p; + if ( p!=0 ) + { + it=p->begin(); + update(); + } +} + +bool Merger::MergeData::eq() +{ + return pDiffList==0 || d.nofEquals > 0; +} + +bool Merger::MergeData::isEnd() +{ + return ( pDiffList==0 || ( it==pDiffList->end() && d.nofEquals==0 && + ( idx == 0 ? d.diff1==0 : d.diff2==0 ) + ) ); +} + +void Merger::MergeData::update() +{ + if ( d.nofEquals > 0 ) + --d.nofEquals; + else if ( idx==0 && d.diff1 > 0 ) + --d.diff1; + else if ( idx==1 && d.diff2 > 0 ) + --d.diff2; + + while( d.nofEquals == 0 && (idx==0 && d.diff1 == 0 || idx==1 && d.diff2 == 0) + && pDiffList!=0 && it != pDiffList->end() ) + { + d = *it; + ++it; + } +} + +void Merger::next() +{ + md1.update(); + md2.update(); +} + +int Merger::whatChanged() +{ + int changed = 0; + changed |= md1.eq() ? 0 : 1; + changed |= md2.eq() ? 0 : 2; + return changed; +} + +bool Merger::isEndReached() +{ + return md1.isEnd() && md2.isEnd(); +} -- cgit v1.2.3