1 /*
2 This file is part of the Okteta Kasten module, made within the KDE community.
3
4 SPDX-FileCopyrightText: 2007 Friedrich W. H. Kossebau <kossebau@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8
9 #include "bytearrayvaluesstreamencoder.hpp"
10
11 // lib
12 #include <bytearrayview.hpp>
13 // Okteta core
14 #include <Okteta/AbstractByteArrayModel>
15 #include <Okteta/ValueCodec>
16 // KF
17 #include <KLocalizedString>
18 // Qt
19 #include <QTextStream>
20
21 namespace Kasten {
22
ValuesStreamEncoderSettings()23 ValuesStreamEncoderSettings::ValuesStreamEncoderSettings()
24 : separation(QStringLiteral(" "))
25 {}
26
ByteArrayValuesStreamEncoder()27 ByteArrayValuesStreamEncoder::ByteArrayValuesStreamEncoder()
28 : AbstractByteArrayStreamEncoder(i18nc("name of the encoding target", "Values"), QStringLiteral("text/plain"))
29 {}
30
31 ByteArrayValuesStreamEncoder::~ByteArrayValuesStreamEncoder() = default;
32
encodeDataToStream(QIODevice * device,const ByteArrayView * byteArrayView,const Okteta::AbstractByteArrayModel * byteArrayModel,const Okteta::AddressRange & range)33 bool ByteArrayValuesStreamEncoder::encodeDataToStream(QIODevice* device,
34 const ByteArrayView* byteArrayView,
35 const Okteta::AbstractByteArrayModel* byteArrayModel,
36 const Okteta::AddressRange& range)
37 {
38 bool success = true;
39
40 // settings
41 mSettings.undefinedChar = byteArrayView->undefinedChar();
42 mSettings.substituteChar = byteArrayView->substituteChar();
43 mSettings.valueCoding = (Okteta::ValueCoding)byteArrayView->valueCoding();
44
45 // encode
46 QTextStream textStream(device);
47
48 Okteta::ValueCodec* valueCodec = Okteta::ValueCodec::createCodec(mSettings.valueCoding);
49
50 // prepare
51 QString valueString;
52 valueString.resize(valueCodec->encodingWidth());
53
54 for (Okteta::Address i = range.start(); i <= range.end(); ++i) {
55 if (i > range.start()) {
56 textStream << mSettings.separation;
57 }
58
59 valueCodec->encode(&valueString, 0, byteArrayModel->byte(i));
60
61 textStream << valueString;
62 }
63
64 // clean up
65 delete valueCodec;
66
67 return success;
68 }
69
70 }
71