rippled
Directory.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2015 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_LEDGER_DIR_H_INCLUDED
21 #define RIPPLE_LEDGER_DIR_H_INCLUDED
22 
23 #include <ripple/ledger/ReadView.h>
24 #include <ripple/protocol/Indexes.h>
25 
26 namespace ripple {
27 
28 class Dir
29 {
30 private:
31  ReadView const* view_ = nullptr;
34  STVector256 const* indexes_ = nullptr;
35 
36 public:
37  class const_iterator;
39 
40  Dir(ReadView const&, Keylet const&);
41 
43  begin() const;
44 
46  end() const;
47 };
48 
50 {
51 public:
53  using pointer = value_type const*;
54  using reference = value_type const&;
57 
58  bool
59  operator==(const_iterator const& other) const;
60 
61  bool
62  operator!=(const_iterator const& other) const
63  {
64  return !(*this == other);
65  }
66 
67  reference
68  operator*() const;
69 
70  pointer
71  operator->() const
72  {
73  return &**this;
74  }
75 
77  operator++();
78 
80  operator++(int);
81 
83  next_page();
84 
86  page_size();
87 
88  Keylet const&
89  page() const
90  {
91  return page_;
92  }
93 
94  uint256
95  index() const
96  {
97  return index_;
98  }
99 
100 private:
101  friend class Dir;
102 
103  const_iterator(ReadView const& view, Keylet const& root, Keylet const& page)
104  : view_(&view), root_(root), page_(page)
105  {
106  }
107 
108  ReadView const* view_ = nullptr;
114  STVector256 const* indexes_ = nullptr;
116 };
117 
118 } // namespace ripple
119 
120 #endif
ripple::Keylet
A pair of SHAMap key and LedgerEntryType.
Definition: Keylet.h:38
ripple::Dir::const_iterator
Definition: Directory.h:49
ripple::Dir::begin
const_iterator begin() const
Definition: Directory.cpp:34
std::shared_ptr
STL class.
ripple::Dir::root_
Keylet root_
Definition: Directory.h:32
ripple::Dir::const_iterator::sle_
std::shared_ptr< SLE const > sle_
Definition: Directory.h:113
ripple::Dir::const_iterator::cache_
std::optional< value_type > cache_
Definition: Directory.h:112
std::vector
STL class.
std::forward_iterator_tag
ripple::Dir::const_iterator::operator!=
bool operator!=(const_iterator const &other) const
Definition: Directory.h:62
ripple::Dir::const_iterator::view_
ReadView const * view_
Definition: Directory.h:108
ripple::Dir::const_iterator::pointer
value_type const * pointer
Definition: Directory.h:53
ripple::Dir::const_iterator::index_
uint256 index_
Definition: Directory.h:111
ripple::base_uint< 256 >
ripple::Dir::const_iterator::page_
Keylet page_
Definition: Directory.h:110
ripple::Dir::view_
ReadView const * view_
Definition: Directory.h:31
ripple::Dir::indexes_
STVector256 const * indexes_
Definition: Directory.h:34
ripple::Dir::const_iterator::root_
Keylet root_
Definition: Directory.h:109
ripple::Dir::sle_
std::shared_ptr< SLE const > sle_
Definition: Directory.h:33
ripple::ReadView
A view into a ledger.
Definition: ReadView.h:125
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::Dir::const_iterator::operator++
const_iterator & operator++()
Definition: Directory.cpp:77
ripple::Dir::const_iterator::indexes_
STVector256 const * indexes_
Definition: Directory.h:114
ripple::Dir::const_iterator::page_size
std::size_t page_size()
Definition: Directory.cpp:129
ripple::Dir::const_iterator::page
Keylet const & page() const
Definition: Directory.h:89
ripple::Dir
Definition: Directory.h:28
std::ptrdiff_t
ripple::STVector256
Definition: STVector256.h:29
ripple::Dir::Dir
Dir(ReadView const &, Keylet const &)
Definition: Directory.cpp:26
ripple::Dir::const_iterator::const_iterator
const_iterator(ReadView const &view, Keylet const &root, Keylet const &page)
Definition: Directory.h:103
std::optional< value_type >
std::size_t
ripple::Dir::const_iterator::next_page
const_iterator & next_page()
Definition: Directory.cpp:100
ripple::Dir::end
const_iterator end() const
Definition: Directory.cpp:52
ripple::Dir::const_iterator::reference
value_type const & reference
Definition: Directory.h:54
ripple::Dir::value_type
std::shared_ptr< SLE const > value_type
Definition: Directory.h:38
ripple::Dir::const_iterator::operator==
bool operator==(const_iterator const &other) const
Definition: Directory.cpp:58
ripple::Dir::const_iterator::operator*
reference operator*() const
Definition: Directory.cpp:68
ripple::Dir::const_iterator::operator->
pointer operator->() const
Definition: Directory.h:71
ripple::Dir::const_iterator::it_
std::vector< uint256 >::const_iterator it_
Definition: Directory.h:115
ripple::root
Number root(Number f, unsigned d)
Definition: Number.cpp:624
ripple::Dir::const_iterator::index
uint256 index() const
Definition: Directory.h:95