File indexing completed on 2024-05-12 05:25:57

0001 #pragma once
0002 
0003 #include <flatbuffers/flatbuffers.h>
0004 #include <QByteArray>
0005 #include <QList>
0006 
0007 namespace Sink {
0008 namespace BufferUtils {
0009 
0010 //Does not copy the data
0011 template <typename T>
0012 static QByteArray extractBuffer(const T *data)
0013 {
0014     return QByteArray::fromRawData(reinterpret_cast<char const *>(data->Data()), data->size());
0015 }
0016 
0017 //Returns a deep copy of the data
0018 template <typename T>
0019 static QByteArray extractBufferCopy(const T *data)
0020 {
0021     return QByteArray(reinterpret_cast<char const *>(data->Data()), data->size());
0022 }
0023 
0024 //Does not copy the data
0025 static QByteArray extractBuffer(const flatbuffers::FlatBufferBuilder &fbb)
0026 {
0027     return QByteArray::fromRawData(reinterpret_cast<char const *>(fbb.GetBufferPointer()), fbb.GetSize());
0028 }
0029 
0030 //Returns a deep copy of the data
0031 static QList<QByteArray> fromVector(const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> &vector)
0032 {
0033     QList<QByteArray> list;
0034     for (const flatbuffers::String *data : vector) {
0035         Q_ASSERT(data);
0036         list << QByteArray::fromStdString(data->str());
0037     }
0038     return list;
0039 }
0040 
0041 template <typename T>
0042 static flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> toVector(flatbuffers::FlatBufferBuilder &fbb, const T &list)
0043 {
0044     std::vector<flatbuffers::Offset<flatbuffers::String>> modifiedPropertiesList;
0045     for (const auto &change : list) {
0046         auto s = fbb.CreateString(change.toStdString());
0047         modifiedPropertiesList.push_back(s);
0048     }
0049     return fbb.CreateVector(modifiedPropertiesList);
0050 }
0051 
0052 }
0053 }