From c4e098fae7340d6d73cd4fbe880440baca1ddd49 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 9 Apr 2015 14:29:18 +0200 Subject: Refactored buffer extraction from vector. --- common/entitybuffer.h | 19 +++++++++++++++++++ dummyresource/domainadaptor.cpp | 26 +++----------------------- 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: */ static void assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void const *metadataData, size_t metadataSize, void const *resourceData, size_t resourceSize, void const *localData, size_t localSize); static flatbuffers::Offset > appendAsVector(flatbuffers::FlatBufferBuilder &fbb, void const *data, size_t size); + template + static const T *readBuffer(const uint8_t *data, int size) + { + flatbuffers::Verifier verifier(data, size); + if (verifier.VerifyBuffer()) { + return flatbuffers::GetRoot(data); + } + return nullptr; + } + + template + static const T *readBuffer(const flatbuffers::Vector *data) + { + if (data) { + return readBuffer(data->Data(), data->size()); + } + return nullptr; + } + private: 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() //TODO pass EntityBuffer instead? QSharedPointer DummyEventAdaptorFactory::createAdaptor(const Akonadi2::Entity &entity) { - DummyEvent const *resourceBuffer = 0; - if (auto resourceData = entity.resource()) { - flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size()); - if (VerifyDummyEventBuffer(verifyer)) { - resourceBuffer = GetDummyEvent(resourceData->Data()); - } - } - - // Akonadi2::Metadata const *metadataBuffer = 0; - // if (auto metadataData = entity.metadata()) { - // flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size()); - // if (Akonadi2::VerifyMetadataBuffer(verifyer)) { - // metadataBuffer = Akonadi2::GetMetadata(metadataData->Data()); - // } - // } - - Akonadi2::Domain::Buffer::Event const *localBuffer = 0; - if (auto localData = entity.local()) { - flatbuffers::Verifier verifyer(localData->Data(), localData->size()); - if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) { - localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData->Data()); - } - } + const auto resourceBuffer = Akonadi2::EntityBuffer::readBuffer(entity.resource()); + const auto localBuffer = Akonadi2::EntityBuffer::readBuffer(entity.local()); + // const auto metadataBuffer = Akonadi2::EntityBuffer::readBuffer(entity.metadata()); auto adaptor = QSharedPointer::create(); 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 storage, c //Extract buffers Akonadi2::EntityBuffer buffer(dataValue, dataSize); - DummyEvent const *resourceBuffer = 0; - if (auto resourceData = buffer.entity().resource()) { - flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size()); - if (VerifyDummyEventBuffer(verifyer)) { - resourceBuffer = GetDummyEvent(resourceData->Data()); - } - } - - Akonadi2::Domain::Buffer::Event const *localBuffer = 0; - if (auto localData = buffer.entity().local()) { - flatbuffers::Verifier verifyer(localData->Data(), localData->size()); - if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) { - localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData->Data()); - } - } - - Akonadi2::Metadata const *metadataBuffer = 0; - if (auto metadataData = buffer.entity().metadata()) { - flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size()); - if (Akonadi2::VerifyMetadataBuffer(verifyer)) { - metadataBuffer = Akonadi2::GetMetadata(metadataData->Data()); - } - } + const auto resourceBuffer = Akonadi2::EntityBuffer::readBuffer(buffer.entity().resource()); + const auto localBuffer = Akonadi2::EntityBuffer::readBuffer(buffer.entity().local()); + const auto metadataBuffer = Akonadi2::EntityBuffer::readBuffer(buffer.entity().metadata()); if (!resourceBuffer || !metadataBuffer) { qWarning() << "invalid buffer " << QByteArray::fromRawData(static_cast(keyValue), keySize); -- cgit v1.2.3