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:
52  using value_type =
54  using pointer =
55  value_type const*;
56  using reference =
57  value_type const&;
58  using difference_type =
60  using iterator_category =
62 
63  bool
64  operator==(const_iterator const& other) const;
65 
66  bool
67  operator!=(const_iterator const& other) const
68  {
69  return ! (*this == other);
70  }
71 
72  reference
73  operator*() const;
74 
75  pointer
76  operator->() const
77  {
78  return &**this;
79  }
80 
82  operator++();
83 
85  operator++(int);
86 
87  Keylet const&
88  page() const
89  {
90  return page_;
91  }
92 
93  uint256
94  index() const
95  {
96  return index_;
97  }
98 
99 private:
100  friend class Dir;
101 
103  Keylet const& root, Keylet const& page)
104  : view_(&view)
105  , root_(root)
106  , page_(page)
107  {
108  }
109 
110  ReadView const* view_ = nullptr;
114  boost::optional<value_type> mutable cache_;
116  STVector256 const* indexes_ = nullptr;
118 };
119 
120 } // ripple
121 
122 #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:37
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:115
std::vector
STL class.
std::forward_iterator_tag
ripple::Dir::const_iterator::cache_
boost::optional< value_type > cache_
Definition: Directory.h:114
ripple::Dir::const_iterator::operator!=
bool operator!=(const_iterator const &other) const
Definition: Directory.h:67
ripple::Dir::const_iterator::view_
ReadView const * view_
Definition: Directory.h:110
ripple::Dir::const_iterator::pointer
value_type const * pointer
Definition: Directory.h:55
ripple::Dir::const_iterator::index_
uint256 index_
Definition: Directory.h:113
ripple::base_uint< 256 >
ripple::Dir::const_iterator::page_
Keylet page_
Definition: Directory.h:112
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:111
ripple::Dir::sle_
std::shared_ptr< SLE const > sle_
Definition: Directory.h:33
ripple::ReadView
A view into a ledger.
Definition: ReadView.h:186
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:82
ripple::Dir::const_iterator::indexes_
STVector256 const * indexes_
Definition: Directory.h:116
ripple::Dir::const_iterator::page
Keylet const & page() const
Definition: Directory.h:88
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:102
ripple::Dir::end
const_iterator end() const
Definition: Directory.cpp:56
ripple::Dir::const_iterator::reference
value_type const & reference
Definition: Directory.h:57
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:63
ripple::Dir::const_iterator::operator*
reference operator*() const
Definition: Directory.cpp:73
ripple::Dir::const_iterator::operator->
pointer operator->() const
Definition: Directory.h:76
ripple::Dir::const_iterator::it_
std::vector< uint256 >::const_iterator it_
Definition: Directory.h:117
ripple::Dir::const_iterator::index
uint256 index() const
Definition: Directory.h:94