summaryrefslogtreecommitdiffstats
path: root/common/bufferutils.h
blob: d6008c4142d24c069e1005fa6834f35d8c6a46fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#pragma once

#include <flatbuffers/flatbuffers.h>
#include <QByteArray>
#include <QList>

namespace Sink {
namespace BufferUtils {
template <typename T>
static QByteArray extractBuffer(const T *data)
{
    return QByteArray::fromRawData(reinterpret_cast<char const *>(data->Data()), data->size());
}

template <typename T>
static QByteArray extractBufferCopy(const T *data)
{
    return QByteArray(reinterpret_cast<char const *>(data->Data()), data->size());
}

static QByteArray extractBuffer(const flatbuffers::FlatBufferBuilder &fbb)
{
    return QByteArray::fromRawData(reinterpret_cast<char const *>(fbb.GetBufferPointer()), fbb.GetSize());
}

static QList<QByteArray> fromVector(const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> &vector)
{
    QList<QByteArray> list;
    for (const auto &data : vector) {
        Q_ASSERT(data);
        list << QByteArray::fromStdString(data->str());
    }
    return list;
}

template <typename T>
static flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> toVector(flatbuffers::FlatBufferBuilder &fbb, const T &list)
{
    std::vector<flatbuffers::Offset<flatbuffers::String>> modifiedPropertiesList;
    for (const auto &change : list) {
        auto s = fbb.CreateString(change);
        modifiedPropertiesList.push_back(s);
    }
    return fbb.CreateVector(modifiedPropertiesList);
}

}
}