aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLee Clagett <code@leeclagett.com>2024-10-09 16:34:25 -0400
committerLee *!* Clagett <code@leeclagett.com>2024-10-09 16:48:34 -0400
commit8b29ae48859231fed62ea90c2782740b4e22d4b8 (patch)
tree6502fff46aa1324ab43033f2ee2289a9a9645101 /src
parent83dd5152e6d115426afbb57a94a832ec91b58a46 (diff)
downloadmonzero-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.h1
-rw-r--r--src/lmdb/table.h2
-rw-r--r--src/lmdb/util.h1
-rw-r--r--src/lmdb/value_stream.h4
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());