GNU Octave
3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
libgui
qterminal
libqterminal
unix
BlockArray.h
Go to the documentation of this file.
1
/*
2
This file is part of Konsole, an X terminal.
3
Copyright (C) 2000, 2013 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
#define BlockSize (1 << 12)
29
#define ENTRIES ((BlockSize - sizeof(size_t) ) / sizeof(unsigned char))
30
31
struct
Block
{
32
Block
() {
size
= 0; }
33
unsigned
char
data
[
ENTRIES
];
34
size_t
size
;
35
};
36
37
// ///////////////////////////////////////////////////////
38
39
class
BlockArray
{
40
public
:
41
/**
42
* Creates a history file for holding
43
* maximal size blocks. If more blocks
44
* are requested, then it drops earlier
45
* added ones.
46
*/
47
BlockArray
();
48
49
/// destructor
50
~BlockArray
();
51
52
/**
53
* adds the Block at the end of history.
54
* This may drop other blocks.
55
*
56
* The ownership on the block is transfered.
57
* An unique index number is returned for accessing
58
* it later (if not yet dropped then)
59
*
60
* Note, that the block may be dropped completely
61
* if history is turned off.
62
*/
63
size_t
append
(
Block
*block);
64
65
/**
66
* gets the block at the index. Function may return
67
* 0 if the block isn't available any more.
68
*
69
* The returned block is strictly readonly as only
70
* maped in memory - and will be invalid on the next
71
* operation on this class.
72
*/
73
const
Block
*
at
(
size_t
index
);
74
75
/**
76
* reorders blocks as needed. If newsize is null,
77
* the history is emptied completely. The indices
78
* returned on append won't change their semantic,
79
* but they may not be valid after this call.
80
*/
81
bool
setHistorySize
(
size_t
newsize);
82
83
size_t
newBlock
();
84
85
Block
*
lastBlock
()
const
;
86
87
/**
88
* Convenient function to set the size in KBytes
89
* instead of blocks
90
*/
91
bool
setSize
(
size_t
newsize);
92
93
size_t
len
()
const
{
return
length
; }
94
95
bool
has
(
size_t
index)
const
;
96
97
size_t
getCurrent
()
const
{
return
current
; }
98
99
private
:
100
void
unmap
();
101
void
increaseBuffer
();
102
void
decreaseBuffer
(
size_t
newsize);
103
104
size_t
size
;
105
// current always shows to the last inserted block
106
size_t
current
;
107
size_t
index
;
108
109
Block
*
lastmap
;
110
size_t
lastmap_index
;
111
Block
*
lastblock
;
112
113
int
ion
;
114
size_t
length
;
115
116
};
117
118
#endif
Generated on Mon Dec 30 2013 03:04:20 for GNU Octave by
1.8.1.2