• 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
arraychangemetrics.h
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 #ifndef OKTETA_ARRAYCHANGEMETRICS_H
24 #define OKTETA_ARRAYCHANGEMETRICS_H
25 
26 // lib
27 #include "oktetacore_export.h"
28 #include "size.h"
29 #include "address.h"
30 // Qt
31 #include <QtCore/QDataStream>
32 
33 
34 namespace Okteta
35 {
36 
37 // TODO: do we need the invalid status?
38 class OKTETACORE_EXPORT ArrayChangeMetrics
39 {
40  friend QDataStream& operator<<( QDataStream& outStream, const ArrayChangeMetrics& metrics );
41  friend QDataStream& operator>>( QDataStream& inStream, ArrayChangeMetrics& metrics );
42 
43  private:
44  static const Address InvalidAddress = -1;
45 
46  public:
47  enum Type { /*Insertion, Removal,*/ Replacement, Swapping/*, Filling, Setting*/, Invalid };
48 
49  public:
50  static ArrayChangeMetrics asReplacement( Address offset, Size removeLength, Size insertLength );
51  static ArrayChangeMetrics asSwapping( Address firstOffset, Address secondOffset, Size secondLength );
52 
53  public:
54  ArrayChangeMetrics();
55 
56  protected:
57  public:
58  ArrayChangeMetrics( Type type, Address offset, qint32 secondArgument, qint32 thirdArgument );
59 
60  public:
61  bool operator==( const ArrayChangeMetrics& other ) const;
62 
63  public:
64  void revert();
65 
66  public:
67  int type() const;
68  Address offset() const;
69  bool isValid() const;
70 
71  public: // Replacement properties
72  Size removeLength() const;
73  Size insertLength() const;
74  Size lengthChange() const;
75 
76  public: // Swapping properties
77  Size firstLength() const;
78  Address secondStart() const;
79  Address secondEnd() const;
80  Size secondLength() const;
81 
82  protected:
83  Type mType;
84  Address mOffset;
85  // TODO: how to make the arguments of the size of the largest union member?
86  union
87  {
88  qint32 mSecondArgument;
89  Size mRemoveLength;
90  Address mSecondStart;
91  };
92  union
93  {
94  qint32 mThirdArgument;
95  Size mInsertLength;
96  Size mSecondLength;
97  };
98 };
99 
100 inline ArrayChangeMetrics ArrayChangeMetrics::asReplacement( Address offset, Size removeLength, Size insertLength )
101 {
102  return ArrayChangeMetrics( Replacement, offset, removeLength, insertLength );
103 }
104 
105 inline ArrayChangeMetrics ArrayChangeMetrics::asSwapping( Address firstOffset, Address secondOffset, Size secondLength )
106 {
107  Q_ASSERT(firstOffset < secondOffset);
108  return ArrayChangeMetrics( Swapping, firstOffset, secondOffset, secondLength );
109 }
110 
111 
112 inline ArrayChangeMetrics::ArrayChangeMetrics( Type type, Address offset, qint32 secondArgument, qint32 thirdArgument )
113  : mType( type ), mOffset( offset ), mSecondArgument( secondArgument ), mThirdArgument( thirdArgument )
114 {}
115 inline ArrayChangeMetrics::ArrayChangeMetrics() : mType(Invalid) ,mOffset( InvalidAddress ), mSecondArgument( 0 ), mThirdArgument( 0 ) {}
116 inline bool ArrayChangeMetrics::operator==( const ArrayChangeMetrics& other ) const
117 {
118  return mType == other.mType
119  && mOffset == other.mOffset
120  && mSecondArgument == other.mSecondArgument
121  && mThirdArgument == other.mThirdArgument;
122 }
123 inline void ArrayChangeMetrics::revert()
124 {
125  if( mType == Replacement )
126  {
127  const Size helper = mInsertLength;
128  mInsertLength = mRemoveLength;
129  mRemoveLength = helper;
130  }
131  else if( mType == Swapping )
132  {
133  const Size oldSecondLength = mSecondLength;
134  mSecondLength = firstLength();
135  mSecondStart = mOffset + oldSecondLength;
136  }
137 }
138 
139 inline bool ArrayChangeMetrics::isValid() const { return mOffset != InvalidAddress; }
140 inline int ArrayChangeMetrics::type() const { return mType; }
141 inline Address ArrayChangeMetrics::offset() const { return mOffset; }
142 inline Size ArrayChangeMetrics::removeLength() const { return mRemoveLength; }
143 inline Size ArrayChangeMetrics::insertLength() const { return mInsertLength; }
144 inline Size ArrayChangeMetrics::lengthChange() const { return mInsertLength-mRemoveLength; }
145 inline Address ArrayChangeMetrics::secondStart() const { return mSecondStart; }
146 inline Address ArrayChangeMetrics::secondEnd() const { return mSecondStart+mSecondLength-1; }
147 inline Size ArrayChangeMetrics::firstLength() const { return mSecondStart-mOffset; }
148 inline Size ArrayChangeMetrics::secondLength() const { return mSecondLength; }
149 
150 
151 QDataStream& operator<<( QDataStream& outStream, const ArrayChangeMetrics& metrics );
152 QDataStream& operator>>( QDataStream& inStream, ArrayChangeMetrics& metrics );
153 
154 inline QDataStream& operator<<( QDataStream& outStream, const ArrayChangeMetrics& metrics )
155 {
156  outStream << metrics.mType << metrics.mOffset << metrics.mSecondArgument << metrics.mThirdArgument;
157  return outStream;
158 }
159 
160 inline QDataStream& operator>>( QDataStream& inStream, ArrayChangeMetrics& metrics )
161 {
162  int type;
163  inStream >> type >> metrics.mOffset >> metrics.mSecondArgument >> metrics.mThirdArgument;
164  metrics.mType = (ArrayChangeMetrics::Type)type; //TODO: find out how to stream to enum directly
165  return inStream;
166 }
167 
168 }
169 
170 #endif
Okteta::ArrayChangeMetrics::mRemoveLength
Size mRemoveLength
Definition: arraychangemetrics.h:89
Okteta::operator>>
QDataStream & operator>>(QDataStream &inStream, ArrayChangeMetrics &metrics)
Definition: arraychangemetrics.h:160
Okteta::ArrayChangeMetrics::revert
void revert()
Definition: arraychangemetrics.h:123
Okteta::Address
qint32 Address
Definition: address.h:34
Okteta::ArrayChangeMetrics::type
int type() const
Definition: arraychangemetrics.h:140
Okteta::ArrayChangeMetrics::Replacement
Definition: arraychangemetrics.h:47
KPieceTable::ArrayChangeMetrics
Okteta::ArrayChangeMetrics ArrayChangeMetrics
Definition: abstractpiecetablechange.h:37
Okteta::ArrayChangeMetrics::mSecondLength
Size mSecondLength
Definition: arraychangemetrics.h:96
Okteta::ArrayChangeMetrics::offset
Address offset() const
Definition: arraychangemetrics.h:141
Okteta::ArrayChangeMetrics::Swapping
Definition: arraychangemetrics.h:47
Okteta::ArrayChangeMetrics::mInsertLength
Size mInsertLength
Definition: arraychangemetrics.h:95
Okteta::ArrayChangeMetrics::operator==
bool operator==(const ArrayChangeMetrics &other) const
Definition: arraychangemetrics.h:116
OKTETACORE_EXPORT
#define OKTETACORE_EXPORT
Definition: oktetacore_export.h:36
Okteta::ArrayChangeMetrics::mOffset
Address mOffset
Definition: arraychangemetrics.h:84
Okteta::ArrayChangeMetrics::isValid
bool isValid() const
Definition: arraychangemetrics.h:139
Okteta::ArrayChangeMetrics::secondEnd
Address secondEnd() const
Definition: arraychangemetrics.h:146
address.h
Okteta::ArrayChangeMetrics::mType
Type mType
Definition: arraychangemetrics.h:83
size.h
Okteta::ArrayChangeMetrics::mSecondStart
Address mSecondStart
Definition: arraychangemetrics.h:90
Okteta::ArrayChangeMetrics::secondStart
Address secondStart() const
Definition: arraychangemetrics.h:145
Okteta::ArrayChangeMetrics::ArrayChangeMetrics
ArrayChangeMetrics()
Definition: arraychangemetrics.h:115
Okteta::ArrayChangeMetrics::asReplacement
static ArrayChangeMetrics asReplacement(Address offset, Size removeLength, Size insertLength)
Definition: arraychangemetrics.h:100
Okteta::ArrayChangeMetrics::asSwapping
static ArrayChangeMetrics asSwapping(Address firstOffset, Address secondOffset, Size secondLength)
Definition: arraychangemetrics.h:105
Okteta::ArrayChangeMetrics::removeLength
Size removeLength() const
Definition: arraychangemetrics.h:142
Okteta::ArrayChangeMetrics::secondLength
Size secondLength() const
Definition: arraychangemetrics.h:148
Okteta::ArrayChangeMetrics::Type
Type
Definition: arraychangemetrics.h:47
Okteta::ArrayChangeMetrics
Definition: arraychangemetrics.h:38
Okteta::ArrayChangeMetrics::insertLength
Size insertLength() const
Definition: arraychangemetrics.h:143
Okteta::Size
qint32 Size
Definition: size.h:33
Okteta::ArrayChangeMetrics::lengthChange
Size lengthChange() const
Definition: arraychangemetrics.h:144
oktetacore_export.h
Okteta::ArrayChangeMetrics::firstLength
Size firstLength() const
Definition: arraychangemetrics.h:147
Okteta::ArrayChangeMetrics::mSecondArgument
qint32 mSecondArgument
Definition: arraychangemetrics.h:88
Okteta::operator<<
QDataStream & operator<<(QDataStream &outStream, const ArrayChangeMetrics &metrics)
Definition: arraychangemetrics.h:154
Okteta::ArrayChangeMetrics::mThirdArgument
qint32 mThirdArgument
Definition: arraychangemetrics.h:94
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:06 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