29 #include <boost/range/iterator_range.hpp> 81 template<
typename T,
typename F = T, std::
size_t offset = 0>
90 if (values.
empty() && cur)
103 : cur(
nullptr), values()
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;
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);
boost::iterator_range< value_iterator< U, F, offset > > make_range() const
bool operator!=(key_iterator< K, V > const &lhs, key_iterator< K, V > const &rhs) noexcept
G get_value() const noexcept
Lightning memory-mapped database library.
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)
std::input_iterator_tag iterator_category
std::unique_ptr< MDB_cursor, D > give_cursor() noexcept
value_type operator*() const noexcept
~value_iterator()=default
value_stream & operator=(value_stream &&)=default
constexpr std::size_t size() const noexcept
mdb_size_t count(MDB_cursor *cur)
std::size_t difference_type
value_iterator(MDB_cursor *cur)
std::size_t count() const
MDB_cursor_op
Cursor Get operations.
std::size_t remove_prefix(std::size_t amount) noexcept
value_iterator & operator=(value_iterator const &)=default
struct MDB_cursor MDB_cursor
Opaque structure for navigating through a database.
const T & move(const T &t)
bool is_end() const noexcept
value_iterator< U, F, offset > make_iterator() const
const GenericPointer< typename T::ValueType > T2 value
void * memcpy(void *a, const void *b, size_t c)
value_iterator() noexcept
Construct an "end" iterator.
value_iterator & operator++()
Invalidates all prior copies of the iterator.
bool operator==(key_iterator< K, V > const &lhs, key_iterator< K, V > const &rhs) noexcept
value_stream(std::unique_ptr< MDB_cursor, D > cur)
Take ownership of cur without changing position. nullptr valid.
constexpr bool empty() const noexcept
bool equal(value_iterator const &rhs) const noexcept
constexpr pointer data() const noexcept
value_iterator operator++(int)