From 5e5b1e77252ae1417b339a01bba3ed1fe5705629 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 12 Apr 2015 16:35:37 +0200 Subject: Further simplify writing of buffer adaptors. Still not quite there but we're avoiding the bulk of duplication by now. --- common/domainadaptor.cpp | 25 ++++++++++++++----------- common/domainadaptor.h | 9 +++++++-- 2 files changed, 21 insertions(+), 13 deletions(-) (limited to 'common') diff --git a/common/domainadaptor.cpp b/common/domainadaptor.cpp index aa8c3d9..8a4b5ed 100644 --- a/common/domainadaptor.cpp +++ b/common/domainadaptor.cpp @@ -20,7 +20,7 @@ #include "domainadaptor.h" template <> -flatbuffers::uoffset_t extractProperty(const QVariant &property, flatbuffers::FlatBufferBuilder &fbb) +flatbuffers::uoffset_t variantToProperty(const QVariant &property, flatbuffers::FlatBufferBuilder &fbb) { if (property.isValid()) { return fbb.CreateString(property.toString().toStdString()).o; @@ -28,21 +28,24 @@ flatbuffers::uoffset_t extractProperty(const QVariant &property, flatbu return 0; } +template <> +QVariant propertyToVariant(const flatbuffers::String *property) +{ + if (property) { + return QString::fromStdString(property->c_str()); + } + return QVariant(); +} + template <> QSharedPointer > initializeReadPropertyMapper() { auto propertyMapper = QSharedPointer >::create(); propertyMapper->addMapping("summary", [](Akonadi2::ApplicationDomain::Buffer::Event const *buffer) -> QVariant { - if (buffer->summary()) { - return QString::fromStdString(buffer->summary()->c_str()); - } - return QVariant(); + return propertyToVariant(buffer->summary()); }); propertyMapper->addMapping("uid", [](Akonadi2::ApplicationDomain::Buffer::Event const *buffer) -> QVariant { - if (buffer->uid()) { - return QString::fromStdString(buffer->uid()->c_str()); - } - return QVariant(); + return propertyToVariant(buffer->uid()); }); return propertyMapper; } @@ -52,11 +55,11 @@ QSharedPointer >::create(); propertyMapper->addMapping("summary", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = extractProperty(value, fbb); + auto offset = variantToProperty(value, fbb); return [offset](Akonadi2::ApplicationDomain::Buffer::EventBuilder &builder) { builder.add_summary(offset); }; }); propertyMapper->addMapping("uid", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = extractProperty(value, fbb); + auto offset = variantToProperty(value, fbb); return [offset](Akonadi2::ApplicationDomain::Buffer::EventBuilder &builder) { builder.add_uid(offset); }; }); return propertyMapper; diff --git a/common/domainadaptor.h b/common/domainadaptor.h index e356692..d07a2bd 100644 --- a/common/domainadaptor.h +++ b/common/domainadaptor.h @@ -79,10 +79,15 @@ private: /** * Defines how to convert qt primitives to flatbuffer ones - * TODO: rename to createProperty or so? */ template -flatbuffers::uoffset_t extractProperty(const QVariant &, flatbuffers::FlatBufferBuilder &fbb); +flatbuffers::uoffset_t variantToProperty(const QVariant &, flatbuffers::FlatBufferBuilder &fbb); + +/** + * Defines how to convert flatbuffer primitives to qt ones + */ +template +QVariant propertyToVariant(const flatbuffers::String *); /** * Create a buffer from a domain object using the provided mappings -- cgit v1.2.3