1#ifndef LIBFILEZILLA_BUFFER_HEADER
2#define LIBFILEZILLA_BUFFER_HEADER
26class FZ_PUBLIC_SYMBOL buffer final
29 typedef unsigned char value_type;
31 buffer()
noexcept =
default;
36 buffer(buffer
const& buf);
37 buffer(buffer && buf)
noexcept;
39 ~buffer() {
delete[] data_; }
45 unsigned char const*
get()
const {
return pos_; }
46 unsigned char* get() {
return pos_; }
49 unsigned char*
data() {
return pos_; }
50 unsigned char const* data()
const {
return pos_; }
70 unsigned char*
get(
size_t write_size);
73 void add(
size_t added);
81 template<
typename T, std::enable_if_t<std::is_
signed_v<T>,
int> = 0>
84 add(
static_cast<size_t>(added));
94 size_t size()
const {
return size_; }
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);
110 void append(
unsigned char v);
111 void append(
size_t len,
unsigned char c);
113 buffer& operator+=(
unsigned char v) {
117 buffer& operator+=(std::string_view
const& str) {
121 buffer& operator+=(std::vector<uint8_t>
const& data) {
125 buffer& operator+=(fz::buffer
const& b) {
130 bool empty()
const {
return size_ == 0; }
131 explicit operator bool()
const {
135 size_t capacity()
const {
return capacity_; }
136 void reserve(
size_t capacity);
138 void resize(
size_t size);
142 unsigned char & operator[](
size_t i) {
return pos_[i]; }
144 bool operator==(buffer
const& rhs)
const;
146 bool operator!=(buffer
const& rhs)
const {
147 return !(*
this == rhs);
150 std::string_view to_view()
const;
162 unsigned char* data_{};
163 unsigned char* pos_{};
168inline void FZ_PUBLIC_SYMBOL wipe(
buffer & b) {
172inline void FZ_PUBLIC_SYMBOL wipe_unused(
buffer & b) {
The buffer class is a simple buffer where data can be appended at the end and consumed at the front....
Definition buffer.hpp:27
void add(T added)
Overload of add for signed types, only adds if value is positive.
Definition buffer.hpp:82
buffer(size_t capacity)
Initially reserves the passed capacity.
unsigned char * data()
Same as get()
Definition buffer.hpp:49
void consume(size_t consumed)
Removes consumed bytes from the beginning of the buffer.
unsigned char * get(size_t write_size)
Returns a writable buffer guaranteed to be large enough for write_size bytes, call add when done.
unsigned char const * get() const
Undefined if buffer is empty.
Definition buffer.hpp:45
void append(unsigned char const *data, size_t len)
Appends the passed data to the buffer.
unsigned char operator[](size_t i) const
Gets element at offset i. Does not do bounds checking.
Definition buffer.hpp:141
void add(size_t added)
Increase size by the passed amount. Call this after having obtained a writable buffer with get(size_t...
Sets some global macros and further includes string.hpp.
The namespace used by libfilezilla.
Definition apply.hpp:17