xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
ledger
detail
ReadViewFwdRange.h
1
#pragma once
2
3
#include <
cstddef
>
4
#include <
iterator
>
5
#include <
memory
>
6
#include <
optional
>
7
#include <
type_traits
>
8
9
namespace
xrpl
{
10
11
class
ReadView
;
12
13
namespace
detail
{
14
15
// A type-erased ForwardIterator
16
//
17
template
<
class
ValueType>
18
class
ReadViewFwdIter
19
{
20
public
:
21
using
BaseType
=
ReadViewFwdIter
;
22
23
using
value_type
= ValueType;
24
25
ReadViewFwdIter
() =
default
;
26
ReadViewFwdIter
(
ReadViewFwdIter
const
&) =
default
;
27
ReadViewFwdIter
&
28
operator=
(
ReadViewFwdIter
const
&) =
default
;
29
30
virtual
~ReadViewFwdIter
() =
default
;
31
32
[[nodiscard]]
virtual
std::unique_ptr<ReadViewFwdIter>
33
copy
()
const
= 0;
34
35
[[nodiscard]]
virtual
bool
36
equal
(
ReadViewFwdIter
const
& impl)
const
= 0;
37
38
virtual
void
39
increment
() = 0;
40
41
[[nodiscard]]
virtual
value_type
42
dereference
()
const
= 0;
43
};
44
45
// A range using type-erased ForwardIterator
46
//
47
template
<
class
ValueType>
48
class
ReadViewFwdRange
49
{
50
public
:
51
using
IterBase
=
ReadViewFwdIter<ValueType>
;
52
53
static_assert
(
54
std::is_nothrow_move_constructible<ValueType>
{},
55
"ReadViewFwdRange move and move assign constructors should be "
56
"noexcept"
);
57
58
class
Iterator
59
{
60
public
:
61
using
value_type
= ValueType;
62
63
using
pointer
=
value_type
const
*;
64
65
using
reference
=
value_type
const
&;
66
67
using
difference_type
=
std::ptrdiff_t
;
68
69
using
iterator_category
=
std::forward_iterator_tag
;
70
71
Iterator
() =
default
;
72
73
Iterator
(
Iterator
const
& other);
74
Iterator
(
Iterator
&& other)
noexcept
;
75
76
// Used by the implementation
77
explicit
Iterator
(
ReadView
const
* view,
std::unique_ptr<IterBase>
impl);
78
79
Iterator
&
80
operator=
(
Iterator
const
& other);
81
82
Iterator
&
83
operator=
(
Iterator
&& other)
noexcept
;
84
85
bool
86
operator==
(
Iterator
const
& other)
const
;
87
88
// Can throw
89
reference
90
operator*
()
const
;
91
92
// Can throw
93
pointer
94
operator->
()
const
;
95
96
Iterator
&
97
operator++
();
98
99
Iterator
100
operator++
(
int
);
101
102
private
:
103
ReadView
const
*
view_
=
nullptr
;
104
std::unique_ptr<IterBase>
impl_
{};
105
std::optional<value_type>
mutable
cache_
;
106
};
107
108
static_assert
(
std::is_nothrow_move_constructible<Iterator>
{});
109
static_assert
(
std::is_nothrow_move_assignable<Iterator>
{});
110
111
using
const_iterator
=
Iterator
;
112
113
using
value_type
= ValueType;
114
115
ReadViewFwdRange
() =
delete
;
116
ReadViewFwdRange
(
ReadViewFwdRange
const
&) =
default
;
117
ReadViewFwdRange
&
118
operator=
(
ReadViewFwdRange
const
&) =
default
;
119
120
explicit
ReadViewFwdRange
(
ReadView
const
& view) :
view_
(&view)
121
{
122
}
123
124
protected
:
125
ReadView
const
*
view_
;
126
};
127
128
}
// namespace detail
129
}
// namespace xrpl
xrpl::ReadView
A view into a ledger.
Definition
ReadView.h:41
xrpl::detail::ReadViewFwdIter
Definition
ReadViewFwdRange.h:19
xrpl::detail::ReadViewFwdIter::~ReadViewFwdIter
virtual ~ReadViewFwdIter()=default
xrpl::detail::ReadViewFwdIter::BaseType
ReadViewFwdIter BaseType
Definition
ReadViewFwdRange.h:21
xrpl::detail::ReadViewFwdIter::dereference
virtual value_type dereference() const =0
xrpl::detail::ReadViewFwdIter::value_type
ValueType value_type
Definition
ReadViewFwdRange.h:23
xrpl::detail::ReadViewFwdIter::ReadViewFwdIter
ReadViewFwdIter(ReadViewFwdIter const &)=default
xrpl::detail::ReadViewFwdIter::ReadViewFwdIter
ReadViewFwdIter()=default
xrpl::detail::ReadViewFwdIter::copy
virtual std::unique_ptr< ReadViewFwdIter > copy() const =0
xrpl::detail::ReadViewFwdIter::operator=
ReadViewFwdIter & operator=(ReadViewFwdIter const &)=default
xrpl::detail::ReadViewFwdIter::equal
virtual bool equal(ReadViewFwdIter const &impl) const =0
xrpl::detail::ReadViewFwdIter::increment
virtual void increment()=0
xrpl::detail::ReadViewFwdRange::Iterator
Definition
ReadViewFwdRange.h:59
xrpl::detail::ReadViewFwdRange::Iterator::operator==
bool operator==(Iterator const &other) const
xrpl::detail::ReadViewFwdRange::Iterator::operator*
reference operator*() const
xrpl::detail::ReadViewFwdRange::Iterator::Iterator
Iterator(Iterator &&other) noexcept
xrpl::detail::ReadViewFwdRange::Iterator::pointer
value_type const * pointer
Definition
ReadViewFwdRange.h:63
xrpl::detail::ReadViewFwdRange::Iterator::difference_type
std::ptrdiff_t difference_type
Definition
ReadViewFwdRange.h:67
xrpl::detail::ReadViewFwdRange::Iterator::reference
value_type const & reference
Definition
ReadViewFwdRange.h:65
xrpl::detail::ReadViewFwdRange::Iterator::Iterator
Iterator()=default
xrpl::detail::ReadViewFwdRange::Iterator::operator++
Iterator & operator++()
xrpl::detail::ReadViewFwdRange::Iterator::Iterator
Iterator(Iterator const &other)
xrpl::detail::ReadViewFwdRange::Iterator::impl_
std::unique_ptr< IterBase > impl_
Definition
ReadViewFwdRange.h:104
xrpl::detail::ReadViewFwdRange::Iterator::cache_
std::optional< value_type > cache_
Definition
ReadViewFwdRange.h:105
xrpl::detail::ReadViewFwdRange::Iterator::iterator_category
std::forward_iterator_tag iterator_category
Definition
ReadViewFwdRange.h:69
xrpl::detail::ReadViewFwdRange::Iterator::view_
ReadView const * view_
Definition
ReadViewFwdRange.h:103
xrpl::detail::ReadViewFwdRange::Iterator::value_type
ValueType value_type
Definition
ReadViewFwdRange.h:61
xrpl::detail::ReadViewFwdRange::Iterator::operator=
Iterator & operator=(Iterator const &other)
xrpl::detail::ReadViewFwdRange::Iterator::operator->
pointer operator->() const
xrpl::detail::ReadViewFwdRange::Iterator::operator=
Iterator & operator=(Iterator &&other) noexcept
xrpl::detail::ReadViewFwdRange::Iterator::Iterator
Iterator(ReadView const *view, std::unique_ptr< IterBase > impl)
xrpl::detail::ReadViewFwdRange::Iterator::operator++
Iterator operator++(int)
xrpl::detail::ReadViewFwdRange::value_type
ValueType value_type
Definition
ReadViewFwdRange.h:113
xrpl::detail::ReadViewFwdRange::operator=
ReadViewFwdRange & operator=(ReadViewFwdRange const &)=default
xrpl::detail::ReadViewFwdRange::const_iterator
Iterator const_iterator
Definition
ReadViewFwdRange.h:111
xrpl::detail::ReadViewFwdRange::view_
ReadView const * view_
Definition
ReadViewFwdRange.h:125
xrpl::detail::ReadViewFwdRange::IterBase
ReadViewFwdIter< ValueType > IterBase
Definition
ReadViewFwdRange.h:51
xrpl::detail::ReadViewFwdRange::ReadViewFwdRange
ReadViewFwdRange()=delete
xrpl::detail::ReadViewFwdRange::ReadViewFwdRange
ReadViewFwdRange(ReadViewFwdRange const &)=default
xrpl::detail::ReadViewFwdRange::ReadViewFwdRange
ReadViewFwdRange(ReadView const &view)
Definition
ReadViewFwdRange.h:120
cstddef
std::is_nothrow_move_assignable
std::is_nothrow_move_constructible
iterator
std::forward_iterator_tag
memory
xrpl::detail
Definition
base_uint.h:37
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
optional
std::ptrdiff_t
type_traits
std::unique_ptr
Generated by
1.17.0