• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • core
  • piecetable
grouppiecetablechange.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Okteta Core library, made within the KDE community.
3 
4  Copyright 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) version 3, or any
10  later version accepted by the membership of KDE e.V. (or its
11  successor approved by the membership of KDE e.V.), which shall
12  act as a proxy defined in Section 6 of version 3 of the license.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "grouppiecetablechange.h"
24 
25 // lib
26 #include "piecetable.h"
27 //
28 #include <addressrangelist.h>
29 #include <arraychangemetricslist.h>
30 // KDE
31 #include <KLocale>
32 
33 
34 namespace KPieceTable
35 {
36 
37 int GroupPieceTableChange::type() const { return GroupId; }
38 
39 QString GroupPieceTableChange::description() const
40 {
41  return mDescription;
42 }
43 
44 bool GroupPieceTableChange::merge( const AbstractPieceTableChange* other )
45 {
46  bool result = false;
47 
48  if( !mChangeStack.isEmpty() )
49  result = mChangeStack.last()->merge( other );
50 
51  return result;
52 }
53 
54 AddressRange GroupPieceTableChange::apply( PieceTable* pieceTable ) const
55 {
56 Q_UNUSED( pieceTable )
57 // pieceTable->insert( mInsertOffset, mInsertLength, mStorageOffset );
58 
59  return AddressRange();//( mInsertOffset, pieceTable->size()-1 );
60 }
61 
62 AddressRange GroupPieceTableChange::revert( PieceTable* pieceTable ) const
63 {
64 Q_UNUSED( pieceTable )
65 // const int oldLast = pieceTable->size() - 1;
66 // pieceTable->remove( AddressRange::fromWidth(mInsertOffset,mInsertLength) );
67  return AddressRange();//( mInsertOffset, oldLast );
68 }
69 
70 ArrayChangeMetrics GroupPieceTableChange::metrics() const
71 {
72  return ArrayChangeMetrics::asReplacement( 0, 0, 0);
73 }
74 
75 bool GroupPieceTableChange::appendChange( AbstractPieceTableChange* change )
76 {
77 #if 0
78  // chop unapplied changes
79  if( mAppliedChangesCount < mChangeStack.count() )
80  {
81  // hide baseindex if needed
82  if( mBaseBeforeChangeIndex > mAppliedChangesCount )
83  mBaseBeforeChangeIndex = -1;
84  do
85  {
86  AbstractPieceTableChange *droppedChange = mChangeStack.pop();
87  delete droppedChange;
88  }
89  while( mAppliedChangesCount < mChangeStack.count() );
90  }
91 #endif
92  mAppliedChangesDataSize += change->dataSize();
93 
94  bool isNotMerged = true;
95  if( mTryToMergeAppendedChange && mAppliedChangesCount>0 )
96  isNotMerged = !mChangeStack.top()->merge( change );
97  else
98  mTryToMergeAppendedChange = true;
99 
100  if( isNotMerged )
101  {
102  mChangeStack.push( change );
103  ++mAppliedChangesCount;
104  }
105  else
106  delete change;
107 
108  return isNotMerged;
109 }
110 
111 
112 AddressRangeList GroupPieceTableChange::applyGroup( PieceTable* pieceTable ) const
113 {
114  AddressRangeList result;
115 
116  foreach( AbstractPieceTableChange* change, mChangeStack )
117  {
118  if( change->type() == AbstractPieceTableChange::GroupId )
119  {
120  const GroupPieceTableChange* groupChange = static_cast<const GroupPieceTableChange*>(change);
121  const AddressRangeList changedRangeList = groupChange->applyGroup( pieceTable );
122  result.addAddressRangeList( changedRangeList );
123  }
124  else
125  result.append( change->apply(pieceTable) );
126  }
127 
128  return result;
129 }
130 
131 AddressRangeList GroupPieceTableChange::revertGroup( PieceTable* pieceTable ) const
132 {
133  AddressRangeList result;
134 
135  QStack<AbstractPieceTableChange*>::ConstIterator it = mChangeStack.end();
136  while( it != mChangeStack.begin() )
137  {
138  --it;
139  AbstractPieceTableChange *change = *it;
140  if( change->type() == AbstractPieceTableChange::GroupId )
141  {
142  const GroupPieceTableChange* groupChange = static_cast<const GroupPieceTableChange*>(change);
143  const AddressRangeList changedRangeList = groupChange->revertGroup( pieceTable );
144  result.addAddressRangeList( changedRangeList );
145  }
146  else
147  result.append( change->revert(pieceTable) );
148  }
149 
150  return result;
151 }
152 
153 ArrayChangeMetricsList GroupPieceTableChange::groupMetrics( bool reverted ) const
154 {
155  ArrayChangeMetricsList result;
156 
157  foreach( AbstractPieceTableChange* change, mChangeStack )
158  {
159  if( change->type() == AbstractPieceTableChange::GroupId )
160  {
161  const GroupPieceTableChange *groupChange = static_cast<const GroupPieceTableChange*>(change);
162  const ArrayChangeMetricsList metricsList = groupChange->groupMetrics( reverted );
163  result += metricsList;
164  }
165  else
166  {
167  ArrayChangeMetrics changeMetrics = change->metrics();
168  if( reverted )
169  changeMetrics.revert();
170  result.append( changeMetrics );
171  }
172  }
173 
174  return result;
175 }
176 
177 
178 Size GroupPieceTableChange::dataSize() const
179 {
180  return mAppliedChangesDataSize;
181 }
182 
183 GroupPieceTableChange::~GroupPieceTableChange()
184 {
185  while( ! mChangeStack.isEmpty() )
186  delete mChangeStack.pop();
187 }
188 
189 }
Okteta::ArrayChangeMetrics::revert
void revert()
Definition: arraychangemetrics.h:123
KPieceTable::AbstractPieceTableChange::apply
virtual AddressRange apply(PieceTable *pieceTable) const =0
KPieceTable::GroupPieceTableChange::apply
virtual AddressRange apply(PieceTable *pieceTable) const
Definition: grouppiecetablechange.cpp:54
KPieceTable::GroupPieceTableChange::description
virtual QString description() const
Definition: grouppiecetablechange.cpp:39
KPieceTable::Size
Okteta::Size Size
Definition: piece.h:33
KDE::NumberRange< Address, Size >
KPieceTable::GroupPieceTableChange::type
virtual int type() const
Definition: grouppiecetablechange.cpp:37
addressrangelist.h
KPieceTable::GroupPieceTableChange::revert
virtual AddressRange revert(PieceTable *pieceTable) const
Definition: grouppiecetablechange.cpp:62
grouppiecetablechange.h
KPieceTable::GroupPieceTableChange::mAppliedChangesDataSize
Size mAppliedChangesDataSize
Definition: grouppiecetablechange.h:102
KPieceTable::GroupPieceTableChange::metrics
virtual ArrayChangeMetrics metrics() const
Definition: grouppiecetablechange.cpp:70
KPieceTable::GroupPieceTableChange::groupMetrics
ArrayChangeMetricsList groupMetrics(bool reverted=false) const
Definition: grouppiecetablechange.cpp:153
KPieceTable::GroupPieceTableChange::mTryToMergeAppendedChange
bool mTryToMergeAppendedChange
if true, try to merge changes
Definition: grouppiecetablechange.h:104
KPieceTable::GroupPieceTableChange::applyGroup
AddressRangeList applyGroup(PieceTable *pieceTable) const
Definition: grouppiecetablechange.cpp:112
Okteta::ArrayChangeMetricsList
Definition: arraychangemetricslist.h:36
KPieceTable::AddressRange
Okteta::AddressRange AddressRange
Definition: piece.h:35
KPieceTable::GroupPieceTableChange::mChangeStack
QStack< AbstractPieceTableChange * > mChangeStack
Definition: grouppiecetablechange.h:95
KPieceTable::GroupPieceTableChange::dataSize
virtual Size dataSize() const
returns the size of the added data. Default returns 0.
Definition: grouppiecetablechange.cpp:178
KPieceTable::GroupPieceTableChange::~GroupPieceTableChange
virtual ~GroupPieceTableChange()
Definition: grouppiecetablechange.cpp:183
KPieceTable::AbstractPieceTableChange
class
Definition: abstractpiecetablechange.h:45
KPieceTable::PieceTable
Definition: piecetable.h:35
arraychangemetricslist.h
KPieceTable::AbstractPieceTableChange::metrics
virtual ArrayChangeMetrics metrics() const =0
KPieceTable::GroupPieceTableChange::mDescription
QString mDescription
Definition: grouppiecetablechange.h:98
Okteta::ArrayChangeMetrics::asReplacement
static ArrayChangeMetrics asReplacement(Address offset, Size removeLength, Size insertLength)
Definition: arraychangemetrics.h:100
KPieceTable::AbstractPieceTableChange::type
virtual int type() const =0
KPieceTable::GroupPieceTableChange::appendChange
bool appendChange(AbstractPieceTableChange *change)
Definition: grouppiecetablechange.cpp:75
KPieceTable::GroupPieceTableChange
class
Definition: grouppiecetablechange.h:48
KPieceTable::GroupPieceTableChange::revertGroup
AddressRangeList revertGroup(PieceTable *pieceTable) const
Definition: grouppiecetablechange.cpp:131
Okteta::ArrayChangeMetrics
Definition: arraychangemetrics.h:38
piecetable.h
KPieceTable::GroupPieceTableChange::merge
virtual bool merge(const AbstractPieceTableChange *other)
returns true if successful, false otherwise. Default returns false.
Definition: grouppiecetablechange.cpp:44
KPieceTable::AbstractPieceTableChange::dataSize
virtual Size dataSize() const
returns the size of the added data. Default returns 0.
Definition: abstractpiecetablechange.cpp:39
KPieceTable::AbstractPieceTableChange::GroupId
Definition: abstractpiecetablechange.h:56
KPieceTable::AbstractPieceTableChange::revert
virtual AddressRange revert(PieceTable *pieceTable) const =0
Okteta::AddressRangeList
Definition: addressrangelist.h:38
KPieceTable::GroupPieceTableChange::mAppliedChangesCount
int mAppliedChangesCount
Definition: grouppiecetablechange.h:100
Okteta::AddressRangeList::addAddressRangeList
void addAddressRangeList(const AddressRangeList &addressRangeList)
Definition: addressrangelist.cpp:81
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal