29 #include <boost/range/iterator_range.hpp>
46 mdb_size_t
count(MDB_cursor* cur);
63 std::pair<epee::span<const std::uint8_t>, epee::span<const std::uint8_t>>
64 get(MDB_cursor& cur, MDB_cursor_op op, std::size_t key, std::size_t value);
81 template<
typename T,
typename F = T, std::
size_t offset = 0>
85 epee::span<const std::uint8_t>
values;
89 values.remove_prefix(
sizeof(
T));
129 (
values.empty() && rhs.values.empty()) ||
130 values.data() == rhs.values.data();
160 template<
typename U,
typename G = U, std::
size_t uoffset = 0>
163 static_assert(std::is_same<U, T>(),
"bad ELECTRONEUM_FIELD usage?");
164 static_assert(std::is_pod<U>(),
"value type must be pod");
165 static_assert(std::is_pod<G>(),
"field type must be pod");
166 static_assert(
sizeof(
G) + uoffset <=
sizeof(U),
"bad field and/or offset");
167 assert(
sizeof(
G) + uoffset <=
values.size());
185 template<
typename T,
typename D>
188 std::unique_ptr<MDB_cursor, D>
cur;
210 return {std::move(
cur)};
248 template<
typename U = T,
typename F = U, std::
size_t offset = 0>
251 static_assert(std::is_same<U, T>(),
"was ELECTRONEUM_FIELD used with wrong type?");
266 template<
typename U = T,
typename F = U, std::
size_t offset = 0>
267 boost::iterator_range<value_iterator<U, F, offset>>
make_range()
const
273 template<
typename T,
typename F, std::
size_t offset>
277 return lhs.equal(rhs);
280 template<
typename T,
typename F, std::
size_t offset>
284 return !lhs.equal(rhs);
Definition: value_stream.h:83
G get_value() const noexcept
Definition: value_stream.h:161
value_iterator(value_iterator const &)=default
value_iterator() noexcept
Construct an "end" iterator.
Definition: value_stream.h:102
value_iterator(MDB_cursor *cur)
Definition: value_stream.h:111
value_iterator operator++(int)
Definition: value_stream.h:141
~value_iterator()=default
value_type operator*() const noexcept
Definition: value_stream.h:176
void increment()
Definition: value_stream.h:87
value_iterator & operator=(value_iterator const &)=default
bool equal(value_iterator const &rhs) const noexcept
Definition: value_stream.h:126
MDB_cursor * cur
Definition: value_stream.h:84
std::size_t difference_type
Definition: value_stream.h:98
value_iterator & operator++()
Invalidates all prior copies of the iterator.
Definition: value_stream.h:134
epee::span< const std::uint8_t > values
Definition: value_stream.h:85
bool is_end() const noexcept
Definition: value_stream.h:123
void pointer
Definition: value_stream.h:97
F value_type
Definition: value_stream.h:95
std::input_iterator_tag iterator_category
Definition: value_stream.h:99
Definition: value_stream.h:187
value_stream(value_stream const &)=delete
value_stream(value_stream &&)=default
void reset()
Definition: value_stream.h:220
std::size_t count() const
Definition: value_stream.h:230
value_stream(std::unique_ptr< MDB_cursor, D > cur)
Take ownership of cur without changing position. nullptr valid.
Definition: value_stream.h:192
value_stream & operator=(value_stream const &)=delete
std::unique_ptr< MDB_cursor, D > cur
Definition: value_stream.h:188
std::unique_ptr< MDB_cursor, D > give_cursor() noexcept
Definition: value_stream.h:208
boost::iterator_range< value_iterator< U, F, offset > > make_range() const
Definition: value_stream.h:267
value_stream & operator=(value_stream &&)=default
value_iterator< U, F, offset > make_iterator() const
Definition: value_stream.h:249
void * memcpy(void *a, const void *b, size_t c)
Definition: glibc_compat.cpp:16
const uint32_t T[512]
Definition: groestl_tables.h:37
const
Definition: build_protob.py:9
mdb_size_t count(MDB_cursor *cur)
Definition: value_stream.cpp:39
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:52
Definition: database.cpp:46
bool operator==(key_iterator< K, V > const &lhs, key_iterator< K, V > const &rhs) noexcept
Definition: key_stream.h:252
bool operator!=(key_iterator< K, V > const &lhs, key_iterator< K, V > const &rhs) noexcept
Definition: key_stream.h:259
Definition: blockchain_ancestry.cpp:73
#define F(w, k)
Definition: sha512-blocks.c:61
Definition: blockchain_usage.cpp:72