33 #include <type_traits> 41 #define MONERO_FIELD(obj, field) \ 42 obj , decltype(std::declval<obj>().field) , offsetof(obj, field) 45 #define MONERO_SORT_BY(obj, field) \ 47 lmdb::native_type<decltype(std::declval<obj>().field)>, \ 48 offsetof(obj, field) \ 52 #define MONERO_COMPARE(obj, field) \ 54 decltype(std::declval<obj>().field), \ 55 offsetof(obj, field) \ 92 static_assert(!std::is_rvalue_reference<T&&>(),
"cannot use temporary value");
93 void const*
const temp =
reinterpret_cast<void const*
>(std::addressof(
value));
111 template<
typename T, std::
size_t offset = 0>
114 static_assert(std::is_trivially_copyable<T>(),
"memcpy will not work");
115 if (!left || !right || left->mv_size <
sizeof(
T) + offset || right->mv_size <
sizeof(
T) + offset)
117 assert(
"invalid use of custom comparison" == 0);
123 std::memcpy(std::addressof(left_val), static_cast<char*>(left->mv_data) + offset,
sizeof(
T));
124 std::memcpy(std::addressof(right_val), static_cast<char*>(right->mv_data) + offset,
sizeof(
T));
125 return left_val < right_val ? -1 :
bool(right_val < left_val);
136 template<
typename T, std::
size_t offset = 0>
139 static_assert(std::is_standard_layout<T>() &&
alignof(
T) == 1,
"memcmp will not work");
140 if (!left || !right || left->mv_size <
sizeof(
T) + offset || right->mv_size <
sizeof(
T) + offset)
142 assert(
"invalid use of custom comparison" == 0);
146 static_cast<char*>(left->mv_data) + offset,
147 static_cast<char*>(right->mv_data) + offset,
const uint32_t T[512]
Definition: groestl_tables.h:36
Lightning memory-mapped database library.
int type
Definition: superscalar.cpp:50
unsigned char uint8_t
Definition: stdint.h:124
int compare(MDB_val const *left, MDB_val const *right) noexcept
Definition: util.h:137
int less(MDB_val const *left, MDB_val const *right) noexcept
Definition: util.h:112
Prevent instantiation of std::underlying_type<T> when T is not enum.
Definition: util.h:62
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1225
void * memcpy(void *a, const void *b, size_t c)
Definition: glibc_compat.cpp:16
Definition: database.cpp:45
int bool
Definition: stdbool.h:35
MDB_val to_val(T &&value) noexcept
Definition: util.h:89
constexpr U to_native(T value) noexcept
Definition: util.h:82
typename std::conditional< std::is_enum< T >::value, std::underlying_type< T >, identity< T > >::type::type native_type
Definition: util.h:78
T type
Definition: util.h:64
constexpr epee::span< const std::uint8_t > to_byte_span(MDB_val value) noexcept
Definition: util.h:98
#define const
Definition: ipfrdr.c:80
Generic structure used for passing keys and data in and out of the database.
Definition: lmdb.h:286