libfilezilla
Toggle main menu visibility
Loading...
Searching...
No Matches
lib
libfilezilla
buffer.hpp
Go to the documentation of this file.
1
#ifndef LIBFILEZILLA_BUFFER_HEADER
2
#define LIBFILEZILLA_BUFFER_HEADER
3
4
#include "
libfilezilla.hpp
"
5
6
#include <vector>
7
#include <type_traits>
8
12
13
namespace
fz
{
14
26
class
FZ_PUBLIC_SYMBOL buffer final
27
{
28
public
:
29
typedef
unsigned
char
value_type;
30
31
buffer()
noexcept
=
default
;
32
34
explicit
buffer
(
size_t
capacity);
35
36
buffer(buffer
const
& buf);
37
buffer(buffer && buf)
noexcept
;
38
39
~buffer() {
delete
[] data_; }
40
41
buffer
& operator=(
buffer
const
& buf);
42
buffer
& operator=(
buffer
&& buf)
noexcept
;
43
45
unsigned
char
const
*
get
()
const
{
return
pos_; }
46
unsigned
char
* get() {
return
pos_; }
47
49
unsigned
char
*
data
() {
return
pos_; }
50
unsigned
char
const
* data()
const
{
return
pos_; }
51
70
unsigned
char
*
get
(
size_t
write_size);
71
73
void
add
(
size_t
added);
74
81
template
<
typename
T, std::enable_if_t<std::is_
signed
_v<T>,
int
> = 0>
82
void
add
(T added) {
83
if
(added > 0) {
84
add
(
static_cast<
size_t
>
(added));
85
}
86
}
87
92
void
consume
(
size_t
consumed);
93
94
size_t
size()
const
{
return
size_; }
95
99
void
clear
();
100
105
void
append
(
unsigned
char
const
*
data
,
size_t
len);
106
void
append
(std::string_view
const
& str);
107
void
append
(std::basic_string_view<uint8_t>
const
&
data
);
108
void
append
(std::vector<uint8_t>
const
&
data
);
109
void
append
(
fz::buffer
const
& b);
110
void
append
(
unsigned
char
v);
111
void
append
(
size_t
len,
unsigned
char
c);
112
113
buffer& operator+=(
unsigned
char
v) {
114
append
(v);
115
return
*
this
;
116
}
117
buffer
& operator+=(std::string_view
const
& str) {
118
append(str);
119
return
*
this
;
120
}
121
buffer& operator+=(std::vector<uint8_t>
const
& data) {
122
append(data);
123
return
*
this
;
124
}
125
buffer& operator+=(fz::buffer
const
& b) {
126
append(b);
127
return
*
this
;
128
}
129
130
bool
empty()
const
{
return
size_ == 0; }
131
explicit
operator
bool()
const
{
132
return
size_ != 0;
133
}
134
135
size_t
capacity()
const
{
return
capacity_; }
136
void
reserve(
size_t
capacity);
137
138
void
resize(
size_t
size);
139
141
unsigned
char
operator[]
(
size_t
i)
const
{
return
pos_[i]; }
142
unsigned
char
& operator[](
size_t
i) {
return
pos_[i]; }
143
144
bool
operator==(buffer
const
& rhs)
const
;
145
146
bool
operator!=(buffer
const
& rhs)
const
{
147
return
!(*
this
== rhs);
148
}
149
150
std::string_view to_view()
const
;
151
152
void
wipe();
153
void
wipe_unused();
154
155
private
:
156
157
// Invariants:
158
// size_ <= capacity_
159
// data_ <= pos_
160
// pos_ <= data_ + capacity_
161
// pos_ + size_ <= data_ + capacity_
162
unsigned
char
* data_{};
163
unsigned
char
* pos_{};
164
size_t
size_{};
165
size_t
capacity_{};
166
};
167
168
inline
void
FZ_PUBLIC_SYMBOL wipe(
buffer
& b) {
169
b.wipe();
170
}
171
172
inline
void
FZ_PUBLIC_SYMBOL wipe_unused(
buffer
& b) {
173
b.wipe_unused();
174
}
175
176
}
177
178
#endif
fz::buffer
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition
buffer.hpp:27
fz::buffer::add
void add(T added)
Overload of add for signed types, only adds if value is positive.
Definition
buffer.hpp:82
fz::buffer::buffer
buffer(size_t capacity)
Initially reserves the passed capacity.
fz::buffer::data
unsigned char * data()
Same as get().
Definition
buffer.hpp:49
fz::buffer::consume
void consume(size_t consumed)
Removes consumed bytes from the beginning of the buffer.
fz::buffer::get
unsigned char * get(size_t write_size)
Returns a writable buffer guaranteed to be large enough for write_size bytes, call add when done.
fz::buffer::get
unsigned char const * get() const
Undefined if buffer is empty.
Definition
buffer.hpp:45
fz::buffer::clear
void clear()
fz::buffer::append
void append(unsigned char const *data, size_t len)
Appends the passed data to the buffer.
fz::buffer::operator[]
unsigned char operator[](size_t i) const
Gets element at offset i. Does not do bounds checking.
Definition
buffer.hpp:141
fz::buffer::add
void add(size_t added)
Increase size by the passed amount. Call this after having obtained a writable buffer with get(size_t...
libfilezilla.hpp
Sets some global macros and further includes string.hpp.
fz
The namespace used by libfilezilla.
Definition
apply.hpp:17
Generated by
1.17.0