diff options
-rw-r--r-- | common/entitybuffer.cpp | 14 | ||||
-rw-r--r-- | common/entitybuffer.h | 2 | ||||
-rw-r--r-- | common/pipeline.cpp | 32 |
3 files changed, 24 insertions, 24 deletions
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 | |||
51 | } | 51 | } |
52 | } | 52 | } |
53 | 53 | ||
54 | void EntityBuffer::assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void *metadataData, size_t metadataSize, void *resourceData, size_t resourceSize, void *localData, size_t localSize) | ||
55 | { | ||
56 | auto metadata = fbb.CreateVector<uint8_t>(static_cast<uint8_t*>(metadataData), metadataSize); | ||
57 | auto resource = fbb.CreateVector<uint8_t>(static_cast<uint8_t*>(resourceData), resourceSize); | ||
58 | auto local = fbb.CreateVector<uint8_t>(static_cast<uint8_t*>(localData), localSize); | ||
59 | auto builder = Akonadi2::EntityBuilder(fbb); | ||
60 | builder.add_metadata(metadata); | ||
61 | builder.add_resource(resource); | ||
62 | builder.add_local(local); | ||
63 | |||
64 | auto buffer = builder.Finish(); | ||
65 | Akonadi2::FinishEntityBuffer(fbb, buffer); | ||
66 | } | ||
67 | |||
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: | |||
14 | const flatbuffers::Vector<uint8_t> *localBuffer(); | 14 | const flatbuffers::Vector<uint8_t> *localBuffer(); |
15 | 15 | ||
16 | static void extractResourceBuffer(void *dataValue, int dataSize, const std::function<void(const flatbuffers::Vector<uint8_t> *)> &handler); | 16 | static void extractResourceBuffer(void *dataValue, int dataSize, const std::function<void(const flatbuffers::Vector<uint8_t> *)> &handler); |
17 | static void assembleEntityBuffer(flatbuffers::FlatBufferBuilder &fbb, void *metadataData, size_t metadataSize, void *resourceData, size_t resourceSize, void *localData, size_t localSize); | ||
18 | |||
17 | private: | 19 | private: |
18 | const Entity *mEntity; | 20 | const Entity *mEntity; |
19 | }; | 21 | }; |
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 @@ | |||
26 | #include <QDebug> | 26 | #include <QDebug> |
27 | #include "entity_generated.h" | 27 | #include "entity_generated.h" |
28 | #include "metadata_generated.h" | 28 | #include "metadata_generated.h" |
29 | #include "entitybuffer.h" | ||
29 | 30 | ||
30 | namespace Akonadi2 | 31 | namespace Akonadi2 |
31 | { | 32 | { |
@@ -76,33 +77,16 @@ void Pipeline::newEntity(const QByteArray &key, void *resourceBufferData, size_t | |||
76 | { | 77 | { |
77 | const qint64 newRevision = storage().maxRevision() + 1; | 78 | const qint64 newRevision = storage().maxRevision() + 1; |
78 | 79 | ||
79 | |||
80 | std::vector<uint8_t> metadataData; | ||
81 | //Add metadata buffer | 80 | //Add metadata buffer |
82 | { | 81 | flatbuffers::FlatBufferBuilder metadataFbb; |
83 | flatbuffers::FlatBufferBuilder metadataFbb; | 82 | auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb); |
84 | auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb); | 83 | metadataBuilder.add_revision(newRevision); |
85 | metadataBuilder.add_revision(newRevision); | 84 | auto metadataBuffer = metadataBuilder.Finish(); |
86 | auto metadataBuffer = metadataBuilder.Finish(); | 85 | Akonadi2::FinishMetadataBuffer(metadataFbb, metadataBuffer); |
87 | Akonadi2::FinishMetadataBuffer(metadataFbb, metadataBuffer); | ||
88 | metadataData.resize(metadataFbb.GetSize()); | ||
89 | std::copy_n(metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), back_inserter(metadataData)); | ||
90 | } | ||
91 | |||
92 | 86 | ||
93 | flatbuffers::FlatBufferBuilder fbb; | 87 | flatbuffers::FlatBufferBuilder fbb; |
94 | auto metadata = fbb.CreateVector<uint8_t>(metadataData.data(), metadataData.size()); | 88 | EntityBuffer::assembleEntityBuffer(fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), resourceBufferData, size, 0, 0); |
95 | auto resource = fbb.CreateVector<uint8_t>(static_cast<uint8_t*>(resourceBufferData), size); | 89 | |
96 | auto builder = Akonadi2::EntityBuilder(fbb); | ||
97 | builder.add_metadata(metadata); | ||
98 | builder.add_resource(resource); | ||
99 | //We don't have a local buffer yet | ||
100 | // builder.add_local(); | ||
101 | |||
102 | auto buffer = builder.Finish(); | ||
103 | Akonadi2::FinishEntityBuffer(fbb, buffer); | ||
104 | |||
105 | qDebug() << "writing new entity" << key; | ||
106 | storage().write(key.data(), key.size(), fbb.GetBufferPointer(), fbb.GetSize()); | 90 | storage().write(key.data(), key.size(), fbb.GetBufferPointer(), fbb.GetSize()); |
107 | storage().setMaxRevision(newRevision); | 91 | storage().setMaxRevision(newRevision); |
108 | 92 | ||