summaryrefslogtreecommitdiffstats
path: root/common/propertymapper.h
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-04-28 12:19:52 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-04-28 12:19:52 +0200
commita4ce2b2eda8a2fea4263017e6868c327f22f5e47 (patch)
tree448b51e6107c0e377f3a92103bf060d128496c35 /common/propertymapper.h
parent6b8432a5c0647d8fbe3cda549574ae13e07bb2f4 (diff)
downloadsink-a4ce2b2eda8a2fea4263017e6868c327f22f5e47.tar.gz
sink-a4ce2b2eda8a2fea4263017e6868c327f22f5e47.zip
Removed the template argument from the write property mapper
Diffstat (limited to 'common/propertymapper.h')
-rw-r--r--common/propertymapper.h25
1 files changed, 12 insertions, 13 deletions
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:
104 QHash<QByteArray, std::function<QVariant(void const *)>> mReadAccessors; 104 QHash<QByteArray, std::function<QVariant(void const *)>> mReadAccessors;
105}; 105};
106 106
107template <typename BufferBuilder>
108class WritePropertyMapper 107class WritePropertyMapper
109{ 108{
110public: 109public:
111 virtual ~WritePropertyMapper(){}; 110 virtual ~WritePropertyMapper(){};
112 111
113 virtual void setProperty(const QByteArray &key, const QVariant &value, QList<std::function<void(BufferBuilder &)>> &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const 112 virtual void setProperty(const QByteArray &key, const QVariant &value, QList<std::function<void(void *builder)>> &builderCalls, flatbuffers::FlatBufferBuilder &fbb) const
114 { 113 {
115 if (mWriteAccessors.contains(key)) { 114 if (mWriteAccessors.contains(key)) {
116 auto accessor = mWriteAccessors.value(key); 115 auto accessor = mWriteAccessors.value(key);
@@ -123,36 +122,36 @@ public:
123 return mWriteAccessors.contains(key); 122 return mWriteAccessors.contains(key);
124 } 123 }
125 124
126 void addMapping(const QByteArray &property, const std::function<std::function<void(BufferBuilder &)>(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping) 125 void addMapping(const QByteArray &property, const std::function<std::function<void(void *builder)>(const QVariant &, flatbuffers::FlatBufferBuilder &)> &mapping)
127 { 126 {
128 mWriteAccessors.insert(property, mapping); 127 mWriteAccessors.insert(property, mapping);
129 } 128 }
130 129
131 template <typename T> 130 template <typename T, typename BufferBuilder>
132 void addMapping(void (BufferBuilder::*f)(uint8_t)) 131 void addMapping(void (BufferBuilder::*f)(uint8_t))
133 { 132 {
134 addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(BufferBuilder &)> { 133 addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(void *builder)> {
135 return [value, f](BufferBuilder &builder) { (builder.*f)(value.value<typename T::Type>()); }; 134 return [value, f](void *builder) { (static_cast<BufferBuilder*>(builder)->*f)(value.value<typename T::Type>()); };
136 }); 135 });
137 } 136 }
138 137
139 template <typename T> 138 template <typename T, typename BufferBuilder>
140 void addMapping(void (BufferBuilder::*f)(bool)) 139 void addMapping(void (BufferBuilder::*f)(bool))
141 { 140 {
142 addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(BufferBuilder &)> { 141 addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(void *builder)> {
143 return [value, f](BufferBuilder &builder) { (builder.*f)(value.value<typename T::Type>()); }; 142 return [value, f](void *builder) { (static_cast<BufferBuilder*>(builder)->*f)(value.value<typename T::Type>()); };
144 }); 143 });
145 } 144 }
146 145
147 template <typename T, typename Arg> 146 template <typename T, typename BufferBuilder, typename Arg>
148 void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset<Arg>)) 147 void addMapping(void (BufferBuilder::*f)(flatbuffers::Offset<Arg>))
149 { 148 {
150 addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(BufferBuilder &)> { 149 addMapping(T::name, [f](const QVariant &value, flatbuffers::FlatBufferBuilder &fbb) -> std::function<void(void *builder)> {
151 auto offset = variantToProperty<typename T::Type>(value, fbb); 150 auto offset = variantToProperty<typename T::Type>(value, fbb);
152 return [offset, f](BufferBuilder &builder) { (builder.*f)(offset); }; 151 return [offset, f](void *builder) { (static_cast<BufferBuilder*>(builder)->*f)(offset); };
153 }); 152 });
154 } 153 }
155 154
156private: 155private:
157 QHash<QByteArray, std::function<std::function<void(BufferBuilder &)>(const QVariant &, flatbuffers::FlatBufferBuilder &)>> mWriteAccessors; 156 QHash<QByteArray, std::function<std::function<void(void *builder)>(const QVariant &, flatbuffers::FlatBufferBuilder &)>> mWriteAccessors;
158}; 157};