From a4ce2b2eda8a2fea4263017e6868c327f22f5e47 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 28 Apr 2017 12:19:52 +0200 Subject: Removed the template argument from the write property mapper --- common/domain/typeimplementations.cpp | 80 +++++++++++++++++------------------ common/domain/typeimplementations.h | 11 +++-- common/domainadaptor.h | 16 +++---- common/propertymapper.h | 25 ++++++----- tests/domainadaptortest.cpp | 8 ++-- 5 files changed, 69 insertions(+), 71 deletions(-) diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index 5db35b7..598e5a7 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -81,24 +81,24 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::parentMessageId); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&BufferBuilder::add_sender); - propertyMapper.addMapping(&BufferBuilder::add_to); - propertyMapper.addMapping(&BufferBuilder::add_cc); - propertyMapper.addMapping(&BufferBuilder::add_bcc); - propertyMapper.addMapping(&BufferBuilder::add_subject); - propertyMapper.addMapping(&BufferBuilder::add_date); - propertyMapper.addMapping(&BufferBuilder::add_unread); - propertyMapper.addMapping(&BufferBuilder::add_important); - propertyMapper.addMapping(&BufferBuilder::add_folder); - propertyMapper.addMapping(&BufferBuilder::add_mimeMessage); - propertyMapper.addMapping(&BufferBuilder::add_fullPayloadAvailable); - propertyMapper.addMapping(&BufferBuilder::add_draft); - propertyMapper.addMapping(&BufferBuilder::add_trash); - propertyMapper.addMapping(&BufferBuilder::add_sent); - propertyMapper.addMapping(&BufferBuilder::add_messageId); - propertyMapper.addMapping(&BufferBuilder::add_parentMessageId); +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +{ + propertyMapper.addMapping(&BufferBuilder::add_sender); + propertyMapper.addMapping(&BufferBuilder::add_to); + propertyMapper.addMapping(&BufferBuilder::add_cc); + propertyMapper.addMapping(&BufferBuilder::add_bcc); + propertyMapper.addMapping(&BufferBuilder::add_subject); + propertyMapper.addMapping(&BufferBuilder::add_date); + propertyMapper.addMapping(&BufferBuilder::add_unread); + propertyMapper.addMapping(&BufferBuilder::add_important); + propertyMapper.addMapping(&BufferBuilder::add_folder); + propertyMapper.addMapping(&BufferBuilder::add_mimeMessage); + propertyMapper.addMapping(&BufferBuilder::add_fullPayloadAvailable); + propertyMapper.addMapping(&BufferBuilder::add_draft); + propertyMapper.addMapping(&BufferBuilder::add_trash); + propertyMapper.addMapping(&BufferBuilder::add_sent); + propertyMapper.addMapping(&BufferBuilder::add_messageId); + propertyMapper.addMapping(&BufferBuilder::add_parentMessageId); } @@ -117,13 +117,13 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::enabled); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_parent); - propertyMapper.addMapping(&BufferBuilder::add_name); - propertyMapper.addMapping(&BufferBuilder::add_icon); - propertyMapper.addMapping(&BufferBuilder::add_specialpurpose); - propertyMapper.addMapping(&BufferBuilder::add_enabled); + propertyMapper.addMapping(&BufferBuilder::add_parent); + propertyMapper.addMapping(&BufferBuilder::add_name); + propertyMapper.addMapping(&BufferBuilder::add_icon); + propertyMapper.addMapping(&BufferBuilder::add_specialpurpose); + propertyMapper.addMapping(&BufferBuilder::add_enabled); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -148,15 +148,15 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::lastname); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_uid); - propertyMapper.addMapping(&BufferBuilder::add_fn); - propertyMapper.addMapping(&BufferBuilder::add_emails); - propertyMapper.addMapping(&BufferBuilder::add_vcard); - propertyMapper.addMapping(&BufferBuilder::add_addressbook); - propertyMapper.addMapping(&BufferBuilder::add_firstname); - propertyMapper.addMapping(&BufferBuilder::add_lastname); + propertyMapper.addMapping(&BufferBuilder::add_uid); + propertyMapper.addMapping(&BufferBuilder::add_fn); + propertyMapper.addMapping(&BufferBuilder::add_emails); + propertyMapper.addMapping(&BufferBuilder::add_vcard); + propertyMapper.addMapping(&BufferBuilder::add_addressbook); + propertyMapper.addMapping(&BufferBuilder::add_firstname); + propertyMapper.addMapping(&BufferBuilder::add_lastname); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -177,10 +177,10 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapp propertyMapper.addMapping(&Buffer::name); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_parent); - propertyMapper.addMapping(&BufferBuilder::add_name); + propertyMapper.addMapping(&BufferBuilder::add_parent); + propertyMapper.addMapping(&BufferBuilder::add_name); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -202,12 +202,12 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::attachment); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_summary); - propertyMapper.addMapping(&BufferBuilder::add_description); - propertyMapper.addMapping(&BufferBuilder::add_uid); - propertyMapper.addMapping(&BufferBuilder::add_attachment); + propertyMapper.addMapping(&BufferBuilder::add_summary); + propertyMapper.addMapping(&BufferBuilder::add_description); + propertyMapper.addMapping(&BufferBuilder::add_uid); + propertyMapper.addMapping(&BufferBuilder::add_attachment); } void TypeImplementation::configure(IndexPropertyMapper &) diff --git a/common/domain/typeimplementations.h b/common/domain/typeimplementations.h index 705b059..8acea58 100644 --- a/common/domain/typeimplementations.h +++ b/common/domain/typeimplementations.h @@ -27,7 +27,6 @@ #include "addressbook_generated.h" class ReadPropertyMapper; -template class WritePropertyMapper; class IndexPropertyMapper; @@ -48,7 +47,7 @@ public: typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder; static void configure(TypeIndex &index); static void configure(ReadPropertyMapper &propertyMapper); - static void configure(WritePropertyMapper &propertyMapper); + static void configure(WritePropertyMapper &propertyMapper); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -59,7 +58,7 @@ public: typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -70,7 +69,7 @@ public: typedef Sink::ApplicationDomain::Buffer::ContactBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -81,7 +80,7 @@ public: typedef Sink::ApplicationDomain::Buffer::AddressbookBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -92,7 +91,7 @@ public: typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; diff --git a/common/domainadaptor.h b/common/domainadaptor.h index 9182001..2a7924a 100644 --- a/common/domainadaptor.h +++ b/common/domainadaptor.h @@ -40,10 +40,10 @@ */ template flatbuffers::Offset -createBufferPart(const Sink::ApplicationDomain::ApplicationDomainType &domainObject, flatbuffers::FlatBufferBuilder &fbb, const WritePropertyMapper &mapper) +createBufferPart(const Sink::ApplicationDomain::ApplicationDomainType &domainObject, flatbuffers::FlatBufferBuilder &fbb, const WritePropertyMapper &mapper) { // First create a primitives such as strings using the mappings - QList> propertiesToAddToResource; + QList> propertiesToAddToResource; for (const auto &property : domainObject.changedProperties()) { // SinkTrace() << "copying property " << property; const auto value = domainObject.getProperty(property); @@ -57,7 +57,7 @@ createBufferPart(const Sink::ApplicationDomain::ApplicationDomainType &domainObj // Then create all porperties using the above generated builderCalls Builder builder(fbb); for (auto propertyBuilder : propertiesToAddToResource) { - propertyBuilder(builder); + propertyBuilder(&builder); } return builder.Finish(); } @@ -68,7 +68,7 @@ createBufferPart(const Sink::ApplicationDomain::ApplicationDomainType &domainObj * After this the buffer can be extracted from the FlatBufferBuilder object. */ template -static void createBufferPartBuffer(const Sink::ApplicationDomain::ApplicationDomainType &domainObject, flatbuffers::FlatBufferBuilder &fbb, WritePropertyMapper &mapper) +static void createBufferPartBuffer(const Sink::ApplicationDomain::ApplicationDomainType &domainObject, flatbuffers::FlatBufferBuilder &fbb, WritePropertyMapper &mapper) { auto pos = createBufferPart(domainObject, fbb, mapper); // Because we cannot template the following call @@ -178,8 +178,8 @@ public: DomainTypeAdaptorFactory() : mLocalMapper(QSharedPointer::create()), mResourceMapper(QSharedPointer::create()), - mLocalWriteMapper(QSharedPointer>::create()), - mResourceWriteMapper(QSharedPointer>::create()), + mLocalWriteMapper(QSharedPointer::create()), + mResourceWriteMapper(QSharedPointer::create()), mIndexMapper(QSharedPointer::create()) { Sink::ApplicationDomain::TypeImplementation::configure(*mLocalMapper); @@ -238,8 +238,8 @@ public: protected: QSharedPointer mLocalMapper; QSharedPointer mResourceMapper; - QSharedPointer> mLocalWriteMapper; - QSharedPointer> mResourceWriteMapper; + QSharedPointer mLocalWriteMapper; + QSharedPointer mResourceWriteMapper; QSharedPointer mIndexMapper; }; diff --git a/common/propertymapper.h b/common/propertymapper.h index bca45aa..fa4592b 100644 --- a/common/propertymapper.h +++ b/common/propertymapper.h @@ -104,13 +104,12 @@ private: QHash> mReadAccessors; }; -template class WritePropertyMapper { public: virtual ~WritePropertyMapper(){}; - virtual void setProperty(const QByteArray &key, const QVariant &value, QList> &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const + virtual void setProperty(const QByteArray &key, const QVariant &value, QList> &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const { if (mWriteAccessors.contains(key)) { auto accessor = mWriteAccessors.value(key); @@ -123,36 +122,36 @@ public: return mWriteAccessors.contains(key); } - void addMapping(const QByteArray &property, const std::function(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) + void addMapping(const QByteArray &property, const std::function(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) { mWriteAccessors.insert(property, mapping); } - template + template void addMapping(void (BufferBuilder::*f)(uint8_t)) { - addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - return [value, f](BufferBuilder &builder) { (builder.*f)(value.value()); }; + addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + return [value, f](void *builder) { (static_cast(builder)->*f)(value.value()); }; }); } - template + template void addMapping(void (BufferBuilder::*f)(bool)) { - addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { - return [value, f](BufferBuilder &builder) { (builder.*f)(value.value()); }; + addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + return [value, f](void *builder) { (static_cast(builder)->*f)(value.value()); }; }); } - template + template void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset)) { - addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { auto offset = variantToProperty(value, fbb); - return [offset, f](BufferBuilder &builder) { (builder.*f)(offset); }; + return [offset, f](void *builder) { (static_cast(builder)->*f)(offset); }; }); } private: - QHash(const QVariant &, flatbuffers::FlatBufferBuilder &)>> mWriteAccessors; + QHash(const QVariant &, flatbuffers::FlatBufferBuilder &)>> mWriteAccessors; }; diff --git a/tests/domainadaptortest.cpp b/tests/domainadaptortest.cpp index a17152e..c5f6e3b 100644 --- a/tests/domainadaptortest.cpp +++ b/tests/domainadaptortest.cpp @@ -19,7 +19,7 @@ class TestFactory : public DomainTypeAdaptorFactory>::create(); + mResourceWriteMapper = QSharedPointer::create(); Sink::ApplicationDomain::TypeImplementation::configure(*mResourceWriteMapper); } }; @@ -29,7 +29,7 @@ class TestMailFactory : public DomainTypeAdaptorFactory>::create(); + mResourceWriteMapper = QSharedPointer::create(); Sink::ApplicationDomain::TypeImplementation::configure(*mResourceWriteMapper); } }; @@ -51,7 +51,7 @@ private slots: void testCreateBufferPart() { - auto writeMapper = QSharedPointer>::create(); + auto writeMapper = QSharedPointer::create(); Sink::ApplicationDomain::TypeImplementation::configure(*writeMapper); Sink::ApplicationDomain::Event event; @@ -104,7 +104,7 @@ private slots: void testMail() { - auto writeMapper = QSharedPointer>::create(); + auto writeMapper = QSharedPointer::create(); Sink::ApplicationDomain::TypeImplementation::configure(*writeMapper); Sink::ApplicationDomain::Mail mail; -- cgit v1.2.3