20 using Slot = std::conditional_t<std::same_as<T, bool>,
BoolSlot, T>;
21 static_assert(
sizeof(Slot) ==
sizeof(T));
23 std::vector<Slot> values;
24 Chunk* next =
nullptr;
27 Chunk* head =
nullptr;
28 Chunk* tail =
nullptr;
30 PayloadChunks() noexcept = default;
31 PayloadChunks(const PayloadChunks&) = delete;
32 PayloadChunks& operator=(const PayloadChunks&) = delete;
33 PayloadChunks(PayloadChunks&& other) noexcept
34 : head(std::exchange(other.head,
nullptr)),
35 tail(std::exchange(other.tail,
nullptr)) {}
39 head = std::exchange(other.head,
nullptr);
40 tail = std::exchange(other.tail,
nullptr);
44 ~PayloadChunks() { clear(); }
46 void clear() noexcept {
48 auto* next = head->next;
54 void append(
Chunk* chunk)
noexcept {
62 void splice(PayloadChunks& donor)
noexcept {
67 tail->next = donor.head;
72 donor.head = donor.tail =
nullptr;