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 <cstdint>
5#include <cstring>
6
7namespace vbvx {
8
9template <typename _Tp>
10concept WireHeader = std::is_trivially_copyable_v<_Tp> &&
11 std::is_standard_layout_v<_Tp> && (alignof(_Tp) == 1);
12
27template <WireHeader H> class HeaderView {
28 using header_t = H;
29
30public:
31 constexpr HeaderView() noexcept = default;
32 constexpr explicit HeaderView(const header_t* p) noexcept : p_{p} {}
33
34 constexpr explicit HeaderView(const uint8_t* p) noexcept
35 : p_{reinterpret_cast<const header_t*>(p)} {}
36
37 constexpr explicit operator bool() const noexcept { return p_ != nullptr; }
38 constexpr auto get() const noexcept -> const header_t* { return p_; }
39
40 constexpr auto operator->() const noexcept -> const header_t* { return p_; }
41 constexpr auto operator*() const noexcept -> const header_t& { return *p_; }
42
43 constexpr auto copy() const noexcept -> header_t {
44 header_t out{};
45 if (p_) {
46 std::memcpy(&out, p_, sizeof(header_t));
47 }
48 return out;
49 }
50
51private:
52 const header_t* p_{};
53};
54
55} // namespace vbvx
constexpr HeaderView() noexcept=default
constexpr auto operator->() const noexcept -> const header_t *
Definition header_view.hxx:40
constexpr auto get() const noexcept -> const header_t *
Definition header_view.hxx:38
constexpr auto copy() const noexcept -> header_t
Definition header_view.hxx:43
constexpr auto operator*() const noexcept -> const header_t &
Definition header_view.hxx:41
constexpr HeaderView(const uint8_t *p) noexcept
Definition header_view.hxx:34
Definition header_view.hxx:10
Definition arp.hxx:11