Back to Site
Loading...
Searching...
No Matches
bytes.h
Go to the documentation of this file.
1#pragma once
2
17#include <cstdint>
18#include <cstddef>
19#include <vector>
20#include <string>
21
22namespace librats {
23
24using Bytes = std::vector<uint8_t>;
25
27class ByteView {
28public:
29 constexpr ByteView() = default;
30 constexpr ByteView(const uint8_t* data, size_t size) : data_(data), size_(size) {}
31 ByteView(const Bytes& b) : data_(b.data()), size_(b.size()) {}
32 ByteView(const std::string& s)
33 : data_(reinterpret_cast<const uint8_t*>(s.data())), size_(s.size()) {}
34
35 const uint8_t* data() const noexcept { return data_; }
36 size_t size() const noexcept { return size_; }
37 bool empty() const noexcept { return size_ == 0; }
38
39 const uint8_t* begin() const noexcept { return data_; }
40 const uint8_t* end() const noexcept { return data_ + size_; }
41
42 Bytes to_bytes() const { return Bytes(data_, data_ + size_); }
43
44private:
45 const uint8_t* data_ = nullptr;
46 size_t size_ = 0;
47};
48
50class ByteSpan {
51public:
52 constexpr ByteSpan() = default;
53 constexpr ByteSpan(uint8_t* data, size_t size) : data_(data), size_(size) {}
54
55 uint8_t* data() const noexcept { return data_; }
56 size_t size() const noexcept { return size_; }
57 bool empty() const noexcept { return size_ == 0; }
58
59 uint8_t* begin() const noexcept { return data_; }
60 uint8_t* end() const noexcept { return data_ + size_; }
61
62 operator ByteView() const noexcept { return ByteView(data_, size_); }
63
64private:
65 uint8_t* data_ = nullptr;
66 size_t size_ = 0;
67};
68
69} // namespace librats
Non-owning view over a contiguous run of writable bytes.
Definition bytes.h:50
uint8_t * end() const noexcept
Definition bytes.h:60
uint8_t * data() const noexcept
Definition bytes.h:55
constexpr ByteSpan()=default
bool empty() const noexcept
Definition bytes.h:57
constexpr ByteSpan(uint8_t *data, size_t size)
Definition bytes.h:53
uint8_t * begin() const noexcept
Definition bytes.h:59
size_t size() const noexcept
Definition bytes.h:56
Non-owning view over a contiguous run of bytes.
Definition bytes.h:27
ByteView(const std::string &s)
Definition bytes.h:32
ByteView(const Bytes &b)
Definition bytes.h:31
bool empty() const noexcept
Definition bytes.h:37
Bytes to_bytes() const
Definition bytes.h:42
const uint8_t * begin() const noexcept
Definition bytes.h:39
size_t size() const noexcept
Definition bytes.h:36
const uint8_t * end() const noexcept
Definition bytes.h:40
constexpr ByteView()=default
const uint8_t * data() const noexcept
Definition bytes.h:35
constexpr ByteView(const uint8_t *data, size_t size)
Definition bytes.h:30
Definition node.h:73
std::vector< uint8_t > Bytes
Definition bytes.h:24