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 
82  Keylet const&
83  page() const
84  {
85  return page_;
86  }
87 
88  uint256
89  index() const
90  {
91  return index_;
92  }
93 
94 private:
95  friend class Dir;
96 
97  const_iterator(ReadView const& view, Keylet const& root, Keylet const& page)
98  : view_(&view), root_(root), page_(page)
99  {
100  }
101 
102  ReadView const* view_ = nullptr;
108  STVector256 const* indexes_ = nullptr;
110 };
111 
112 } // namespace ripple
113 
114 #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:35
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:107
ripple::Dir::const_iterator::cache_
std::optional< value_type > cache_
Definition: Directory.h:106
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:102
ripple::Dir::const_iterator::pointer
value_type const * pointer
Definition: Directory.h:53
ripple::Dir::const_iterator::index_
uint256 index_
Definition: Directory.h:105
ripple::base_uint< 256 >
ripple::Dir::const_iterator::page_
Keylet page_
Definition: Directory.h:104
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:103
ripple::Dir::sle_
std::shared_ptr< SLE const > sle_
Definition: Directory.h:33
ripple::ReadView
A view into a ledger.
Definition: ReadView.h:192
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:78
ripple::Dir::const_iterator::indexes_
STVector256 const * indexes_
Definition: Directory.h:108
ripple::Dir::const_iterator::page
Keylet const & page() const
Definition: Directory.h:83
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:27
ripple::Dir::const_iterator::const_iterator
const_iterator(ReadView const &view, Keylet const &root, Keylet const &page)
Definition: Directory.h:97
std::optional< value_type >
ripple::Dir::end
const_iterator end() const
Definition: Directory.cpp:53
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:59
ripple::Dir::const_iterator::operator*
reference operator*() const
Definition: Directory.cpp:69
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:109
ripple::Dir::const_iterator::index
uint256 index() const
Definition: Directory.h:89