diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-04-09 14:29:18 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-04-09 14:29:18 +0200 |
commit | c4e098fae7340d6d73cd4fbe880440baca1ddd49 (patch) | |
tree | d7762b84f78a4dc502556629f57608d0c3102434 | |
parent | 855e3d7d0e3779e76e5af55bbf4c851acbd76e56 (diff) | |
download | sink-c4e098fae7340d6d73cd4fbe880440baca1ddd49.tar.gz sink-c4e098fae7340d6d73cd4fbe880440baca1ddd49.zip |
Refactored buffer extraction from vector.
-rw-r--r-- | common/entitybuffer.h | 19 | ||||
-rw-r--r-- | dummyresource/domainadaptor.cpp | 26 | ||||
-rw-r--r-- | dummyresource/facade.cpp | 26 |
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 | ||
27 | private: | 46 | private: |
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? |
93 | QSharedPointer<Akonadi2::Domain::BufferAdaptor> DummyEventAdaptorFactory::createAdaptor(const Akonadi2::Entity &entity) | 93 | QSharedPointer<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); |