File indexing completed on 2024-04-28 07:40:02

0001 /*
0002     This file is part of the KDE Baloo Project
0003     SPDX-FileCopyrightText: 2015 Vishesh Handa <vhanda@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "positioncodec.h"
0009 #include "positioninfo.h"
0010 #include "coding.h"
0011 
0012 using namespace Baloo;
0013 
0014 QByteArray PositionCodec::encode(const QVector<PositionInfo>& list)
0015 {
0016     QByteArray data;
0017     QByteArray temporaryStorage;
0018 
0019     for (const PositionInfo& pos : list) {
0020         putFixed64(&data, pos.docId);
0021         putDifferentialVarInt32(temporaryStorage, &data, pos.positions);
0022    }
0023 
0024     return data;
0025 }
0026 
0027 QVector<PositionInfo> PositionCodec::decode(const QByteArray& arr)
0028 {
0029     char* data = const_cast<char*>(arr.data());
0030     char* end = data + arr.size();
0031 
0032     QVector<PositionInfo> vec;
0033     while (data < end) {
0034         PositionInfo info;
0035 
0036         info.docId = decodeFixed64(data);
0037         data += sizeof(quint64);
0038         data = getDifferentialVarInt32(data, end, &info.positions);
0039         if (!data) {
0040             return QVector<PositionInfo>();
0041         }
0042 
0043         vec << info;
0044     }
0045 
0046     return vec;
0047 }