From 042d8fb10552d0bcc92647338d9d763357f35880 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 21 Dec 2015 14:43:23 +0100 Subject: Support the attachment property --- common/domain/event.cpp | 2 ++ common/propertymapper.cpp | 10 ++++++++++ common/propertymapper.h | 22 ++++++++++++++++++++++ 3 files changed, 34 insertions(+) (limited to 'common') diff --git a/common/domain/event.cpp b/common/domain/event.cpp index d989efe..a348e65 100644 --- a/common/domain/event.cpp +++ b/common/domain/event.cpp @@ -65,6 +65,7 @@ QSharedPointer::Buffer> > TypeImple auto propertyMapper = QSharedPointer >::create(); propertyMapper->addMapping("summary", &Buffer::summary); propertyMapper->addMapping("uid", &Buffer::uid); + propertyMapper->addMapping("attachment", &Buffer::attachment); return propertyMapper; } @@ -73,5 +74,6 @@ QSharedPointer::BufferBuilder> > T auto propertyMapper = QSharedPointer >::create(); propertyMapper->addMapping("summary", &BufferBuilder::add_summary); propertyMapper->addMapping("uid", &BufferBuilder::add_uid); + propertyMapper->addMapping("attachment", &BufferBuilder::add_attachment); return propertyMapper; } diff --git a/common/propertymapper.cpp b/common/propertymapper.cpp index 17a73cb..5348b11 100644 --- a/common/propertymapper.cpp +++ b/common/propertymapper.cpp @@ -67,6 +67,16 @@ QVariant propertyToVariant(const flatbuffers::String *property) return QVariant(); } +template <> +QVariant propertyToVariant(const flatbuffers::Vector *property) +{ + if (property) { + //We have to copy the memory, otherwise it would become eventually invalid + return QByteArray(reinterpret_cast(property->Data()), property->Length()); + } + return QVariant(); +} + template <> QVariant propertyToVariant(uint8_t property) { diff --git a/common/propertymapper.h b/common/propertymapper.h index fb5accc..efde72c 100644 --- a/common/propertymapper.h +++ b/common/propertymapper.h @@ -37,6 +37,8 @@ template QVariant propertyToVariant(const flatbuffers::String *); template QVariant propertyToVariant(uint8_t); +template +QVariant propertyToVariant(const flatbuffers::Vector *); /** @@ -87,6 +89,15 @@ public: return propertyToVariant((buffer->*f)()); }); } + + template + void addMapping(const QByteArray &name, const flatbuffers::Vector * (Buffer::*f)() const) + { + addMapping(name, [f](Buffer const *buffer) -> QVariant { + return propertyToVariant((buffer->*f)()); + }); + } + private: QHash > mReadAccessors; }; @@ -137,6 +148,17 @@ public: }; }); } + + 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