diff --git a/src/event.h b/src/event.h --- a/src/event.h +++ b/src/event.h @@ -261,8 +261,8 @@ Event &operator=(const Event &other); // For polymorfic serialization - void serialize(QDataStream &out); - void deserialize(QDataStream &in); + void serialize(QDataStream &out) const override; + void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; diff --git a/src/event.cpp b/src/event.cpp --- a/src/event.cpp +++ b/src/event.cpp @@ -311,16 +311,8 @@ void Event::virtual_hook(VirtualHook id, void *data) { - switch (id) { - case IncidenceBase::SerializerHook: - serialize(*reinterpret_cast(data)); - break; - case IncidenceBase::DeserializerHook: - deserialize(*reinterpret_cast(data)); - break; - default: - Q_ASSERT(false); - } + Q_UNUSED(id); + Q_UNUSED(data); } QLatin1String KCalCore::Event::mimeType() const @@ -338,7 +330,7 @@ return QLatin1String("view-calendar-day"); } -void Event::serialize(QDataStream &out) +void Event::serialize(QDataStream &out) const { Incidence::serialize(out); serializeQDateTimeAsKDateTime(out, d->mDtEnd); diff --git a/src/incidence.h b/src/incidence.h --- a/src/incidence.h +++ b/src/incidence.h @@ -839,8 +839,8 @@ */ IncidenceBase &assign(const IncidenceBase &other) override; - void serialize(QDataStream &out); - void deserialize(QDataStream &in); + void serialize(QDataStream &out) const override; + void deserialize(QDataStream &in) override; private: /** diff --git a/src/incidence.cpp b/src/incidence.cpp --- a/src/incidence.cpp +++ b/src/incidence.cpp @@ -1083,7 +1083,7 @@ << KCalCore::Journal::journalMimeType(); } -void Incidence::serialize(QDataStream &out) +void Incidence::serialize(QDataStream &out) const { serializeQDateTimeAsKDateTime(out, d->mCreated); out << d->mRevision << d->mDescription << d->mDescriptionIsRich << d->mSummary diff --git a/src/incidencebase.h b/src/incidencebase.h --- a/src/incidencebase.h +++ b/src/incidencebase.h @@ -727,10 +727,16 @@ */ virtual IncidenceBase &assign(const IncidenceBase &other); - enum VirtualHook { - SerializerHook, - DeserializerHook - }; + /** + * Sub-type specific serialization. + */ + virtual void serialize(QDataStream &out) const; + /** + * Sub-type specific deserialization. + */ + virtual void deserialize(QDataStream &in); + + enum VirtualHook {}; /** Standard trick to add virtuals later. @@ -761,19 +767,13 @@ /** * Incidence serializer. - * Uses the virtual_hook internally to avoid slicing. - * - * // TODO_KDE5: Provide a virtual serialize() method, as done with assign() and equals(). * * @since 4.12 */ KCALCORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalCore::IncidenceBase::Ptr &); /** * Incidence deserializer. - * Uses the virtual_hook internally to avoid slicing. - * - * // TODO_KDE5: Provide a virtual serialize() method, as done with assign() and equals(). * * @since 4.12 */ diff --git a/src/incidencebase.cpp b/src/incidencebase.cpp --- a/src/incidencebase.cpp +++ b/src/incidencebase.cpp @@ -650,6 +650,16 @@ d->mDirtyFields = dirtyFields; } +void IncidenceBase::serialize(QDataStream &out) const +{ + Q_UNUSED(out); +} + +void IncidenceBase::deserialize(QDataStream &in) +{ + Q_UNUSED(in); +} + /** static */ quint32 IncidenceBase::magicSerializationIdentifier() { @@ -677,8 +687,8 @@ out << attendee; } - // Serialize the sub-class data. In KDE5 we can add new virtuals. - i->virtual_hook(KCalCore::IncidenceBase::SerializerHook, &out); + // Serialize the sub-class data. + i->serialize(out); return out; } @@ -723,8 +733,8 @@ i->d->mAttendees.append(attendee); } - // Deserialize the sub-class data. In KDE5 we can add new virtuals. - i->virtual_hook(KCalCore::IncidenceBase::DeserializerHook, &in); + // Deserialize the sub-class data. + i->deserialize(in); return in; } diff --git a/src/journal.h b/src/journal.h --- a/src/journal.h +++ b/src/journal.h @@ -157,8 +157,8 @@ Journal &operator=(const Journal &other); // For polymorfic serialization - void serialize(QDataStream &out); - void deserialize(QDataStream &in); + void serialize(QDataStream &out) const override; + void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; diff --git a/src/journal.cpp b/src/journal.cpp --- a/src/journal.cpp +++ b/src/journal.cpp @@ -103,16 +103,8 @@ void Journal::virtual_hook(VirtualHook id, void *data) { - switch (id) { - case IncidenceBase::SerializerHook: - serialize(*reinterpret_cast(data)); - break; - case IncidenceBase::DeserializerHook: - deserialize(*reinterpret_cast(data)); - break; - default: - Q_ASSERT(false); - } + Q_UNUSED(id); + Q_UNUSED(data); } QLatin1String Journal::mimeType() const @@ -131,7 +123,7 @@ return QLatin1String("view-pim-journal"); } -void Journal::serialize(QDataStream &out) +void Journal::serialize(QDataStream &out) const { Incidence::serialize(out); } diff --git a/src/todo.h b/src/todo.h --- a/src/todo.h +++ b/src/todo.h @@ -347,8 +347,8 @@ Todo &operator=(const Todo &other); // For polymorfic serialization - void serialize(QDataStream &out); - void deserialize(QDataStream &in); + void serialize(QDataStream &out) const override; + void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; diff --git a/src/todo.cpp b/src/todo.cpp --- a/src/todo.cpp +++ b/src/todo.cpp @@ -526,16 +526,8 @@ void Todo::virtual_hook(VirtualHook id, void *data) { - switch (id) { - case IncidenceBase::SerializerHook: - serialize(*reinterpret_cast(data)); - break; - case IncidenceBase::DeserializerHook: - deserialize(*reinterpret_cast(data)); - break; - default: - Q_ASSERT(false); - } + Q_UNUSED(id); + Q_UNUSED(data); } QLatin1String Todo::mimeType() const @@ -561,7 +553,7 @@ } } -void Todo::serialize(QDataStream &out) +void Todo::serialize(QDataStream &out) const { Incidence::serialize(out); serializeQDateTimeAsKDateTime(out, d->mDtDue);