30#include <boost/range/iterator_range.hpp>
64 std::pair<epee::span<const std::uint8_t>, epee::span<const std::uint8_t>>
82 template<
typename T,
typename F = T, std::
size_t offset = 0>
90 values.remove_prefix(
sizeof(
T));
130 (
values.empty() && rhs.values.empty()) ||
131 values.data() == rhs.values.data();
161 template<
typename U,
typename G = U, std::
size_t uoffset = 0>
164 static_assert(std::is_same<U, T>(),
"bad MONERO_FIELD usage?");
165 static_assert(std::is_trivially_copyable<U>(),
"value type must be memcpy safe");
166 static_assert(std::is_trivially_copyable<G>(),
"field type must be memcpy safe");
167 static_assert(
sizeof(
G) + uoffset <=
sizeof(U),
"bad field and/or offset");
168 assert(
sizeof(
G) + uoffset <=
values.size());
186 template<
typename T,
typename D>
189 std::unique_ptr<MDB_cursor, D>
cur;
211 return {std::move(
cur)};
249 template<
typename U = T,
typename F = U, std::
size_t offset = 0>
252 static_assert(std::is_same<U, T>(),
"was MONERO_FIELD used with wrong type?");
267 template<
typename U = T,
typename F = U, std::
size_t offset = 0>
268 boost::iterator_range<value_iterator<U, F, offset>>
make_range()
const
274 template<
typename T,
typename F, std::
size_t offset>
278 return lhs.equal(rhs);
281 template<
typename T,
typename F, std::
size_t offset>
285 return !lhs.equal(rhs);
#define G(r, i, a, b, c, d)
Non-owning sequence of data. Does not deep copy.
Definition span.h:55
Definition value_stream.h:84
G get_value() const noexcept
Definition value_stream.h:162
value_iterator & operator++()
Invalidates all prior copies of the iterator.
Definition value_stream.h:135
value_type reference
Definition value_stream.h:97
value_iterator & operator=(value_iterator const &)=default
value_iterator(value_iterator const &)=default
value_iterator() noexcept
Construct an "end" iterator.
Definition value_stream.h:103
value_iterator(MDB_cursor *cur)
Definition value_stream.h:112
value_iterator operator++(int)
Definition value_stream.h:142
~value_iterator()=default
value_type operator*() const noexcept
Definition value_stream.h:177
void increment()
Definition value_stream.h:88
bool equal(value_iterator const &rhs) const noexcept
Definition value_stream.h:127
MDB_cursor * cur
Definition value_stream.h:85
std::size_t difference_type
Definition value_stream.h:99
epee::span< const std::uint8_t > values
Definition value_stream.h:86
bool is_end() const noexcept
Definition value_stream.h:124
void pointer
Definition value_stream.h:98
F value_type
Definition value_stream.h:96
std::input_iterator_tag iterator_category
Definition value_stream.h:100
value_stream(value_stream const &)=delete
value_stream(value_stream &&)=default
void reset()
Definition value_stream.h:221
std::size_t count() const
Definition value_stream.h:231
value_stream(std::unique_ptr< MDB_cursor, D > cur)
Take ownership of cur without changing position. nullptr valid.
Definition value_stream.h:193
std::unique_ptr< MDB_cursor, D > cur
Definition value_stream.h:189
value_stream & operator=(value_stream &&)=default
std::unique_ptr< MDB_cursor, D > give_cursor() noexcept
Definition value_stream.h:209
value_iterator< U, F, offset > make_iterator() const
Definition value_stream.h:250
value_stream & operator=(value_stream const &)=delete
boost::iterator_range< value_iterator< U, F, offset > > make_range() const
Definition value_stream.h:268
MDB_cursor_op
Cursor Get operations.
Definition lmdb.h:398
@ MDB_NEXT_DUP
Definition lmdb.h:412
@ MDB_GET_CURRENT
Definition lmdb.h:404
@ MDB_FIRST_DUP
Definition lmdb.h:400
struct MDB_cursor MDB_cursor
Opaque structure for navigating through a database.
Definition lmdb.h:273
const char * key
Definition hmac_keccak.cpp:40
#define const
Definition ipfrdr.c:80
Lightning memory-mapped database library.
size_t mdb_size_t
Definition lmdb.h:196
Definition value_stream.cpp:39
mdb_size_t count(MDB_cursor *cur)
Definition value_stream.cpp:40
std::pair< epee::span< const std::uint8_t >, epee::span< const std::uint8_t > > get(MDB_cursor &cur, MDB_cursor_op op, std::size_t key, std::size_t value)
Definition value_stream.cpp:53
Definition database.cpp:46
bool operator==(key_iterator< K, V > const &lhs, key_iterator< K, V > const &rhs) noexcept
Definition key_stream.h:254
bool operator!=(key_iterator< K, V > const &lhs, key_iterator< K, V > const &rhs) noexcept
Definition key_stream.h:261
const GenericPointer< typename T::ValueType > T2 value
Definition pointer.h:1225
#define F(w, k)
Definition sha512-blocks.c:61