From kde-commits Sun May 31 22:59:49 2015 From: =?utf-8?q?Dan_Vr=C3=A1til?= Date: Sun, 31 May 2015 22:59:49 +0000 To: kde-commits Subject: [akonadi/dev/binary-protocol] src/private: Use PIMPL for Akonadi::Scope too Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=143311320002474 Git commit 4f1f83d89c2caab1e421c9696b0d9daa94a790fe by Dan Vr=C3=A1til. 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 +#include + +#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=3D(const Scope &other) +{ + d =3D other.d; + return *this; +} + +Scope &Scope::operator=3D(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 =3D Uid; - mUidSet =3D uidSet; + d->scope =3D Uid; + d->uidSet =3D uidSet; } = ImapSet Scope::uidSet() const { - return mUidSet; + return d->uidSet; } = void Scope::setRidSet(const QStringList &ridSet) { - mScope =3D Rid; - mRidSet =3D ridSet; + d->scope =3D Rid; + d->ridSet =3D ridSet; } = QStringList Scope::ridSet() const { - return mRidSet; + return d->ridSet; } = void Scope::setRidChain(const QStringList &ridChain) { - mScope =3D HierarchicalRid; - mRidChain =3D ridChain; + d->scope =3D HierarchicalRid; + d->ridChain =3D ridChain; } = QStringList Scope::ridChain() const { - return mRidChain; + return d->ridChain; } = void Scope::setRidContext(qint64 context) { - mRidContext =3D context; + d->ridContext =3D context; } = qint64 Scope::ridContext() const { - return mRidContext; + return d->ridContext; } = void Scope::setGidSet(const QStringList &gidSet) { - mScope =3D Gid; - mGidSet =3D gidSet; + d->scope =3D Gid; + d->gidSet =3D gidSet; } = QStringList Scope::gidSet() const { - return mGidSet; + return d->gidSet; } = qint64 Scope::uid() const { - if (mUidSet.intervals().size() =3D=3D 1 && - mUidSet.intervals().at(0).size() =3D=3D 1) { - return mUidSet.intervals().at(0).begin(); + if (d->uidSet.intervals().size() =3D=3D 1 && + d->uidSet.intervals().at(0).size() =3D=3D 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() !=3D 1) { + if (d->ridSet.size() !=3D 1) { // TODO: Error handling! - Q_ASSERT(mRidSet.size() =3D=3D 1); + Q_ASSERT(d->ridSet.size() =3D=3D 1); return QString(); } - return mRidSet.at(0); + return d->ridSet.at(0); } = QString Scope::gid() const { - if (mGidSet.size() !=3D 1) { + if (d->gidSet.size() !=3D 1) { // TODO: Error hanlding! - Q_ASSERT(mGidSet.size() =3D=3D 1); + Q_ASSERT(d->gidSet.size() =3D=3D 1); return QString(); } - return mGidSet.at(0); + return d->gidSet.at(0); } = QDataStream &operator<<(QDataStream &stream, const Scope &scope) { - stream << static_cast(scope.mScope); - switch (scope.mScope) { + stream << static_cast(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 Sc= ope &scope) = QDataStream &operator>>(QDataStream &stream, Scope &scope) { - scope.mUidSet =3D ImapSet(); - scope.mRidSet.clear(); - scope.mRidChain.clear(); - scope.mGidSet.clear(); + scope.d->uidSet =3D ImapSet(); + scope.d->ridSet.clear(); + scope.d->ridChain.clear(); + scope.d->gidSet.clear(); = qint8 c; stream >> c; - scope.mScope =3D static_cast(c); - switch (scope.mScope) { + scope.d->scope =3D static_cast(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 -#include +#include = -#include "imapset_p.h" +class QDataStream; +class QString; +class QStringList; = namespace Akonadi { +class ImapSet; class Scope; } + AKONADIPRIVATE_EXPORT QDataStream &operator<<(QDataStream &stream, const A= konadi::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=3D(const Scope &other); + Scope &operator=3D(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 d; + friend class ScopePrivate; = friend QDataStream &::operator<<(QDataStream &stream, const Akonadi::S= cope &scope); friend QDataStream &::operator>>(QDataStream &stream, Akonadi::Scope &= scope);