[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [akonadi/dev/binary-protocol] src/private: Use PIMPL for Akonadi::Scope too
From: Dan_Vrátil <dvratil () redhat ! com>
Date: 2015-05-31 22:59:49
Message-ID: E1YzCCr-0002ss-8j () scm ! kde ! org
[Download RAW message or body]
Git commit 4f1f83d89c2caab1e421c9696b0d9daa94a790fe by Dan Vrátil.
Committed on 31/05/2015 at 22:04.
Pushed by dvratil into branch 'dev/binary-protocol'.
Use PIMPL for Akonadi::Scope too
M +98 -49 src/private/scope.cpp
M +16 -11 src/private/scope_p.h
http://commits.kde.org/akonadi/4f1f83d89c2caab1e421c9696b0d9daa94a790fe
diff --git a/src/private/scope.cpp b/src/private/scope.cpp
index 47fbf31..b871c89 100644
--- a/src/private/scope.cpp
+++ b/src/private/scope.cpp
@@ -21,33 +21,82 @@
#include "scope_p.h"
#include <QtCore/QDataStream>
+#include <QtCore/QStringList>
+
+#include "imapset_p.h"
using namespace Akonadi;
+namespace Akonadi
+{
+
+class ScopePrivate : public QSharedData
+{
+public:
+ ScopePrivate()
+ : ridContext(-1)
+ , scope(Scope::Invalid)
+ {}
+
+ ImapSet uidSet;
+ QStringList ridSet;
+ QStringList ridChain;
+ QStringList gidSet;
+ qint64 ridContext;
+ Scope::SelectionScope scope;
+};
+
+}
+
Scope::Scope()
- : mRidContext(-1)
- , mScope(Invalid)
+ : d(new ScopePrivate)
+{
+}
+
+Scope::Scope(const Scope &other)
+ : d(other.d)
+{
+}
+
+Scope::Scope(Scope &&other)
+{
+ d.swap(other.d);
+}
+
+Scope::~Scope()
+{
+}
+
+Scope &Scope::operator=(const Scope &other)
+{
+ d = other.d;
+ return *this;
+}
+
+Scope &Scope::operator=(Scope &&other)
{
+ d.swap(other.d);
+ return *this;
}
Scope::SelectionScope Scope::scope() const
{
- return mScope;
+ return d->scope;
}
bool Scope::isEmpty() const
{
- switch (mScope) {
+ switch (d->scope) {
case Invalid:
return true;
case Uid:
- return mUidSet.isEmpty();
+ return d->uidSet.isEmpty();
case Rid:
- return mRidSet.isEmpty();
+ return d->ridSet.isEmpty();
case HierarchicalRid:
- return mRidChain.isEmpty();
+ return d->ridChain.isEmpty();
case Gid:
- return mGidSet.isEmpty();
+ return d->gidSet.isEmpty();
}
Q_ASSERT(false);
@@ -57,63 +106,63 @@ bool Scope::isEmpty() const
void Scope::setUidSet(const ImapSet &uidSet)
{
- mScope = Uid;
- mUidSet = uidSet;
+ d->scope = Uid;
+ d->uidSet = uidSet;
}
ImapSet Scope::uidSet() const
{
- return mUidSet;
+ return d->uidSet;
}
void Scope::setRidSet(const QStringList &ridSet)
{
- mScope = Rid;
- mRidSet = ridSet;
+ d->scope = Rid;
+ d->ridSet = ridSet;
}
QStringList Scope::ridSet() const
{
- return mRidSet;
+ return d->ridSet;
}
void Scope::setRidChain(const QStringList &ridChain)
{
- mScope = HierarchicalRid;
- mRidChain = ridChain;
+ d->scope = HierarchicalRid;
+ d->ridChain = ridChain;
}
QStringList Scope::ridChain() const
{
- return mRidChain;
+ return d->ridChain;
}
void Scope::setRidContext(qint64 context)
{
- mRidContext = context;
+ d->ridContext = context;
}
qint64 Scope::ridContext() const
{
- return mRidContext;
+ return d->ridContext;
}
void Scope::setGidSet(const QStringList &gidSet)
{
- mScope = Gid;
- mGidSet = gidSet;
+ d->scope = Gid;
+ d->gidSet = gidSet;
}
QStringList Scope::gidSet() const
{
- return mGidSet;
+ return d->gidSet;
}
qint64 Scope::uid() const
{
- if (mUidSet.intervals().size() == 1 &&
- mUidSet.intervals().at(0).size() == 1) {
- return mUidSet.intervals().at(0).begin();
+ if (d->uidSet.intervals().size() == 1 &&
+ d->uidSet.intervals().at(0).size() == 1) {
+ return d->uidSet.intervals().at(0).begin();
}
// TODO: Error handling!
@@ -122,42 +171,42 @@ qint64 Scope::uid() const
QString Scope::rid() const
{
- if (mRidSet.size() != 1) {
+ if (d->ridSet.size() != 1) {
// TODO: Error handling!
- Q_ASSERT(mRidSet.size() == 1);
+ Q_ASSERT(d->ridSet.size() == 1);
return QString();
}
- return mRidSet.at(0);
+ return d->ridSet.at(0);
}
QString Scope::gid() const
{
- if (mGidSet.size() != 1) {
+ if (d->gidSet.size() != 1) {
// TODO: Error hanlding!
- Q_ASSERT(mGidSet.size() == 1);
+ Q_ASSERT(d->gidSet.size() == 1);
return QString();
}
- return mGidSet.at(0);
+ return d->gidSet.at(0);
}
QDataStream &operator<<(QDataStream &stream, const Scope &scope)
{
- stream << static_cast<qint8>(scope.mScope);
- switch (scope.mScope) {
+ stream << static_cast<qint8>(scope.d->scope);
+ switch (scope.d->scope) {
case Scope::Invalid:
return stream;
case Scope::Uid:
- stream << scope.mUidSet;
+ stream << scope.d->uidSet;
return stream;
case Scope::Rid:
- stream << scope.mRidSet;
- stream << scope.mRidContext;
+ stream << scope.d->ridSet;
+ stream << scope.d->ridContext;
return stream;
case Scope::HierarchicalRid:
- stream << scope.mRidChain;
+ stream << scope.d->ridChain;
return stream;
case Scope::Gid:
- stream << scope.mGidSet;
+ stream << scope.d->gidSet;
return stream;
}
@@ -167,29 +216,29 @@ QDataStream &operator<<(QDataStream &stream, const Scope &scope)
QDataStream &operator>>(QDataStream &stream, Scope &scope)
{
- scope.mUidSet = ImapSet();
- scope.mRidSet.clear();
- scope.mRidChain.clear();
- scope.mGidSet.clear();
+ scope.d->uidSet = ImapSet();
+ scope.d->ridSet.clear();
+ scope.d->ridChain.clear();
+ scope.d->gidSet.clear();
qint8 c;
stream >> c;
- scope.mScope = static_cast<Scope::SelectionScope>(c);
- switch (scope.mScope) {
+ scope.d->scope = static_cast<Scope::SelectionScope>(c);
+ switch (scope.d->scope) {
case Scope::Invalid:
return stream;
case Scope::Uid:
- stream >> scope.mUidSet;
+ stream >> scope.d->uidSet;
return stream;
case Scope::Rid:
- stream >> scope.mRidSet;
- stream >> scope.mRidContext;
+ stream >> scope.d->ridSet;
+ stream >> scope.d->ridContext;
return stream;
case Scope::HierarchicalRid:
- stream >> scope.mRidChain;
+ stream >> scope.d->ridChain;
return stream;
case Scope::Gid:
- stream >> scope.mGidSet;
+ stream >> scope.d->gidSet;
return stream;
}
diff --git a/src/private/scope_p.h b/src/private/scope_p.h
index 50672a8..65e7f5c 100644
--- a/src/private/scope_p.h
+++ b/src/private/scope_p.h
@@ -23,17 +23,18 @@
#include "akonadiprivate_export.h"
-class QDataStream;
-
-#include <QStringList>
-#include <QVector>
+#include <QtCore/QSharedDataPointer>
-#include "imapset_p.h"
+class QDataStream;
+class QString;
+class QStringList;
namespace Akonadi
{
+class ImapSet;
class Scope;
}
+
AKONADIPRIVATE_EXPORT QDataStream &operator<<(QDataStream &stream, const Akonadi::Scope &scope);
AKONADIPRIVATE_EXPORT QDataStream &operator>>(QDataStream &stream, Akonadi::Scope &scope);
@@ -41,6 +42,7 @@ AKONADIPRIVATE_EXPORT QDataStream &operator>>(QDataStream &stream, Akonadi::Scop
namespace Akonadi
{
+class ScopePrivate;
class AKONADIPRIVATE_EXPORT Scope
{
public:
@@ -53,6 +55,12 @@ public:
};
Scope();
+ Scope(const Scope &other);
+ Scope(Scope &&other);
+ ~Scope();
+
+ Scope &operator=(const Scope &other);
+ Scope &operator=(Scope &&other);
SelectionScope scope() const;
@@ -76,13 +84,10 @@ public:
qint64 uid() const;
QString rid() const;
QString gid() const;
+
private:
- ImapSet mUidSet;
- QStringList mRidSet;
- QStringList mRidChain;
- QStringList mGidSet;
- qint64 mRidContext;
- SelectionScope mScope;
+ QSharedDataPointer<ScopePrivate> d;
+ friend class ScopePrivate;
friend QDataStream &::operator<<(QDataStream &stream, const Akonadi::Scope &scope);
friend QDataStream &::operator>>(QDataStream &stream, Akonadi::Scope &scope);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic