diff options
| author | Lee Clagett <code@leeclagett.com> | 2024-10-09 16:34:25 -0400 |
|---|---|---|
| committer | Lee *!* Clagett <code@leeclagett.com> | 2024-10-09 16:48:34 -0400 |
| commit | 8b29ae48859231fed62ea90c2782740b4e22d4b8 (patch) | |
| tree | 6502fff46aa1324ab43033f2ee2289a9a9645101 /src | |
| parent | 83dd5152e6d115426afbb57a94a832ec91b58a46 (diff) | |
| download | monzero-core-8b29ae48859231fed62ea90c2782740b4e22d4b8.tar.gz monzero-core-8b29ae48859231fed62ea90c2782740b4e22d4b8.tar.xz monzero-core-8b29ae48859231fed62ea90c2782740b4e22d4b8.zip | |
Relax static_asserts in src/lmdb
Diffstat (limited to 'src')
| -rw-r--r-- | src/lmdb/key_stream.h | 1 | ||||
| -rw-r--r-- | src/lmdb/table.h | 2 | ||||
| -rw-r--r-- | src/lmdb/util.h | 1 | ||||
| -rw-r--r-- | src/lmdb/value_stream.h | 4 |
4 files changed, 5 insertions, 3 deletions
diff --git a/src/lmdb/key_stream.h b/src/lmdb/key_stream.h index 11fa284dd..74cb536e5 100644 --- a/src/lmdb/key_stream.h +++ b/src/lmdb/key_stream.h @@ -133,6 +133,7 @@ namespace lmdb //! \pre `!is_end()` \return Current key K get_key() const noexcept { + static_assert(std::is_trivially_copyable<K>(), "key is not memcpy safe"); assert(!is_end()); K out; std::memcpy(std::addressof(out), key.data(), sizeof(out)); diff --git a/src/lmdb/table.h b/src/lmdb/table.h index 4ded4ba54..48b94bc66 100644 --- a/src/lmdb/table.h +++ b/src/lmdb/table.h @@ -55,7 +55,7 @@ namespace lmdb static expect<F> get_value(MDB_val value) noexcept { static_assert(std::is_same<U, V>(), "bad MONERO_FIELD?"); - static_assert(std::is_pod<F>(), "F must be POD"); + static_assert(std::is_trivially_copyable<F>(), "F must be memcpy safe"); static_assert(sizeof(F) + offset <= sizeof(U), "bad field type and/or offset"); if (value.mv_size != sizeof(U)) diff --git a/src/lmdb/util.h b/src/lmdb/util.h index 392ff2039..038411417 100644 --- a/src/lmdb/util.h +++ b/src/lmdb/util.h @@ -111,6 +111,7 @@ namespace lmdb template<typename T, std::size_t offset = 0> inline int less(MDB_val const* left, MDB_val const* right) noexcept { + static_assert(std::is_trivially_copyable<T>(), "memcpy will not work"); if (!left || !right || left->mv_size < sizeof(T) + offset || right->mv_size < sizeof(T) + offset) { assert("invalid use of custom comparison" == 0); diff --git a/src/lmdb/value_stream.h b/src/lmdb/value_stream.h index bd2814ef4..2475ec191 100644 --- a/src/lmdb/value_stream.h +++ b/src/lmdb/value_stream.h @@ -162,8 +162,8 @@ namespace lmdb G get_value() const noexcept { static_assert(std::is_same<U, T>(), "bad MONERO_FIELD usage?"); - static_assert(std::is_pod<U>(), "value type must be pod"); - static_assert(std::is_pod<G>(), "field type must be pod"); + static_assert(std::is_trivially_copyable<U>(), "value type must be memcpy safe"); + static_assert(std::is_trivially_copyable<G>(), "field type must be memcpy safe"); static_assert(sizeof(G) + uoffset <= sizeof(U), "bad field and/or offset"); assert(sizeof(G) + uoffset <= values.size()); assert(!is_end()); |
