Electroneum
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
lmdb::value_iterator< T, F, offset > Class Template Reference

#include <value_stream.h>

Public Types

using value_type = F
 
using reference = value_type
 
using pointer = void
 
using difference_type = std::size_t
 
using iterator_category = std::input_iterator_tag
 

Public Member Functions

 value_iterator () noexcept
 Construct an "end" iterator. More...
 
 value_iterator (MDB_cursor *cur)
 
 value_iterator (value_iterator const &)=default
 
 ~value_iterator ()=default
 
value_iteratoroperator= (value_iterator const &)=default
 
bool is_end () const noexcept
 
bool equal (value_iterator const &rhs) const noexcept
 
value_iteratoroperator++ ()
 Invalidates all prior copies of the iterator. More...
 
value_iterator operator++ (int)
 
template<typename U , typename G = U, std::size_t uoffset = 0>
G get_value () const noexcept
 
value_type operator* () const noexcept
 

Private Member Functions

void increment ()
 

Private Attributes

MDB_cursor * cur
 
epee::span< const std::uint8_t > values
 

Detailed Description

template<typename T, typename F = T, std::size_t offset = 0>
class lmdb::value_iterator< T, F, offset >

An InputIterator for a fixed-sized LMDB value at a specific key.

Template Parameters
TThe value type at the specific key.
FThe value type being returned when dereferenced.
offsetto F within T.
Note
This meets requirements for an InputIterator only. The iterator can only be incremented and dereferenced. All copies of an iterator share the same LMDB cursor, and therefore incrementing any copy will change the cursor state for all (incrementing an iterator will invalidate all prior copies of the iterator). Usage is identical to std::istream_iterator.

Member Typedef Documentation

◆ difference_type

template<typename T , typename F = T, std::size_t offset = 0>
using lmdb::value_iterator< T, F, offset >::difference_type = std::size_t

◆ iterator_category

template<typename T , typename F = T, std::size_t offset = 0>
using lmdb::value_iterator< T, F, offset >::iterator_category = std::input_iterator_tag

◆ pointer

template<typename T , typename F = T, std::size_t offset = 0>
using lmdb::value_iterator< T, F, offset >::pointer = void

◆ reference

template<typename T , typename F = T, std::size_t offset = 0>
using lmdb::value_iterator< T, F, offset >::reference = value_type

◆ value_type

template<typename T , typename F = T, std::size_t offset = 0>
using lmdb::value_iterator< T, F, offset >::value_type = F

Constructor & Destructor Documentation

◆ value_iterator() [1/3]

template<typename T , typename F = T, std::size_t offset = 0>
lmdb::value_iterator< T, F, offset >::value_iterator ( )
inlinenoexcept

Construct an "end" iterator.

◆ value_iterator() [2/3]

template<typename T , typename F = T, std::size_t offset = 0>
lmdb::value_iterator< T, F, offset >::value_iterator ( MDB_cursor *  cur)
inline
Parameters
curIterate over values starting at this cursor position.
Exceptions
std::system_errorif unexpected LMDB error. This can happen if cur is invalid.

◆ value_iterator() [3/3]

template<typename T , typename F = T, std::size_t offset = 0>
lmdb::value_iterator< T, F, offset >::value_iterator ( value_iterator< T, F, offset > const &  )
default

◆ ~value_iterator()

template<typename T , typename F = T, std::size_t offset = 0>
lmdb::value_iterator< T, F, offset >::~value_iterator ( )
default

Member Function Documentation

◆ equal()

template<typename T , typename F = T, std::size_t offset = 0>
bool lmdb::value_iterator< T, F, offset >::equal ( value_iterator< T, F, offset > const &  rhs) const
inlinenoexcept
Returns
True iff rhs is referencing this value.

◆ get_value()

template<typename T , typename F = T, std::size_t offset = 0>
template<typename U , typename G = U, std::size_t uoffset = 0>
G lmdb::value_iterator< T, F, offset >::get_value ( ) const
inlinenoexcept

Get a specific field within F. Default behavior is to return the entirety of U, despite the filtering logic of operator*.

Precondition
!is_end()
Template Parameters
Umust match T, used for ELECTRONEUM_FIELD sanity checking.
Gfield type to extract from the value
uoffsetto G type, or 0 when std::is_same<U, G>().
Returns
The field G, at uoffset within U.

◆ increment()

template<typename T , typename F = T, std::size_t offset = 0>
void lmdb::value_iterator< T, F, offset >::increment ( )
inlineprivate

◆ is_end()

template<typename T , typename F = T, std::size_t offset = 0>
bool lmdb::value_iterator< T, F, offset >::is_end ( ) const
inlinenoexcept
Returns
True if this is one-past the last value.

◆ operator*()

template<typename T , typename F = T, std::size_t offset = 0>
value_type lmdb::value_iterator< T, F, offset >::operator* ( ) const
inlinenoexcept
Precondition
!is_end()
Returns
The field F, at offset, within T.

◆ operator++() [1/2]

template<typename T , typename F = T, std::size_t offset = 0>
value_iterator& lmdb::value_iterator< T, F, offset >::operator++ ( )
inline

Invalidates all prior copies of the iterator.

◆ operator++() [2/2]

template<typename T , typename F = T, std::size_t offset = 0>
value_iterator lmdb::value_iterator< T, F, offset >::operator++ ( int  )
inline
Returns
A copy that is already invalidated, ignore

◆ operator=()

template<typename T , typename F = T, std::size_t offset = 0>
value_iterator& lmdb::value_iterator< T, F, offset >::operator= ( value_iterator< T, F, offset > const &  )
default

Member Data Documentation

◆ cur

template<typename T , typename F = T, std::size_t offset = 0>
MDB_cursor* lmdb::value_iterator< T, F, offset >::cur
private

◆ values

template<typename T , typename F = T, std::size_t offset = 0>
epee::span<const std::uint8_t> lmdb::value_iterator< T, F, offset >::values
private

The documentation for this class was generated from the following file: