26 template<
typename K,
typename V>
35 return flags | ((
flags & MDB_DUPSORT) ? MDB_DUPFIXED : 0);
54 template<
typename U,
typename F = U, std::
size_t offset = 0>
57 static_assert(std::is_same<U, V>(),
"bad ELECTRONEUM_FIELD?");
58 static_assert(std::is_pod<F>(),
"F must be POD");
59 static_assert(
sizeof(
F) + offset <=
sizeof(U),
"bad field type and/or offset");
61 if (value.mv_size !=
sizeof(U))
65 std::memcpy(std::addressof(out),
static_cast<char*
>(value.mv_data) + offset,
sizeof(out));
84 const int err = mdb_cursor_get(cur.get(), &key, &value, MDB_FIRST);
87 if (err != MDB_NOTFOUND)
109 const int err = mdb_cursor_get(cur.get(), &key_bytes, &value, MDB_SET);
112 if (err != MDB_NOTFOUND)
Definition: key_stream.h:189
Definition: value_stream.h:187
#define ELECTRONEUM_PRECOND(...)
If precondition fails, return ::error::kInvalidArgument in current scope.
Definition: expect.h:39
void * memcpy(void *a, const void *b, size_t c)
Definition: glibc_compat.cpp:16
Definition: database.cpp:46
std::unique_ptr< MDB_txn, abort_write_txn > write_txn
Definition: transaction.h:94
MDB_val to_val(T &&value) noexcept
Definition: util.h:88
error
Tracks LMDB error codes.
Definition: error.h:45
#define F(w, k)
Definition: sha512-blocks.c:61
Helper for grouping typical LMDB DBI options when key and value are fixed types.
Definition: table.h:28
V value_type
Definition: table.h:30
K key_type
Definition: table.h:29
constexpr basic_table(const char *name, unsigned flags=0, MDB_cmp_func value_cmp=nullptr) noexcept
Definition: table.h:38
static expect< value_stream< V, D > > get_value_stream(K const &key, std::unique_ptr< MDB_cursor, D > cur) noexcept
Definition: table.h:103
static expect< key_stream< K, V, D > > get_key_stream(std::unique_ptr< MDB_cursor, D > cur) noexcept
Definition: table.h:78
static constexpr unsigned compute_flags(const unsigned flags) noexcept
Definition: table.h:33
static expect< F > get_value(MDB_val value) noexcept
Definition: table.h:55
Helper for grouping typical LMDB DBI options.
Definition: table.h:15
expect< MDB_dbi > open(MDB_txn &write_txn) const noexcept
Definition: table.cpp:31
const unsigned flags
Definition: table.h:17
MDB_cmp_func *const value_cmp
Definition: table.h:19
char const *const name
Definition: table.h:16
MDB_cmp_func *const key_cmp
Definition: table.h:18