rippled
OpenView.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 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_OPENVIEW_H_INCLUDED
21 #define RIPPLE_LEDGER_OPENVIEW_H_INCLUDED
22 
23 #include <ripple/basics/XRPAmount.h>
24 #include <ripple/basics/qalloc.h>
25 #include <ripple/ledger/RawView.h>
26 #include <ripple/ledger/ReadView.h>
27 #include <ripple/ledger/detail/RawStateTable.h>
28 #include <functional>
29 #include <utility>
30 
31 namespace ripple {
32 
40 {
41  explicit open_ledger_t() = default;
42 };
43 
44 extern open_ledger_t const open_ledger;
45 
46 //------------------------------------------------------------------------------
47 
52 class OpenView final : public ReadView, public TxsRawView
53 {
54 private:
55  class txs_iter_impl;
56 
57  // List of tx, key order
58  using txs_map = std::map<
59  key_type,
60  std::pair<
65  std::pair<
66  key_type const,
67  std::pair<
70  false>>;
71 
75  ReadView const* base_;
78  bool open_ = true;
79 
80 public:
81  OpenView() = delete;
82  OpenView&
83  operator=(OpenView&&) = delete;
84  OpenView&
85  operator=(OpenView const&) = delete;
86 
87  OpenView(OpenView&&) = default;
88 
101  OpenView(OpenView const&) = default;
102 
124  OpenView(
126  ReadView const* base,
127  Rules const& rules,
128  std::shared_ptr<void const> hold = nullptr);
129 
132  Rules const& rules,
134  : OpenView(open_ledger, &*base, rules, base)
135  {
136  }
150  OpenView(ReadView const* base, std::shared_ptr<void const> hold = nullptr);
151 
153  bool
154  open() const override
155  {
156  return open_;
157  }
158 
165  txCount() const;
166 
168  void
169  apply(TxsRawView& to) const;
170 
171  // ReadView
172 
173  LedgerInfo const&
174  info() const override;
175 
176  Fees const&
177  fees() const override;
178 
179  Rules const&
180  rules() const override;
181 
182  bool
183  exists(Keylet const& k) const override;
184 
185  boost::optional<key_type>
186  succ(
187  key_type const& key,
188  boost::optional<key_type> const& last = boost::none) const override;
189 
191  read(Keylet const& k) const override;
192 
194  slesBegin() const override;
195 
197  slesEnd() const override;
198 
200  slesUpperBound(uint256 const& key) const override;
201 
203  txsBegin() const override;
204 
206  txsEnd() const override;
207 
208  bool
209  txExists(key_type const& key) const override;
210 
211  tx_type
212  txRead(key_type const& key) const override;
213 
214  // RawView
215 
216  void
217  rawErase(std::shared_ptr<SLE> const& sle) override;
218 
219  void
220  rawInsert(std::shared_ptr<SLE> const& sle) override;
221 
222  void
223  rawReplace(std::shared_ptr<SLE> const& sle) override;
224 
225  void
226  rawDestroyXRP(XRPAmount const& fee) override;
227 
228  // TxsRawView
229 
230  void
231  rawTxInsert(
232  key_type const& key,
234  std::shared_ptr<Serializer const> const& metaData) override;
235 };
236 
237 } // namespace ripple
238 
239 #endif
ripple::OpenView::txCount
std::size_t txCount() const
Return the number of tx inserted since creation.
Definition: OpenView.cpp:101
ripple::Keylet
A pair of SHAMap key and LedgerEntryType.
Definition: Keylet.h:38
ripple::OpenView::operator=
OpenView & operator=(OpenView &&)=delete
std::shared_ptr
STL class.
ripple::OpenView::info
LedgerInfo const & info() const override
Returns information about the ledger.
Definition: OpenView.cpp:117
utility
ripple::open_ledger
const open_ledger_t open_ledger
Definition: OpenView.cpp:25
ripple::OpenView::apply
void apply(TxsRawView &to) const
Apply changes.
Definition: OpenView.cpp:107
functional
std::pair
ripple::ReadView::key_type
uint256 key_type
Definition: ReadView.h:194
ripple::OpenView
Writable ledger view that accumulates state and tx changes.
Definition: OpenView.h:52
ripple::OpenView::rawErase
void rawErase(std::shared_ptr< SLE > const &sle) override
Delete an existing state item.
Definition: OpenView.cpp:210
ripple::OpenView::exists
bool exists(Keylet const &k) const override
Determine if a state item exists.
Definition: OpenView.cpp:135
ripple::OpenView::slesUpperBound
std::unique_ptr< sles_type::iter_base > slesUpperBound(uint256 const &key) const override
Definition: OpenView.cpp:166
ripple::OpenView::txs_iter_impl
Definition: OpenView.cpp:27
ripple::OpenView::items_
detail::RawStateTable items_
Definition: OpenView.h:76
std::less
ripple::OpenView::info_
LedgerInfo info_
Definition: OpenView.h:74
ripple::qalloc_type
Definition: qalloc.h:90
ripple::OpenView::OpenView
OpenView(open_ledger_t, Rules const &rules, std::shared_ptr< ReadView const > const &base)
Definition: OpenView.h:130
ripple::OpenView::txRead
tx_type txRead(key_type const &key) const override
Read a transaction from the tx map.
Definition: OpenView.cpp:191
ripple::base_uint< 256 >
ripple::OpenView::fees
Fees const & fees() const override
Returns the fees for the base ledger.
Definition: OpenView.cpp:123
ripple::OpenView::txsEnd
std::unique_ptr< txs_type::iter_base > txsEnd() const override
Definition: OpenView.cpp:179
ripple::OpenView::txExists
bool txExists(key_type const &key) const override
Returns true if a tx exists in the tx map.
Definition: OpenView.cpp:185
ripple::Fees
Reflects the fee settings for a particular ledger.
Definition: ReadView.h:47
ripple::OpenView::rawReplace
void rawReplace(std::shared_ptr< SLE > const &sle) override
Unconditionally replace a state item.
Definition: OpenView.cpp:222
ripple::OpenView::open
bool open() const override
Returns true if this reflects an open ledger.
Definition: OpenView.h:154
ripple::OpenView::OpenView
OpenView()=delete
ripple::OpenView::hold_
std::shared_ptr< void const > hold_
Definition: OpenView.h:77
std::map
STL class.
ripple::ReadView::tx_type
std::pair< std::shared_ptr< STTx const >, std::shared_ptr< STObject const > > tx_type
Definition: ReadView.h:192
ripple::OpenView::rawInsert
void rawInsert(std::shared_ptr< SLE > const &sle) override
Unconditionally insert a state item.
Definition: OpenView.cpp:216
ripple::open_ledger_t
Open ledger construction tag.
Definition: OpenView.h:39
ripple::ReadView
A view into a ledger.
Definition: ReadView.h:188
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::open_ledger_t::open_ledger_t
open_ledger_t()=default
ripple::OpenView::rawTxInsert
void rawTxInsert(key_type const &key, std::shared_ptr< Serializer const > const &txn, std::shared_ptr< Serializer const > const &metaData) override
Add a transaction to the tx map.
Definition: OpenView.cpp:238
ripple::OpenView::txsBegin
std::unique_ptr< txs_type::iter_base > txsBegin() const override
Definition: OpenView.cpp:173
ripple::OpenView::rules_
Rules rules_
Definition: OpenView.h:72
ripple::OpenView::open_
bool open_
Definition: OpenView.h:78
ripple::Rules
Rules controlling protocol behavior.
Definition: ReadView.h:127
ripple::OpenView::txs_
txs_map txs_
Definition: OpenView.h:73
ripple::OpenView::rawDestroyXRP
void rawDestroyXRP(XRPAmount const &fee) override
Destroy XRP.
Definition: OpenView.cpp:228
ripple::OpenView::read
std::shared_ptr< SLE const > read(Keylet const &k) const override
Return the state item associated with a key.
Definition: OpenView.cpp:148
ripple::detail::RawStateTable
Definition: RawStateTable.h:33
std::size_t
ripple::OpenView::slesEnd
std::unique_ptr< sles_type::iter_base > slesEnd() const override
Definition: OpenView.cpp:160
ripple::LedgerInfo
Information about the notional ledger backing the view.
Definition: ReadView.h:80
ripple::OpenView::base_
ReadView const * base_
Definition: OpenView.h:75
ripple::TxsRawView
Interface for changing ledger entries with transactions.
Definition: RawView.h:98
std::unique_ptr
STL class.
ripple::OpenView::slesBegin
std::unique_ptr< sles_type::iter_base > slesBegin() const override
Definition: OpenView.cpp:154
ripple::OpenView::rules
Rules const & rules() const override
Returns the tx processing rules.
Definition: OpenView.cpp:129
ripple::XRPAmount
Definition: XRPAmount.h:46
ripple::OpenView::succ
boost::optional< key_type > succ(key_type const &key, boost::optional< key_type > const &last=boost::none) const override
Return the key of the next state item.
Definition: OpenView.cpp:141