/* * Copyright (C) 2021-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include #include template concept Trivial = std::is_trivial_v; template concept TriviallyCopyable = std::is_trivially_copyable_v; template To read_unaligned(const void* src) { To dst; std::memcpy(&dst, src, sizeof(To)); return dst; } template void write_unaligned(void* dst, const From& src) { std::memcpy(dst, &src, sizeof(From)); } template std::byte* write_unaligned(std::byte* dst, const From& src) { std::memcpy(dst, &src, sizeof(From)); return dst + sizeof(From); } std::span object_representation(const TriviallyCopyable auto& x) { return {reinterpret_cast(&x), sizeof(x)}; }