File indexing completed on 2025-01-05 05:23:28

0001 /*
0002     This file is part of the Okteta Kasten module, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2011 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #ifndef KASTEN_CHARSETCONVERSIONJOB_HPP
0010 #define KASTEN_CHARSETCONVERSIONJOB_HPP
0011 
0012 // Okteta core
0013 #include <Okteta/AddressRange>
0014 #include <Okteta/Byte>
0015 // Qt
0016 #include <QMap>
0017 #include <QObject>
0018 
0019 namespace Okteta {
0020 class AbstractByteArrayModel;
0021 class CharCodec;
0022 }
0023 
0024 namespace Kasten {
0025 
0026 class CharsetConversionJob : public QObject // not yet: KJob
0027 {
0028     Q_OBJECT
0029 
0030 public:
0031     CharsetConversionJob(Okteta::Byte* result,
0032                          Okteta::AbstractByteArrayModel* model,
0033                          const Okteta::AddressRange& range,
0034                          const Okteta::CharCodec* sourceCharCodec,
0035                          const Okteta::CharCodec* targetCharCodec,
0036                          bool isSubstitutingMissingChars,
0037                          Okteta::Byte substituteByte);
0038 
0039 public:
0040     bool exec();
0041 
0042 public:
0043     int convertedBytesCount() const;
0044     const QMap<Okteta::Byte, int>& failedPerByteCount() const;
0045 
0046 private:
0047     Okteta::Byte* const mResult;
0048     Okteta::AbstractByteArrayModel* const mByteArrayModel;
0049     const Okteta::AddressRange mRange;
0050 
0051     const Okteta::CharCodec* const mSourceCharCodec;
0052     const Okteta::CharCodec* const mTargetCharCodec;
0053 
0054     bool mSubstitutingMissingChars;
0055     Okteta::Byte mSubstituteByte;
0056 
0057     int mConvertedBytesCount;
0058     QMap<Okteta::Byte, int> mFailedPerByteCount;
0059 };
0060 
0061 inline CharsetConversionJob::CharsetConversionJob(Okteta::Byte* result,
0062                                                   Okteta::AbstractByteArrayModel* model,
0063                                                   const Okteta::AddressRange& range,
0064                                                   const Okteta::CharCodec* sourceCharCodec,
0065                                                   const Okteta::CharCodec* targetCharCodec,
0066                                                   bool isSubstitutingMissingChars,
0067                                                   Okteta::Byte substituteByte)
0068     : mResult(result)
0069     , mByteArrayModel(model)
0070     , mRange(range)
0071     , mSourceCharCodec(sourceCharCodec)
0072     , mTargetCharCodec(targetCharCodec)
0073     , mSubstitutingMissingChars(isSubstitutingMissingChars)
0074     , mSubstituteByte(substituteByte)
0075 {}
0076 
0077 inline int CharsetConversionJob::convertedBytesCount() const { return mConvertedBytesCount; }
0078 
0079 inline const QMap<Okteta::Byte, int>& CharsetConversionJob::failedPerByteCount() const { return mFailedPerByteCount; }
0080 
0081 }
0082 
0083 #endif