From 0cc49e7ea505b6b60a1dafb256cd318ffb24be40 Mon Sep 17 00:00:00 2001 From: Gavin MacGregor Date: Wed, 12 Feb 2025 19:03:48 +0000 Subject: [PATCH] Move from dynamically allocating arrays to fixed arrays This should allow the page bass class to be copy constructed. --- src/qteletextdecoder/pagebase.cpp | 61 ++++--------------------------- src/qteletextdecoder/pagebase.h | 19 +++++----- 2 files changed, 16 insertions(+), 64 deletions(-) diff --git a/src/qteletextdecoder/pagebase.cpp b/src/qteletextdecoder/pagebase.cpp index 16bd179..69ff112 100644 --- a/src/qteletextdecoder/pagebase.cpp +++ b/src/qteletextdecoder/pagebase.cpp @@ -23,98 +23,52 @@ PageBase::PageBase() { - // We use nullptrs to keep track of allocated packets, so initialise them this way - for (int y=0; y<26; y++) - m_displayPackets[y] = nullptr; - for (int y=0; y<3; y++) - for (int d=0; d<16; d++) - m_designationPackets[y][d] = nullptr; - for (int b=PageBase::C4ErasePage; b<=PageBase::C14NOS; b++) m_controlBits[b] = false; } -PageBase::~PageBase() -{ - for (int y=0; y<26; y++) - if (m_displayPackets[y] != nullptr) - delete m_displayPackets[y]; - for (int y=0; y<3; y++) - for (int d=0; d<16; d++) - if (m_designationPackets[y][d] != nullptr) - delete m_designationPackets[y][d]; -} - bool PageBase::isEmpty() const { for (int y=0; y<26; y++) - if (m_displayPackets[y] != nullptr) + if (!m_displayPackets[y].isEmpty()) return false; for (int y=0; y<3; y++) for (int d=0; d<16; d++) - if (m_designationPackets[y][d] != nullptr) + if (!m_designationPackets[y][d].isEmpty()) return false; return true; } -QByteArray PageBase::packet(int y) const -{ - if (m_displayPackets[y] == nullptr) - return QByteArray(); // Blank result - - return *m_displayPackets[y]; -} - -QByteArray PageBase::packet(int y, int d) const -{ - if (m_designationPackets[y-26][d] == nullptr) - return QByteArray(); // Blank result - - return *m_designationPackets[y-26][d]; -} - - bool PageBase::setPacket(int y, QByteArray pkt) { - if (m_displayPackets[y] == nullptr) - m_displayPackets[y] = new QByteArray(40, 0x00); - *m_displayPackets[y] = pkt; + m_displayPackets[y] = pkt; return true; } bool PageBase::setPacket(int y, int d, QByteArray pkt) { - if (m_designationPackets[y-26][d] == nullptr) - m_designationPackets[y-26][d] = new QByteArray(40, 0x00); - *m_designationPackets[y-26][d] = pkt; + m_designationPackets[y-26][d] = pkt; return true; } -/* bool PageBase::clearPacket(int y) { - if (m_displayPackets[y] != nullptr) { - delete m_displayPackets[y]; - m_displayPackets[y] = nullptr; - } + m_displayPackets[y] = QByteArray(); return true; } bool PageBase::clearPacket(int y, int d) { - if (m_designationPackets[y-26][d] != nullptr) { - delete m_designationPackets[y-26][d]; - m_designationPackets[y-26][d] = nullptr; - } + m_designationPackets[y-26][d] = QByteArray(); return true; } -void SubPage::clearAllPackets() +void PageBase::clearAllPackets() { for (int y=0; y<26; y++) clearPacket(y); @@ -122,7 +76,6 @@ void SubPage::clearAllPackets() for (int d=0; d<16; d++) clearPacket(y, d); } -*/ bool PageBase::setControlBit(int b, bool active) { diff --git a/src/qteletextdecoder/pagebase.h b/src/qteletextdecoder/pagebase.h index ac8c9ef..b627598 100644 --- a/src/qteletextdecoder/pagebase.h +++ b/src/qteletextdecoder/pagebase.h @@ -31,26 +31,25 @@ public: enum ControlBitsEnum { C4ErasePage, C5Newsflash, C6Subtitle, C7SuppressHeader, C8Update, C9InterruptedSequence, C10InhibitDisplay, C11SerialMagazine, C12NOS, C13NOS, C14NOS }; PageBase(); - virtual ~PageBase(); virtual bool isEmpty() const; - virtual QByteArray packet(int y) const; - virtual QByteArray packet(int y, int d) const; - virtual bool packetExists(int y) const { return m_displayPackets[y] != nullptr; } - virtual bool packetExists(int y, int d) const { return m_designationPackets[y-26][d] != nullptr; } - virtual bool setPacket(int y, QByteArray packet); + virtual QByteArray packet(int y) const { return m_displayPackets[y]; } + virtual QByteArray packet(int y, int d) const { return m_designationPackets[y-26][d]; } + virtual bool setPacket(int y, QByteArray pkt); virtual bool setPacket(int y, int d, QByteArray pkt); -// bool clearPacket(int y); -// bool clearPacket(int y, int d); -// void clearAllPackets(); + virtual bool packetExists(int y) const { return !m_displayPackets[y].isEmpty(); } + virtual bool packetExists(int y, int d) const { return !m_designationPackets[y-26][d].isEmpty(); } + bool clearPacket(int y); + bool clearPacket(int y, int d); + void clearAllPackets(); virtual bool controlBit(int b) const { return m_controlBits[b]; } virtual bool setControlBit(int b, bool active); private: bool m_controlBits[11]; - QByteArray *m_displayPackets[26], *m_designationPackets[3][16]; + QByteArray m_displayPackets[26], m_designationPackets[3][16]; }; #endif