source: ogBrowser-Git/qtermwidget/lib/BlockArray.h

jenkins
Last change on this file was 64efc22, checked in by Vadim Troshchinskiy <vtroshchinskiy@…>, 19 months ago

Update qtermwidget to modern version

  • Property mode set to 100644
File size: 3.1 KB
Line 
1/*
2    This file is part of Konsole, an X terminal.
3    Copyright (C) 2000 by Stephan Kulow <coolo@kde.org>
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 BLOCKARRAY_H
24#define BLOCKARRAY_H
25
26#include <unistd.h>
27
28//#error Do not use in KDE 2.1
29
30#define QTERMWIDGET_BLOCKSIZE (1 << 12)
31#define ENTRIES   ((QTERMWIDGET_BLOCKSIZE - sizeof(size_t) ) / sizeof(unsigned char))
32
33namespace Konsole {
34
35struct Block {
36    Block() {
37        size = 0;
38    }
39    unsigned char data[ENTRIES];
40    size_t size;
41};
42
43// ///////////////////////////////////////////////////////
44
45class BlockArray {
46public:
47    /**
48    * Creates a history file for holding
49    * maximal size blocks. If more blocks
50    * are requested, then it drops earlier
51    * added ones.
52    */
53    BlockArray();
54
55    /// destructor
56    ~BlockArray();
57
58    /**
59    * adds the Block at the end of history.
60    * This may drop other blocks.
61    *
62    * The ownership on the block is transferred.
63    * An unique index number is returned for accessing
64    * it later (if not yet dropped then)
65    *
66    * Note, that the block may be dropped completely
67    * if history is turned off.
68    */
69    size_t append(Block * block);
70
71    /**
72    * gets the block at the index. Function may return
73    * 0 if the block isn't available any more.
74    *
75    * The returned block is strictly readonly as only
76    * mapped in memory - and will be invalid on the next
77    * operation on this class.
78    */
79    const Block * at(size_t index);
80
81    /**
82    * reorders blocks as needed. If newsize is null,
83    * the history is emptied completely. The indices
84    * returned on append won't change their semantic,
85    * but they may not be valid after this call.
86    */
87    bool setHistorySize(size_t newsize);
88
89    size_t newBlock();
90
91    Block * lastBlock() const;
92
93    /**
94    * Convenient function to set the size in KBytes
95    * instead of blocks
96    */
97    bool setSize(size_t newsize);
98
99    size_t len() const {
100        return length;
101    }
102
103    bool has(size_t index) const;
104
105    size_t getCurrent() const {
106        return current;
107    }
108
109private:
110    void unmap();
111    void increaseBuffer();
112    void decreaseBuffer(size_t newsize);
113
114    size_t size;
115    // current always shows to the last inserted block
116    size_t current;
117    size_t index;
118
119    Block * lastmap;
120    size_t lastmap_index;
121    Block * lastblock;
122
123    int ion;
124    size_t length;
125
126};
127
128}
129
130#endif
Note: See TracBrowser for help on using the repository browser.