xrpld
Loading...
Searching...
No Matches
Dir.h
1#pragma once
2
3#include <xrpl/basics/base_uint.h>
4#include <xrpl/ledger/ReadView.h>
5#include <xrpl/protocol/Keylet.h>
6#include <xrpl/protocol/STLedgerEntry.h>
7#include <xrpl/protocol/STVector256.h>
8
9#include <cstddef>
10#include <iterator>
11#include <optional>
12#include <vector>
13
14namespace xrpl {
15
29class Dir
30{
31private:
32 ReadView const* view_ = nullptr;
35 STVector256 const* indexes_ = nullptr;
36
37public:
38 class ConstIterator;
40
41 Dir(ReadView const&, Keylet const&);
42
43 [[nodiscard]] ConstIterator
44 begin() const;
45
46 [[nodiscard]] ConstIterator
47 end() const;
48};
49
51{
52public:
54 using pointer = value_type const*;
55 using reference = value_type const&;
58
59 bool
60 operator==(ConstIterator const& other) const;
61
63 operator*() const;
64
66 operator->() const
67 {
68 return &**this;
69 }
70
72 operator++();
73
75 operator++(int);
76
78 nextPage();
79
81 pageSize();
82
83 Keylet const&
84 page() const
85 {
86 return page_;
87 }
88
90 index() const
91 {
92 return index_;
93 }
94
95private:
96 friend class Dir;
97
98 ConstIterator(ReadView const& view, Keylet const& root, Keylet const& page)
99 : view_(&view), root_(root), page_(page)
100 {
101 }
102
103 ReadView const* view_ = nullptr;
109 STVector256 const* indexes_ = nullptr;
110 std::vector<uint256>::const_iterator it_;
111};
112
113} // namespace xrpl
value_type const * pointer
Definition Dir.h:54
std::size_t pageSize()
Definition Dir.cpp:124
std::forward_iterator_tag iterator_category
Definition Dir.h:57
uint256 index() const
Definition Dir.h:90
ConstIterator & nextPage()
Definition Dir.cpp:95
Keylet const & page() const
Definition Dir.h:84
ConstIterator & operator++()
Definition Dir.cpp:71
SLE::const_pointer sle_
Definition Dir.h:108
ReadView const * view_
Definition Dir.h:103
value_type const & reference
Definition Dir.h:55
ConstIterator(ReadView const &view, Keylet const &root, Keylet const &page)
Definition Dir.h:98
friend class Dir
Definition Dir.h:96
reference operator*() const
Definition Dir.cpp:62
bool operator==(ConstIterator const &other) const
Definition Dir.cpp:50
std::vector< uint256 >::const_iterator it_
Definition Dir.h:110
STVector256 const * indexes_
Definition Dir.h:109
std::ptrdiff_t difference_type
Definition Dir.h:56
pointer operator->() const
Definition Dir.h:66
std::optional< value_type > cache_
Definition Dir.h:107
Dir::value_type value_type
Definition Dir.h:53
ReadView const * view_
Definition Dir.h:32
ConstIterator begin() const
Definition Dir.cpp:26
ConstIterator end() const
Definition Dir.cpp:44
SLE::const_pointer sle_
Definition Dir.h:34
STVector256 const * indexes_
Definition Dir.h:35
SLE::const_pointer value_type
Definition Dir.h:39
Keylet root_
Definition Dir.h:33
Dir(ReadView const &, Keylet const &)
Definition Dir.cpp:18
A view into a ledger.
Definition ReadView.h:41
std::shared_ptr< STLedgerEntry const > const_pointer
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Number root(Number f, unsigned d)
BaseUInt< 256 > uint256
Definition base_uint.h:580
A pair of SHAMap key and LedgerEntryType.
Definition Keylet.h:20