GNU Octave 7.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
History.h
Go to the documentation of this file.
1/*
2 This file is part of Konsole, an X terminal.
3 Copyright (C) 1997-1998, 2013 by Lars Doelle <lars.doelle@on-line.de>
4
5 Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
6
7 This program is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301 USA.
21*/
22
23#ifndef HISTORY_H
24#define HISTORY_H
25
26// Qt
27#include <QtCore/QBitRef>
28#include <QtCore/QHash>
29#include <QtCore>
30
31// Konsole
32#include "unix/BlockArray.h"
33#include "unix/Character.h"
34
35
37{
38public:
40 virtual ~HistoryFile();
41
42 virtual void add(const unsigned char* bytes, int len);
43 virtual void get(unsigned char* bytes, int len, int loc);
44 virtual int len();
45
46 //mmaps the file in read-only mode
47 void map();
48 //un-mmaps the file
49 void unmap();
50 //returns true if the file is mmap'ed
51 bool isMapped();
52
53
54private:
55 int ion;
56 int length;
57 QTemporaryFile tmpFile;
58
59 //pointer to start of mmap'ed file data, or 0 if the file is not mmap'ed
60 char* fileMap;
61
62 //incremented whenver 'add' is called and decremented whenever
63 //'get' is called.
64 //this is used to detect when a large number of lines are being read and processed from the history
65 //and automatically mmap the file for better performance (saves the overhead of many lseek-read calls).
67
68 //when readWriteBalance goes below this threshold, the file will be mmap'ed automatically
69 static const int MAP_THRESHOLD = -1000;
70};
71
72//////////////////////////////////////////////////////////////////////
73
74//////////////////////////////////////////////////////////////////////
75// Abstract base class for file and buffer versions
76//////////////////////////////////////////////////////////////////////
77class HistoryType;
78
80{
81public:
83 virtual ~HistoryScroll();
84
85 virtual bool hasScroll();
86
87 // access to history
88 virtual int getLines() = 0;
89 virtual int getLineLen(int lineno) = 0;
90 virtual void getCells(int lineno, int colno, int count, Character res[]) = 0;
91 virtual bool isWrappedLine(int lineno) = 0;
92
93 // backward compatibility (obsolete)
94 Character getCell(int lineno, int colno) { Character res; getCells(lineno,colno,1,&res); return res; }
95
96 // adding lines.
97 virtual void addCells(const Character a[], int count) = 0;
98 // convenience method - this is virtual so that subclasses can take advantage
99 // of QVector's implicit copying
100 virtual void addCellsVector(const QVector<Character>& cells)
101 {
102 addCells(cells.data(),cells.size());
103 }
104
105 virtual void addLine(bool previousWrapped=false) = 0;
106
107 //
108 // FIXME: Passing around constant references to HistoryType instances
109 // is very unsafe, because those references will no longer
110 // be valid if the history scroll is deleted.
111 //
112 const HistoryType& getType() { return *m_histType; }
113
114protected:
116
117};
118
119
120//////////////////////////////////////////////////////////////////////
121// File-based history (e.g. file log, no limitation in length)
122//////////////////////////////////////////////////////////////////////
123
125{
126public:
127 HistoryScrollFile(const QString &logFileName);
128 virtual ~HistoryScrollFile();
129
130 virtual int getLines();
131 virtual int getLineLen(int lineno);
132 virtual void getCells(int lineno, int colno, int count, Character res[]);
133 virtual bool isWrappedLine(int lineno);
134
135 virtual void addCells(const Character a[], int count);
136 virtual void addLine(bool previousWrapped=false);
137
138private:
139 int startOfLine(int lineno);
140
142 HistoryFile index; // lines Row(int)
143 HistoryFile cells; // text Row(Character)
144 HistoryFile lineflags; // flags Row(unsigned char)
145};
146
147
148//////////////////////////////////////////////////////////////////////
149// Buffer-based history (limited to a fixed nb of lines)
150//////////////////////////////////////////////////////////////////////
152{
153public:
154 typedef QVector<Character> HistoryLine;
155
156 HistoryScrollBuffer(unsigned int maxNbLines = 1000);
157 virtual ~HistoryScrollBuffer();
158
159 virtual int getLines();
160 virtual int getLineLen(int lineno);
161 virtual void getCells(int lineno, int colno, int count, Character res[]);
162 virtual bool isWrappedLine(int lineno);
163
164 virtual void addCells(const Character a[], int count);
165 virtual void addCellsVector(const QVector<Character>& cells);
166 virtual void addLine(bool previousWrapped=false);
167
168 void setMaxNbLines(unsigned int nbLines);
169 unsigned int maxNbLines() { return _maxLineCount; }
170
171
172private:
173 int bufferIndex(int lineNumber);
174
176 QBitArray _wrappedLine;
179 int _head;
180
181 //QVector<histline*> m_histBuffer;
182 //QBitArray m_wrappedLine;
183 //unsigned int m_maxNbLines;
184 //unsigned int m_nbLines;
185 //unsigned int m_arrayIndex;
186 //bool m_buffFilled;
187};
188
189/*class HistoryScrollBufferV2 : public HistoryScroll
190{
191public:
192 virtual int getLines();
193 virtual int getLineLen(int lineno);
194 virtual void getCells(int lineno, int colno, int count, Character res[]);
195 virtual bool isWrappedLine(int lineno);
196
197 virtual void addCells(const Character a[], int count);
198 virtual void addCells(const QVector<Character>& cells);
199 virtual void addLine(bool previousWrapped=false);
200
201};*/
202
203
204//////////////////////////////////////////////////////////////////////
205// Nothing-based history (no history :-)
206//////////////////////////////////////////////////////////////////////
208{
209public:
211 virtual ~HistoryScrollNone();
212
213 virtual bool hasScroll();
214
215 virtual int getLines();
216 virtual int getLineLen(int lineno);
217 virtual void getCells(int lineno, int colno, int count, Character res[]);
218 virtual bool isWrappedLine(int lineno);
219
220 virtual void addCells(const Character a[], int count);
221 virtual void addLine(bool previousWrapped=false);
222};
223
224//////////////////////////////////////////////////////////////////////
225// BlockArray-based history
226//////////////////////////////////////////////////////////////////////
228{
229public:
230 HistoryScrollBlockArray(size_t size);
231 virtual ~HistoryScrollBlockArray();
232
233 virtual int getLines();
234 virtual int getLineLen(int lineno);
235 virtual void getCells(int lineno, int colno, int count, Character res[]);
236 virtual bool isWrappedLine(int lineno);
237
238 virtual void addCells(const Character a[], int count);
239 virtual void addLine(bool previousWrapped=false);
240
241protected:
243 QHash<int,size_t> m_lineLengths;
244};
245
246//////////////////////////////////////////////////////////////////////
247// History type
248//////////////////////////////////////////////////////////////////////
249
251{
252public:
253 HistoryType();
254 virtual ~HistoryType();
255
256 /**
257 * Returns true if the history is enabled ( can store lines of output )
258 * or false otherwise.
259 */
260 virtual bool isEnabled() const = 0;
261 /**
262 * Returns true if the history size is unlimited.
263 */
264 bool isUnlimited() const { return maximumLineCount() == 0; }
265 /**
266 * Returns the maximum number of lines which this history type
267 * can store or 0 if the history can store an unlimited number of lines.
268 */
269 virtual int maximumLineCount() const = 0;
270
271 virtual HistoryScroll* scroll(HistoryScroll *) const = 0;
272};
273
275{
276public:
278
279 virtual bool isEnabled() const;
280 virtual int maximumLineCount() const;
281
282 virtual HistoryScroll* scroll(HistoryScroll *) const;
283};
284
286{
287public:
288 HistoryTypeBlockArray(size_t size);
289
290 virtual bool isEnabled() const;
291 virtual int maximumLineCount() const;
292
293 virtual HistoryScroll* scroll(HistoryScroll *) const;
294
295protected:
296 size_t m_size;
297};
298
299
301{
302public:
303 HistoryTypeFile(const QString& fileName=QString());
304
305 virtual bool isEnabled() const;
306 virtual const QString& getFileName() const;
307 virtual int maximumLineCount() const;
308
309 virtual HistoryScroll* scroll(HistoryScroll *) const;
310
311protected:
312 QString m_fileName;
313};
314
315
317{
318public:
319 HistoryTypeBuffer(unsigned int nbLines);
320
321 virtual bool isEnabled() const;
322 virtual int maximumLineCount() const;
323
324 virtual HistoryScroll* scroll(HistoryScroll *) const;
325
326protected:
327 unsigned int m_nbLines;
328};
329
330#endif // HISTORY_H
#define loc(X, Y)
Definition: Screen.cpp:56
A single character in the terminal which consists of a unicode character value, foreground and backgr...
Definition: Character.h:56
void map()
Definition: History.cpp:106
QTemporaryFile tmpFile
Definition: History.h:57
int ion
Definition: History.h:55
virtual ~HistoryFile()
Definition: History.cpp:97
char * fileMap
Definition: History.h:60
static const int MAP_THRESHOLD
Definition: History.h:69
virtual void get(unsigned char *bytes, int len, int loc)
Definition: History.cpp:148
int readWriteBalance
Definition: History.h:66
bool isMapped()
Definition: History.cpp:129
virtual int len()
Definition: History.cpp:174
void unmap()
Definition: History.cpp:121
int length
Definition: History.h:56
virtual void add(const unsigned char *bytes, int len)
Definition: History.cpp:134
HistoryScrollBlockArray(size_t size)
Definition: History.cpp:459
virtual bool isWrappedLine(int lineno)
Definition: History.cpp:482
QHash< int, size_t > m_lineLengths
Definition: History.h:243
virtual int getLines()
Definition: History.cpp:469
virtual ~HistoryScrollBlockArray()
Definition: History.cpp:465
virtual void addCells(const Character a[], int count)
Definition: History.cpp:503
virtual void getCells(int lineno, int colno, int count, Character res[])
Definition: History.cpp:487
virtual int getLineLen(int lineno)
Definition: History.cpp:474
virtual void addLine(bool previousWrapped=false)
Definition: History.cpp:524
BlockArray m_blockArray
Definition: History.h:242
virtual ~HistoryScrollBuffer()
Definition: History.cpp:290
virtual bool isWrappedLine(int lineno)
Definition: History.cpp:341
HistoryLine * _historyBuffer
Definition: History.h:175
QBitArray _wrappedLine
Definition: History.h:176
virtual void getCells(int lineno, int colno, int count, Character res[])
Definition: History.cpp:354
virtual void addCells(const Character a[], int count)
Definition: History.cpp:309
HistoryScrollBuffer(unsigned int maxNbLines=1000)
Definition: History.cpp:280
virtual int getLineLen(int lineno)
Definition: History.cpp:327
void setMaxNbLines(unsigned int nbLines)
Definition: History.cpp:377
int bufferIndex(int lineNumber)
Definition: History.cpp:397
virtual int getLines()
Definition: History.cpp:322
virtual void addCellsVector(const QVector< Character > &cells)
Definition: History.cpp:295
QVector< Character > HistoryLine
Definition: History.h:154
virtual void addLine(bool previousWrapped=false)
Definition: History.cpp:317
unsigned int maxNbLines()
Definition: History.h:169
virtual bool isWrappedLine(int lineno)
Definition: History.cpp:231
virtual void addLine(bool previousWrapped=false)
Definition: History.cpp:267
virtual ~HistoryScrollFile()
Definition: History.cpp:217
QString m_logFileName
Definition: History.h:141
HistoryScrollFile(const QString &logFileName)
Definition: History.cpp:211
virtual int getLineLen(int lineno)
Definition: History.cpp:226
HistoryFile lineflags
Definition: History.h:144
virtual void addCells(const Character a[], int count)
Definition: History.cpp:262
HistoryFile index
Definition: History.h:142
virtual int getLines()
Definition: History.cpp:221
HistoryFile cells
Definition: History.h:143
virtual void getCells(int lineno, int colno, int count, Character res[])
Definition: History.cpp:257
int startOfLine(int lineno)
Definition: History.cpp:241
virtual bool hasScroll()
Definition: History.cpp:425
virtual bool isWrappedLine(int lineno)
Definition: History.cpp:440
virtual int getLineLen(int lineno)
Definition: History.cpp:435
virtual ~HistoryScrollNone()
Definition: History.cpp:421
virtual int getLines()
Definition: History.cpp:430
virtual void addCells(const Character a[], int count)
Definition: History.cpp:449
virtual void getCells(int lineno, int colno, int count, Character res[])
Definition: History.cpp:445
virtual void addLine(bool previousWrapped=false)
Definition: History.cpp:453
const HistoryType & getType()
Definition: History.h:112
virtual void addCells(const Character a[], int count)=0
virtual void addLine(bool previousWrapped=false)=0
virtual void addCellsVector(const QVector< Character > &cells)
Definition: History.h:100
virtual bool hasScroll()
Definition: History.cpp:193
virtual int getLines()=0
HistoryType * m_histType
Definition: History.h:115
virtual bool isWrappedLine(int lineno)=0
virtual ~HistoryScroll()
Definition: History.cpp:188
virtual int getLineLen(int lineno)=0
Character getCell(int lineno, int colno)
Definition: History.h:94
virtual void getCells(int lineno, int colno, int count, Character res[])=0
HistoryScroll(HistoryType *)
Definition: History.cpp:183
HistoryTypeBlockArray(size_t size)
Definition: History.cpp:564
virtual bool isEnabled() const
Returns true if the history is enabled ( can store lines of output ) or false otherwise.
Definition: History.cpp:569
virtual HistoryScroll * scroll(HistoryScroll *) const
Definition: History.cpp:579
virtual int maximumLineCount() const
Returns the maximum number of lines which this history type can store or 0 if the history can store a...
Definition: History.cpp:574
virtual int maximumLineCount() const
Returns the maximum number of lines which this history type can store or 0 if the history can store a...
Definition: History.cpp:598
HistoryTypeBuffer(unsigned int nbLines)
Definition: History.cpp:588
virtual bool isEnabled() const
Returns true if the history is enabled ( can store lines of output ) or false otherwise.
Definition: History.cpp:593
virtual HistoryScroll * scroll(HistoryScroll *) const
Definition: History.cpp:603
unsigned int m_nbLines
Definition: History.h:327
virtual HistoryScroll * scroll(HistoryScroll *) const
Definition: History.cpp:662
virtual const QString & getFileName() const
Definition: History.cpp:657
virtual bool isEnabled() const
Returns true if the history is enabled ( can store lines of output ) or false otherwise.
Definition: History.cpp:652
virtual int maximumLineCount() const
Returns the maximum number of lines which this history type can store or 0 if the history can store a...
Definition: History.cpp:694
QString m_fileName
Definition: History.h:312
HistoryTypeFile(const QString &fileName=QString())
Definition: History.cpp:647
virtual bool isEnabled() const
Returns true if the history is enabled ( can store lines of output ) or false otherwise.
Definition: History.cpp:546
virtual HistoryScroll * scroll(HistoryScroll *) const
Definition: History.cpp:551
virtual int maximumLineCount() const
Returns the maximum number of lines which this history type can store or 0 if the history can store a...
Definition: History.cpp:557
virtual bool isEnabled() const =0
Returns true if the history is enabled ( can store lines of output ) or false otherwise.
virtual HistoryScroll * scroll(HistoryScroll *) const =0
virtual ~HistoryType()
Definition: History.cpp:536
virtual int maximumLineCount() const =0
Returns the maximum number of lines which this history type can store or 0 if the history can store a...
bool isUnlimited() const
Returns true if the history size is unlimited.
Definition: History.h:264