File indexing completed on 2024-03-24 17:26:36

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_BYTEARRAYCHANGE_HPP
0010 #define OKTETA_BYTEARRAYCHANGE_HPP
0011 
0012 // lib
0013 #include "oktetacore_export.hpp"
0014 #include "arraychangemetrics.hpp"
0015 // Qt
0016 #include <QByteArray>
0017 
0018 namespace Okteta {
0019 
0020 // TODO: do we need the invalid status?
0021 // TODO: what about grouped changes
0022 // TODO: use change names from original? Only if local are not available
0023 class OKTETACORE_EXPORT ByteArrayChange
0024 {
0025     friend QDataStream& operator<<(QDataStream& outStream, const ByteArrayChange& change);
0026     friend QDataStream& operator>>(QDataStream& inStream, ByteArrayChange& change);
0027 
0028 public:
0029     ByteArrayChange();
0030     explicit ByteArrayChange(const ArrayChangeMetrics& metrics, const QByteArray& data = QByteArray());
0031     ByteArrayChange(const ByteArrayChange&) = default;
0032 
0033     ~ByteArrayChange() = default;
0034 
0035     ByteArrayChange& operator=(const ByteArrayChange&) = default;
0036 
0037 public:
0038     const ArrayChangeMetrics& metrics() const;
0039     const QByteArray& data() const;
0040 
0041 private:
0042     ArrayChangeMetrics mMetrics;
0043     QByteArray mData;
0044 //     UserId mUserId;
0045 //      mTime;
0046 };
0047 
0048 inline ByteArrayChange::ByteArrayChange() = default;
0049 
0050 inline ByteArrayChange::ByteArrayChange(const ArrayChangeMetrics& metrics, const QByteArray& data)
0051     : mMetrics(metrics)
0052     , mData(data)
0053 {}
0054 
0055 inline const ArrayChangeMetrics& ByteArrayChange::metrics() const { return mMetrics; }
0056 inline const QByteArray& ByteArrayChange::data()            const { return mData; }
0057 
0058 QDataStream& operator<<(QDataStream& outStream, const ByteArrayChange& change);
0059 QDataStream& operator>>(QDataStream& inStream, ByteArrayChange& change);
0060 
0061 inline QDataStream& operator<<(QDataStream& outStream, const ByteArrayChange& change)
0062 {
0063     outStream << change.mMetrics << change.mData;
0064     return outStream;
0065 }
0066 
0067 inline QDataStream& operator>>(QDataStream& inStream, ByteArrayChange& change)
0068 {
0069     inStream >> change.mMetrics >> change.mData;
0070     return inStream;
0071 }
0072 
0073 }
0074 
0075 Q_DECLARE_TYPEINFO(Okteta::ByteArrayChange, Q_MOVABLE_TYPE);
0076 
0077 #endif