File indexing completed on 2024-04-14 15:52:44

0001 /*
0002     This file is part of the Okteta Core library, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2008 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 OKTETA_CHANGESDATASTORAGE_HPP
0010 #define OKTETA_CHANGESDATASTORAGE_HPP
0011 
0012 // Qt
0013 #include <QByteArray>
0014 
0015 namespace Okteta {
0016 
0017 class ChangesDataStorage
0018 {
0019 public:
0020     ChangesDataStorage();
0021     ChangesDataStorage(const ChangesDataStorage&) = delete;
0022 
0023     ~ChangesDataStorage() = default;
0024 
0025     ChangesDataStorage& operator=(const ChangesDataStorage&) = delete;
0026 
0027 public: // set/action
0028     void append(int from, char byte);
0029     void append(int from, const char* data, int dataLength);
0030     void appendFill(int from, char fillDatum, int fillLength);
0031 
0032     void clear();
0033 
0034 public: // get
0035     QByteArray data(int offset, int length) const;
0036     char operator[](int offset) const;
0037 
0038 private:
0039     QByteArray mData;
0040 };
0041 
0042 inline ChangesDataStorage::ChangesDataStorage() = default;
0043 
0044 inline QByteArray ChangesDataStorage::data(int offset, int length) const
0045 {
0046     return mData.mid(offset, length);
0047 }
0048 
0049 inline char ChangesDataStorage::operator[](int offset) const { return mData[offset]; }
0050 
0051 inline void ChangesDataStorage::clear() { mData.clear(); }
0052 
0053 inline void ChangesDataStorage::append(int from, char datum)
0054 {
0055     mData.resize(from);
0056     mData.append(datum);
0057 }
0058 
0059 inline void ChangesDataStorage::append(int from, const char* data, int dataLength)
0060 {
0061     mData.resize(from + dataLength);
0062     memcpy(mData.data() + from, data, dataLength);
0063 }
0064 
0065 inline void ChangesDataStorage::appendFill(int from, char fillDatum, int fillLength)
0066 {
0067     mData.resize(from + fillLength);
0068     memset(mData.data() + from, fillDatum, fillLength);
0069 }
0070 
0071 }
0072 
0073 #endif