From 553000673acf7297cfa4de620290ba73f3c438ac Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 4 Dec 2015 14:47:28 +0100 Subject: Reduced boilerplate for buffer mapping --- common/domain/event.cpp | 10 ++-------- common/domain/folder.cpp | 15 +++------------ common/domain/mail.cpp | 16 ++++++++-------- common/propertymapper.h | 11 +++++++++++ 4 files changed, 24 insertions(+), 28 deletions(-) (limited to 'common') diff --git a/common/domain/event.cpp b/common/domain/event.cpp index 42c13e2..3036d8e 100644 --- a/common/domain/event.cpp +++ b/common/domain/event.cpp @@ -78,13 +78,7 @@ QSharedPointer::Buffer> > TypeImple QSharedPointer::BufferBuilder> > TypeImplementation::initializeWritePropertyMapper() { auto propertyMapper = QSharedPointer >::create(); - propertyMapper->addMapping("summary", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = variantToProperty(value, fbb); - return [offset](BufferBuilder &builder) { builder.add_summary(offset); }; - }); - propertyMapper->addMapping("uid", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = variantToProperty(value, fbb); - return [offset](BufferBuilder &builder) { builder.add_uid(offset); }; - }); + propertyMapper->addMapping("summary", &BufferBuilder::add_summary); + propertyMapper->addMapping("uid", &BufferBuilder::add_uid); return propertyMapper; } diff --git a/common/domain/folder.cpp b/common/domain/folder.cpp index 5558060..80e9f8f 100644 --- a/common/domain/folder.cpp +++ b/common/domain/folder.cpp @@ -89,17 +89,8 @@ QSharedPointer::Buffer> > TypeImpl QSharedPointer::BufferBuilder> > TypeImplementation::initializeWritePropertyMapper() { auto propertyMapper = QSharedPointer >::create(); - propertyMapper->addMapping("parent", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = variantToProperty(value, fbb); - return [offset](BufferBuilder &builder) { builder.add_parent(offset); }; - }); - propertyMapper->addMapping("name", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = variantToProperty(value, fbb); - return [offset](BufferBuilder &builder) { builder.add_name(offset); }; - }); - propertyMapper->addMapping("icon", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = variantToProperty(value, fbb); - return [offset](BufferBuilder &builder) { builder.add_icon(offset); }; - }); + propertyMapper->addMapping("parent", &BufferBuilder::add_parent); + propertyMapper->addMapping("name", &BufferBuilder::add_name); + propertyMapper->addMapping("icon", &BufferBuilder::add_icon); return propertyMapper; } diff --git a/common/domain/mail.cpp b/common/domain/mail.cpp index 5373ac6..59b75ea 100644 --- a/common/domain/mail.cpp +++ b/common/domain/mail.cpp @@ -83,13 +83,13 @@ QSharedPointer::Buffer> > TypeImplem QSharedPointer::BufferBuilder> > TypeImplementation::initializeWritePropertyMapper() { auto propertyMapper = QSharedPointer >::create(); - // propertyMapper->addMapping("summary", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - // auto offset = variantToProperty(value, fbb); - // return [offset](BufferBuilder &builder) { builder.add_summary(offset); }; - // }); - propertyMapper->addMapping("uid", [](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - auto offset = variantToProperty(value, fbb); - return [offset](BufferBuilder &builder) { builder.add_uid(offset); }; - }); + propertyMapper->addMapping("uid", &BufferBuilder::add_uid); + propertyMapper->addMapping("sender", &BufferBuilder::add_sender); + propertyMapper->addMapping("senderName", &BufferBuilder::add_senderName); + propertyMapper->addMapping("subject", &BufferBuilder::add_subject); + propertyMapper->addMapping("date", &BufferBuilder::add_date); + // propertyMapper->addMapping("unread", &BufferBuilder::add_unread); + // propertyMapper->addMapping("important", &BufferBuilder::add_important); + propertyMapper->addMapping("folder", &BufferBuilder::add_folder); return propertyMapper; } diff --git a/common/propertymapper.h b/common/propertymapper.h index 87c7485..98ad397 100644 --- a/common/propertymapper.h +++ b/common/propertymapper.h @@ -98,6 +98,17 @@ public: void addMapping(const QByteArray &property, const std::function(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) { mWriteAccessors.insert(property, mapping); } + + template + void addMapping(const QByteArray &name, void (BufferBuilder::*f)(flatbuffers::Offset)) + { + addMapping(name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + auto offset = variantToProperty(value, fbb); + return [offset, f](BufferBuilder &builder) { + (builder.*f)(offset); + }; + }); + } private: QHash(const QVariant &, flatbuffers::FlatBufferBuilder &)> > mWriteAccessors; }; -- cgit v1.2.3