diff --git a/src/history/compact/CompactHistoryBlockList.cpp b/src/history/compact/CompactHistoryBlockList.cpp index 28801b26..47dd8fb4 100644 --- a/src/history/compact/CompactHistoryBlockList.cpp +++ b/src/history/compact/CompactHistoryBlockList.cpp @@ -12,53 +12,44 @@ using namespace Konsole; CompactHistoryBlockList::CompactHistoryBlockList() - : list(QList()) + : _blocks() { } void *CompactHistoryBlockList::allocate(size_t size) { - CompactHistoryBlock *block; - if (list.isEmpty() || list.last()->remaining() < size) { - block = new CompactHistoryBlock(); - list.append(block); - ////qDebug() << "new block created, remaining " << block->remaining() << "number of blocks=" << list.size(); - } else { - block = list.last(); - ////qDebug() << "old block used, remaining " << block->remaining(); + if (_blocks.empty() || _blocks.back()->remaining() < size) { + _blocks.push_back(std::make_unique()); + ////qDebug() << "new block created, remaining " << block->remaining() << "number of blocks=" << _blocks.size(); } - return block->allocate(size); + return _blocks.back()->allocate(size); } void CompactHistoryBlockList::deallocate(void *ptr) { - Q_ASSERT(!list.isEmpty()); + Q_ASSERT(!_blocks.empty()); - int i = 0; - CompactHistoryBlock *block = list.at(i); - while (i < list.size() && !block->contains(ptr)) { - i++; - block = list.at(i); + auto block = _blocks.begin(); + while (block != _blocks.end() && !(*block)->contains(ptr)) { + block++; } - Q_ASSERT(i < list.size()); + Q_ASSERT(block != _blocks.end()); - block->deallocate(); + (*block)->deallocate(); - if (!block->isInUse()) { - list.removeAt(i); - delete block; + if (!(*block)->isInUse()) { + _blocks.erase(block); ////qDebug() << "block deleted, new size = " << list.size(); } } int CompactHistoryBlockList::length() { - return list.size(); + return _blocks.size(); } CompactHistoryBlockList::~CompactHistoryBlockList() { - qDeleteAll(list.begin(), list.end()); - list.clear(); + _blocks.clear(); } diff --git a/src/history/compact/CompactHistoryBlockList.h b/src/history/compact/CompactHistoryBlockList.h index d093f04f..0a3fbb7f 100644 --- a/src/history/compact/CompactHistoryBlockList.h +++ b/src/history/compact/CompactHistoryBlockList.h @@ -7,7 +7,9 @@ #ifndef COMPACTHISTORYBLOCKLIST_H #define COMPACTHISTORYBLOCKLIST_H -#include +#include +#include + #include "CompactHistoryBlock.h" namespace Konsole @@ -24,7 +26,7 @@ public: int length(); private: - QList list; + std::vector> _blocks; }; }