From 6b8432a5c0647d8fbe3cda549574ae13e07bb2f4 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 28 Apr 2017 11:48:06 +0200 Subject: Simplified propertymapper --- common/propertymapper.h | 109 ++++++------------------------------------------ 1 file changed, 13 insertions(+), 96 deletions(-) (limited to 'common/propertymapper.h') diff --git a/common/propertymapper.h b/common/propertymapper.h index 9ea0b73..bca45aa 100644 --- a/common/propertymapper.h +++ b/common/propertymapper.h @@ -65,13 +65,12 @@ QVariant SINK_EXPORT propertyToVariant(const flatbuffers::Vector class ReadPropertyMapper { public: virtual ~ReadPropertyMapper(){}; - virtual QVariant getProperty(const QByteArray &key, BufferType const *buffer) const + virtual QVariant getProperty(const QByteArray &key, void const *buffer) const { if (mReadAccessors.contains(key)) { auto accessor = mReadAccessors.value(key); @@ -79,69 +78,30 @@ public: } return QVariant(); } + bool hasMapping(const QByteArray &key) const { return mReadAccessors.contains(key); } + QList availableProperties() const { return mReadAccessors.keys(); } - void addMapping(const QByteArray &property, const std::function &mapping) - { - mReadAccessors.insert(property, mapping); - } - - template - void addMapping(const flatbuffers::String *(Buffer::*f)() const) - { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); - } - - template - void addMapping(uint8_t (Buffer::*f)() const) - { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); - } - - template - void addMapping(bool (Buffer::*f)() const) - { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); - } - - template - void addMapping(const flatbuffers::Vector *(Buffer::*f)() const) - { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); - } - template - void addMapping(const flatbuffers::Vector> *(Buffer::*f)() const) + void addMapping(const QByteArray &property, const std::function &mapping) { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); - } - - template - void addMapping(const Sink::ApplicationDomain::Buffer::MailContact *(Buffer::*f)() const) - { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); - } - - template - void addMapping(const flatbuffers::Vector> *(Buffer::*f)() const) - { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); + mReadAccessors.insert(property, mapping); } - template - void addMapping(const flatbuffers::Vector> *(Buffer::*f)() const) + template + void addMapping(FunctionReturnValue (Buffer::*f)() const) { - addMapping(T::name, [f](Buffer const *buffer) -> QVariant { return propertyToVariant((buffer->*f)()); }); + addMapping(T::name, [f](void const *buffer) -> QVariant { return propertyToVariant((static_cast(buffer)->*f)()); }); } private: - QHash> mReadAccessors; + QHash> mReadAccessors; }; template @@ -157,10 +117,12 @@ public: builderCalls << accessor(value, fbb); } } + bool hasMapping(const QByteArray &key) const { return mWriteAccessors.contains(key); } + void addMapping(const QByteArray &property, const std::function(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) { mWriteAccessors.insert(property, mapping); @@ -182,53 +144,8 @@ public: }); } - template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset)) - { - 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); }; - }); - } - - template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset>)) - { - 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); }; - }); - } - - template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset>>)) - { - 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); }; - }); - } - - template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset)) - { - 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); }; - }); - } - - template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset>>)) - { - 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); }; - }); - } - - template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset>>)) + template + void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset)) { addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { auto offset = variantToProperty(value, fbb); -- cgit v1.2.3 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/propertymapper.h | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'common/propertymapper.h') 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; }; -- cgit v1.2.3 From ca5020095abfb76e63bd801e9722c07193eb05f5 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 28 Apr 2017 15:29:18 +0200 Subject: A single propertymapper for both directions --- common/propertymapper.h | 64 +++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 34 deletions(-) (limited to 'common/propertymapper.h') diff --git a/common/propertymapper.h b/common/propertymapper.h index fa4592b..fd24278 100644 --- a/common/propertymapper.h +++ b/common/propertymapper.h @@ -65,10 +65,17 @@ QVariant SINK_EXPORT propertyToVariant(const flatbuffers::Vector + void addMapping(FunctionReturnValue (Buffer::*f)() const, void (BufferBuilder::*f2)(Arg)) + { + addReadMapping(f); + addWriteMapping(f2); + } virtual QVariant getProperty(const QByteArray &key, void const *buffer) const { @@ -79,6 +86,14 @@ public: return QVariant(); } + virtual void setProperty(const QByteArray &key, const QVariant &value, QList> &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const + { + if (mWriteAccessors.contains(key)) { + auto accessor = mWriteAccessors.value(key); + builderCalls << accessor(value, fbb); + } + } + bool hasMapping(const QByteArray &key) const { return mReadAccessors.contains(key); @@ -89,69 +104,50 @@ public: return mReadAccessors.keys(); } - void addMapping(const QByteArray &property, const std::function &mapping) +private: + void addReadMapping(const QByteArray &property, const std::function &mapping) { mReadAccessors.insert(property, mapping); } template - void addMapping(FunctionReturnValue (Buffer::*f)() const) + void addReadMapping(FunctionReturnValue (Buffer::*f)() const) { - addMapping(T::name, [f](void const *buffer) -> QVariant { return propertyToVariant((static_cast(buffer)->*f)()); }); + addReadMapping(T::name, [f](void const *buffer) -> QVariant { return propertyToVariant((static_cast(buffer)->*f)()); }); } -private: - QHash> mReadAccessors; -}; -class WritePropertyMapper -{ -public: - virtual ~WritePropertyMapper(){}; - - virtual void setProperty(const QByteArray &key, const QVariant &value, QList> &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const - { - if (mWriteAccessors.contains(key)) { - auto accessor = mWriteAccessors.value(key); - builderCalls << accessor(value, fbb); - } - } - - bool hasMapping(const QByteArray &key) const - { - return mWriteAccessors.contains(key); - } - - void addMapping(const QByteArray &property, const std::function(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) + void addWriteMapping(const QByteArray &property, const std::function(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) { mWriteAccessors.insert(property, mapping); } template - void addMapping(void (BufferBuilder::*f)(uint8_t)) + void addWriteMapping(void (BufferBuilder::*f)(uint8_t)) { - addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + addWriteMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { return [value, f](void *builder) { (static_cast(builder)->*f)(value.value()); }; }); } template - void addMapping(void (BufferBuilder::*f)(bool)) + void addWriteMapping(void (BufferBuilder::*f)(bool)) { - addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + addWriteMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { return [value, f](void *builder) { (static_cast(builder)->*f)(value.value()); }; }); } template - void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset)) + void addWriteMapping(void (BufferBuilder::*f)(flatbuffers::Offset)) { - addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { + addWriteMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function { auto offset = variantToProperty(value, fbb); return [offset, f](void *builder) { (static_cast(builder)->*f)(offset); }; }); } -private: + QHash> mReadAccessors; QHash(const QVariant &, flatbuffers::FlatBufferBuilder &)>> mWriteAccessors; }; + -- cgit v1.2.3