summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-04-09 14:29:18 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-04-09 14:29:18 +0200
commitc4e098fae7340d6d73cd4fbe880440baca1ddd49 (patch)
treed7762b84f78a4dc502556629f57608d0c3102434
parent855e3d7d0e3779e76e5af55bbf4c851acbd76e56 (diff)
downloadsink-c4e098fae7340d6d73cd4fbe880440baca1ddd49.tar.gz
sink-c4e098fae7340d6d73cd4fbe880440baca1ddd49.zip
Refactored buffer extraction from vector.
-rw-r--r--common/entitybuffer.h19
-rw-r--r--dummyresource/domainadaptor.cpp26
-rw-r--r--dummyresource/facade.cpp26
3 files changed, 25 insertions, 46 deletions
diff --git a/common/entitybuffer.h b/common/entitybuffer.h
index f22c84e..82152c9 100644
--- a/common/entitybuffer.h
+++ b/common/entitybuffer.h
@@ -23,6 +23,25 @@ public:
23 */ 23 */
24 static void assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void const *metadataData, size_t metadataSize, void const *resourceData, size_t resourceSize, void const *localData, size_t localSize); 24 static void assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void const *metadataData, size_t metadataSize, void const *resourceData, size_t resourceSize, void const *localData, size_t localSize);
25 static flatbuffers::Offset<flatbuffers::Vector<uint8_t> > appendAsVector(flatbuffers::FlatBufferBuilder &fbb, void const *data, size_t size); 25 static flatbuffers::Offset<flatbuffers::Vector<uint8_t> > appendAsVector(flatbuffers::FlatBufferBuilder &fbb, void const *data, size_t size);
26 template<typename T>
27 static const T *readBuffer(const uint8_t *data, int size)
28 {
29 flatbuffers::Verifier verifier(data, size);
30 if (verifier.VerifyBuffer<T>()) {
31 return flatbuffers::GetRoot<T>(data);
32 }
33 return nullptr;
34 }
35
36 template<typename T>
37 static const T *readBuffer(const flatbuffers::Vector<uint8_t> *data)
38 {
39 if (data) {
40 return readBuffer<T>(data->Data(), data->size());
41 }
42 return nullptr;
43 }
44
26 45
27private: 46private:
28 const Entity *mEntity; 47 const Entity *mEntity;
diff --git a/dummyresource/domainadaptor.cpp b/dummyresource/domainadaptor.cpp
index 7a767ca..865a4c0 100644
--- a/dummyresource/domainadaptor.cpp
+++ b/dummyresource/domainadaptor.cpp
@@ -92,29 +92,9 @@ DummyEventAdaptorFactory::DummyEventAdaptorFactory()
92//TODO pass EntityBuffer instead? 92//TODO pass EntityBuffer instead?
93QSharedPointer<Akonadi2::Domain::BufferAdaptor> DummyEventAdaptorFactory::createAdaptor(const Akonadi2::Entity &entity) 93QSharedPointer<Akonadi2::Domain::BufferAdaptor> DummyEventAdaptorFactory::createAdaptor(const Akonadi2::Entity &entity)
94{ 94{
95 DummyEvent const *resourceBuffer = 0; 95 const auto resourceBuffer = Akonadi2::EntityBuffer::readBuffer<DummyEvent>(entity.resource());
96 if (auto resourceData = entity.resource()) { 96 const auto localBuffer = Akonadi2::EntityBuffer::readBuffer<Akonadi2::Domain::Buffer::Event>(entity.local());
97 flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size()); 97 // const auto metadataBuffer = Akonadi2::EntityBuffer::readBuffer<Akonadi2::Metadata>(entity.metadata());
98 if (VerifyDummyEventBuffer(verifyer)) {
99 resourceBuffer = GetDummyEvent(resourceData->Data());
100 }
101 }
102
103 // Akonadi2::Metadata const *metadataBuffer = 0;
104 // if (auto metadataData = entity.metadata()) {
105 // flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size());
106 // if (Akonadi2::VerifyMetadataBuffer(verifyer)) {
107 // metadataBuffer = Akonadi2::GetMetadata(metadataData->Data());
108 // }
109 // }
110
111 Akonadi2::Domain::Buffer::Event const *localBuffer = 0;
112 if (auto localData = entity.local()) {
113 flatbuffers::Verifier verifyer(localData->Data(), localData->size());
114 if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) {
115 localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData->Data());
116 }
117 }
118 98
119 auto adaptor = QSharedPointer<DummyEventAdaptor>::create(); 99 auto adaptor = QSharedPointer<DummyEventAdaptor>::create();
120 adaptor->mLocalBuffer = localBuffer; 100 adaptor->mLocalBuffer = localBuffer;
diff --git a/dummyresource/facade.cpp b/dummyresource/facade.cpp
index 209ad0d..7c64675 100644
--- a/dummyresource/facade.cpp
+++ b/dummyresource/facade.cpp
@@ -118,29 +118,9 @@ void DummyResourceFacade::readValue(QSharedPointer<Akonadi2::Storage> storage, c
118 //Extract buffers 118 //Extract buffers
119 Akonadi2::EntityBuffer buffer(dataValue, dataSize); 119 Akonadi2::EntityBuffer buffer(dataValue, dataSize);
120 120
121 DummyEvent const *resourceBuffer = 0; 121 const auto resourceBuffer = Akonadi2::EntityBuffer::readBuffer<DummyEvent>(buffer.entity().resource());
122 if (auto resourceData = buffer.entity().resource()) { 122 const auto localBuffer = Akonadi2::EntityBuffer::readBuffer<Akonadi2::Domain::Buffer::Event>(buffer.entity().local());
123 flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size()); 123 const auto metadataBuffer = Akonadi2::EntityBuffer::readBuffer<Akonadi2::Metadata>(buffer.entity().metadata());
124 if (VerifyDummyEventBuffer(verifyer)) {
125 resourceBuffer = GetDummyEvent(resourceData->Data());
126 }
127 }
128
129 Akonadi2::Domain::Buffer::Event const *localBuffer = 0;
130 if (auto localData = buffer.entity().local()) {
131 flatbuffers::Verifier verifyer(localData->Data(), localData->size());
132 if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) {
133 localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData->Data());
134 }
135 }
136
137 Akonadi2::Metadata const *metadataBuffer = 0;
138 if (auto metadataData = buffer.entity().metadata()) {
139 flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size());
140 if (Akonadi2::VerifyMetadataBuffer(verifyer)) {
141 metadataBuffer = Akonadi2::GetMetadata(metadataData->Data());
142 }
143 }
144 124
145 if (!resourceBuffer || !metadataBuffer) { 125 if (!resourceBuffer || !metadataBuffer) {
146 qWarning() << "invalid buffer " << QByteArray::fromRawData(static_cast<char*>(keyValue), keySize); 126 qWarning() << "invalid buffer " << QByteArray::fromRawData(static_cast<char*>(keyValue), keySize);