File indexing completed on 2024-06-23 04:23:34
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_OFFSET_ON_EXIT_VERIFIER_H 0008 #define __KIS_OFFSET_ON_EXIT_VERIFIER_H 0009 0010 #include "kritapsdutils_export.h" 0011 0012 #include <QIODevice> 0013 #include <QString> 0014 #include <kis_debug.h> 0015 0016 //#define DEBUG_OFFSET_ON_EXIT 0017 0018 /** 0019 * Check if the position of \p device has moved further by 0020 * \p expectedOffset and correct it if needed. It also issues 0021 * a warning if needed. 0022 */ 0023 0024 class KRITAPSDUTILS_EXPORT KisOffsetOnExitVerifier 0025 { 0026 public: 0027 KisOffsetOnExitVerifier(QIODevice &device, qint64 expectedOffset, int maxPadding, const QString &objectName = "", const QString &domain = "") 0028 : m_device(device) 0029 , m_maxPadding(maxPadding) 0030 , m_domain(domain) 0031 , m_objectName(objectName) 0032 { 0033 m_expectedPos = m_device.pos() + expectedOffset; 0034 } 0035 0036 ~KisOffsetOnExitVerifier() 0037 { 0038 if (m_device.pos() < m_expectedPos - m_maxPadding || m_device.pos() > m_expectedPos) { 0039 #ifdef DEBUG_OFFSET_ON_EXIT 0040 0041 QString msg = QString("Incorrect offset on exit %1, expected %2!").arg(m_device.pos()).arg(m_expectedPos); 0042 0043 warnKrita << "*** |" << m_objectName << msg; 0044 warnKrita << " |" << m_domain; 0045 0046 #endif /* DEBUG_OFFSET_ON_EXIT */ 0047 0048 m_device.seek(m_expectedPos); 0049 } 0050 } 0051 0052 private: 0053 QIODevice &m_device; 0054 int m_maxPadding; 0055 qint64 m_expectedPos; 0056 QString m_domain; 0057 QString m_objectName; 0058 }; 0059 0060 #define SETUP_OFFSET_VERIFIER(name, device, expectedOffset, maxPadding) \ 0061 KisOffsetOnExitVerifier name(device, expectedOffset, maxPadding, QString(#name), QString(__FILE__) + ":" + QString::number(__LINE__)) 0062 0063 #endif /* __KIS_OFFSET_ON_EXIT_VERIFIER_H */