VBVX 0.1.0
Header-only C++23 library for safe, zero-copy parsing of packet buffers.
Loading...
Searching...
No Matches
header_view.hxx
Go to the documentation of this file.
1#pragma once
2
3#include <concepts>
4#include <cstring>
5
6namespace vbvx {
7
8template <typename _Tp>
9concept WireHeader = std::is_trivially_copyable_v<_Tp> &&
10 std::is_standard_layout_v<_Tp> && (alignof(_Tp) == 1);
11
19template <WireHeader H> class HeaderView {
20 using header_t = H;
21
22public:
23 constexpr HeaderView() noexcept = default;
24 constexpr explicit HeaderView(const header_t* p) noexcept : p_{p} {}
25
26 constexpr explicit HeaderView(const uint8_t* p) noexcept
27 : p_{reinterpret_cast<const header_t*>(p)} {}
28
29 constexpr explicit operator bool() const noexcept { return p_ != nullptr; }
30 constexpr auto get() const noexcept -> const header_t* { return p_; }
31
32 constexpr auto operator->() const noexcept -> const header_t* { return p_; }
33 constexpr auto operator*() const noexcept -> const header_t& { return *p_; }
34
35 constexpr auto copy() const noexcept -> header_t {
36 header_t out{};
37 if (p_) {
38 std::memcpy(&out, p_, sizeof(header_t));
39 }
40 return out;
41 }
42
43private:
44 const header_t* p_{};
45};
46
47} // namespace vbvx
constexpr HeaderView() noexcept=default
constexpr auto operator->() const noexcept -> const header_t *
Definition header_view.hxx:32
constexpr auto get() const noexcept -> const header_t *
Definition header_view.hxx:30
constexpr auto copy() const noexcept -> header_t
Definition header_view.hxx:35
constexpr auto operator*() const noexcept -> const header_t &
Definition header_view.hxx:33
constexpr HeaderView(const uint8_t *p) noexcept
Definition header_view.hxx:26
Definition header_view.hxx:9
Definition arp.hxx:11