From 817bff01d15395206c1cc637d0c9ac0905007bf1 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 31 Dec 2014 01:13:00 +0100 Subject: Moved entitybuffer construction code to EntityBuffer --- common/entitybuffer.cpp | 14 ++++++++++++++ common/entitybuffer.h | 2 ++ common/pipeline.cpp | 32 ++++++++------------------------ 3 files changed, 24 insertions(+), 24 deletions(-) (limited to 'common') diff --git a/common/entitybuffer.cpp b/common/entitybuffer.cpp index a78e91d..b9c9d76 100644 --- a/common/entitybuffer.cpp +++ b/common/entitybuffer.cpp @@ -51,3 +51,17 @@ void EntityBuffer::extractResourceBuffer(void *dataValue, int dataSize, const st } } +void EntityBuffer::assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void *metadataData, size_t metadataSize, void *resourceData, size_t resourceSize, void *localData, size_t localSize) +{ + auto metadata = fbb.CreateVector(static_cast(metadataData), metadataSize); + auto resource = fbb.CreateVector(static_cast(resourceData), resourceSize); + auto local = fbb.CreateVector(static_cast(localData), localSize); + auto builder = Akonadi2::EntityBuilder(fbb); + builder.add_metadata(metadata); + builder.add_resource(resource); + builder.add_local(local); + + auto buffer = builder.Finish(); + Akonadi2::FinishEntityBuffer(fbb, buffer); +} + diff --git a/common/entitybuffer.h b/common/entitybuffer.h index 2a7150e..c072777 100644 --- a/common/entitybuffer.h +++ b/common/entitybuffer.h @@ -14,6 +14,8 @@ public: const flatbuffers::Vector *localBuffer(); static void extractResourceBuffer(void *dataValue, int dataSize, const std::function *)> &handler); + static void assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void *metadataData, size_t metadataSize, void *resourceData, size_t resourceSize, void *localData, size_t localSize); + private: const Entity *mEntity; }; diff --git a/common/pipeline.cpp b/common/pipeline.cpp index dc6d389..04954ac 100644 --- a/common/pipeline.cpp +++ b/common/pipeline.cpp @@ -26,6 +26,7 @@ #include #include "entity_generated.h" #include "metadata_generated.h" +#include "entitybuffer.h" namespace Akonadi2 { @@ -76,33 +77,16 @@ void Pipeline::newEntity(const QByteArray &key, void *resourceBufferData, size_t { const qint64 newRevision = storage().maxRevision() + 1; - - std::vector metadataData; //Add metadata buffer - { - flatbuffers::FlatBufferBuilder metadataFbb; - auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb); - metadataBuilder.add_revision(newRevision); - auto metadataBuffer = metadataBuilder.Finish(); - Akonadi2::FinishMetadataBuffer(metadataFbb, metadataBuffer); - metadataData.resize(metadataFbb.GetSize()); - std::copy_n(metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), back_inserter(metadataData)); - } - + flatbuffers::FlatBufferBuilder metadataFbb; + auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb); + metadataBuilder.add_revision(newRevision); + auto metadataBuffer = metadataBuilder.Finish(); + Akonadi2::FinishMetadataBuffer(metadataFbb, metadataBuffer); flatbuffers::FlatBufferBuilder fbb; - auto metadata = fbb.CreateVector(metadataData.data(), metadataData.size()); - auto resource = fbb.CreateVector(static_cast(resourceBufferData), size); - auto builder = Akonadi2::EntityBuilder(fbb); - builder.add_metadata(metadata); - builder.add_resource(resource); - //We don't have a local buffer yet - // builder.add_local(); - - auto buffer = builder.Finish(); - Akonadi2::FinishEntityBuffer(fbb, buffer); - - qDebug() << "writing new entity" << key; + EntityBuffer::assembleEntityBuffer(fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), resourceBufferData, size, 0, 0); + storage().write(key.data(), key.size(), fbb.GetBufferPointer(), fbb.GetSize()); storage().setMaxRevision(newRevision); -- cgit v1.2.3