Commit d490ae15 authored by Gustavo Carneiro's avatar Gustavo Carneiro
Browse files

Move CompactHistoryBlockList Class to a new file.

parent 940ceebd
......@@ -70,6 +70,7 @@ set(konsoleprivate_SRCS ${sessionadaptors_SRCS}
HistoryScrollNone.cpp
CharacterFormat.cpp
CompactHistoryBlock.cpp
CompactHistoryBlockList.cpp
HistorySizeDialog.cpp
widgets/HistorySizeWidget.cpp
widgets/IncrementalSearchBar.cpp
......
/*
This file is part of Konsole, an X terminal.
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
// Own
#include "CompactHistoryBlockList.h"
// Qt
#include <QList>
using namespace Konsole;
CompactHistoryBlockList::CompactHistoryBlockList()
: list(QList<CompactHistoryBlock *>())
{
}
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();
}
return block->allocate(size);
}
void CompactHistoryBlockList::deallocate(void *ptr)
{
Q_ASSERT(!list.isEmpty());
int i = 0;
CompactHistoryBlock *block = list.at(i);
while (i < list.size() && !block->contains(ptr)) {
i++;
block = list.at(i);
}
Q_ASSERT(i < list.size());
block->deallocate();
if (!block->isInUse()) {
list.removeAt(i);
delete block;
////qDebug() << "block deleted, new size = " << list.size();
}
}
int CompactHistoryBlockList::length()
{
return list.size();
}
CompactHistoryBlockList::~CompactHistoryBlockList()
{
qDeleteAll(list.begin(), list.end());
list.clear();
}
/*
This file is part of Konsole, an X terminal.
Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
#ifndef COMPACTHISTORYBLOCKLIST_H
#define COMPACTHISTORYBLOCKLIST_H
#include <QList>
#include "CompactHistoryBlock.h"
namespace Konsole
{
class CompactHistoryBlockList
{
public:
CompactHistoryBlockList();
~CompactHistoryBlockList();
void *allocate(size_t size);
void deallocate(void *);
int length();
private:
QList<CompactHistoryBlock *> list;
};
}
#endif
......@@ -60,48 +60,6 @@ using namespace Konsole;
at constant costs.
*/
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();
}
return block->allocate(size);
}
void CompactHistoryBlockList::deallocate(void *ptr)
{
Q_ASSERT(!list.isEmpty());
int i = 0;
CompactHistoryBlock *block = list.at(i);
while (i < list.size() && !block->contains(ptr)) {
i++;
block = list.at(i);
}
Q_ASSERT(i < list.size());
block->deallocate();
if (!block->isInUse()) {
list.removeAt(i);
delete block;
////qDebug() << "block deleted, new size = " << list.size();
}
}
CompactHistoryBlockList::~CompactHistoryBlockList()
{
qDeleteAll(list.begin(), list.end());
list.clear();
}
void *CompactHistoryLine::operator new(size_t size, CompactHistoryBlockList &blockList)
{
return blockList.allocate(size);
......
......@@ -38,6 +38,7 @@
#include "HistoryScrollNone.h"
#include "CharacterFormat.h"
#include "CompactHistoryBlock.h"
#include "CompactHistoryBlockList.h"
// Konsole
#include "Character.h"
......@@ -51,27 +52,6 @@ namespace Konsole {
//////////////////////////////////////////////////////////////////////
typedef QVector<Character> TextLine;
class CompactHistoryBlockList
{
public:
CompactHistoryBlockList() :
list(QList<CompactHistoryBlock *>())
{
}
~CompactHistoryBlockList();
void *allocate(size_t size);
void deallocate(void *);
int length()
{
return list.size();
}
private:
QList<CompactHistoryBlock *> list;
};
class CompactHistoryLine
{
public:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment