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/ledger/RawView.h>
24 #include <ripple/ledger/ReadView.h>
25 #include <ripple/ledger/detail/RawStateTable.h>
26 #include <ripple/basics/qalloc.h>
27 #include <ripple/basics/XRPAmount.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
53  : public ReadView
54  , public TxsRawView
55 {
56 private:
57  class txs_iter_impl;
58 
59  // List of tx, key order
60  using txs_map = std::map<key_type,
66 
70  ReadView const* base_;
73  bool open_ = true;
74 
75 public:
76  OpenView() = delete;
77  OpenView& operator= (OpenView&&) = delete;
78  OpenView& operator= (OpenView const&) = delete;
79 
80  OpenView (OpenView&&) = default;
81 
94  OpenView (OpenView const&) = default;
95 
118  ReadView const* base, Rules const& rules,
119  std::shared_ptr<void const> hold = nullptr);
120 
123  : OpenView (open_ledger, &*base, rules, base)
124  {
125  }
139  OpenView (ReadView const* base,
140  std::shared_ptr<void const> hold = nullptr);
141 
143  bool
144  open() const override
145  {
146  return open_;
147  }
148 
155  txCount() const;
156 
158  void
159  apply (TxsRawView& to) const;
160 
161  // ReadView
162 
163  LedgerInfo const&
164  info() const override;
165 
166  Fees const&
167  fees() const override;
168 
169  Rules const&
170  rules() const override;
171 
172  bool
173  exists (Keylet const& k) const override;
174 
175  boost::optional<key_type>
176  succ (key_type const& key, boost::optional<
177  key_type> const& last = boost::none) const override;
178 
180  read (Keylet const& k) const override;
181 
183  slesBegin() const override;
184 
186  slesEnd() const override;
187 
189  slesUpperBound(uint256 const& key) const override;
190 
192  txsBegin() const override;
193 
195  txsEnd() const override;
196 
197  bool
198  txExists (key_type const& key) const override;
199 
200  tx_type
201  txRead (key_type const& key) const override;
202 
203  // RawView
204 
205  void
207  SLE> const& sle) override;
208 
209  void
211  SLE> const& sle) override;
212 
213  void
215  SLE> const& sle) override;
216 
217  void
219  XRPAmount const& fee) override;
220 
221  // TxsRawView
222 
223  void
224  rawTxInsert (key_type const& key,
226  const& txn, std::shared_ptr<
227  Serializer const>
228  const& metaData) override;
229 };
230 
231 } // ripple
232 
233 #endif
ripple::OpenView::txCount
std::size_t txCount() const
Return the number of tx inserted since creation.
Definition: OpenView.cpp:114
ripple::Keylet
A pair of SHAMap key and LedgerEntryType.
Definition: Keylet.h:38
ripple::OpenView::operator=
OpenView & operator=(OpenView &&)=delete
ripple::STLedgerEntry
Definition: STLedgerEntry.h:30
std::shared_ptr
STL class.
ripple::OpenView::info
LedgerInfo const & info() const override
Returns information about the ledger.
Definition: OpenView.cpp:132
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:120
functional
std::pair
ripple::ReadView::key_type
uint256 key_type
Definition: ReadView.h:193
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:235
ripple::OpenView::exists
bool exists(Keylet const &k) const override
Determine if a state item exists.
Definition: OpenView.cpp:150
ripple::OpenView::slesUpperBound
std::unique_ptr< sles_type::iter_base > slesUpperBound(uint256 const &key) const override
Definition: OpenView.cpp:184
ripple::OpenView::txs_iter_impl
Definition: OpenView.cpp:27
ripple::OpenView::items_
detail::RawStateTable items_
Definition: OpenView.h:71
std::less
ripple::OpenView::info_
LedgerInfo info_
Definition: OpenView.h:69
ripple::qalloc_type
Definition: qalloc.h:89
ripple::OpenView::OpenView
OpenView(open_ledger_t, Rules const &rules, std::shared_ptr< ReadView const > const &base)
Definition: OpenView.h:121
ripple::OpenView::txRead
tx_type txRead(key_type const &key) const override
Read a transaction from the tx map.
Definition: OpenView.cpp:213
ripple::base_uint< 256 >
ripple::OpenView::fees
Fees const & fees() const override
Returns the fees for the base ledger.
Definition: OpenView.cpp:138
ripple::OpenView::txsEnd
std::unique_ptr< txs_type::iter_base > txsEnd() const override
Definition: OpenView.cpp:199
ripple::OpenView::txExists
bool txExists(key_type const &key) const override
Returns true if a tx exists in the tx map.
Definition: OpenView.cpp:207
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:249
ripple::OpenView::open
bool open() const override
Returns true if this reflects an open ledger.
Definition: OpenView.h:144
ripple::OpenView::OpenView
OpenView()=delete
ripple::OpenView::hold_
std::shared_ptr< void const > hold_
Definition: OpenView.h:72
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:191
ripple::Serializer
Definition: Serializer.h:43
ripple::OpenView::rawInsert
void rawInsert(std::shared_ptr< SLE > const &sle) override
Unconditionally insert a state item.
Definition: OpenView.cpp:242
ripple::open_ledger_t
Open ledger construction tag.
Definition: OpenView.h:39
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::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:267
ripple::OpenView::txsBegin
std::unique_ptr< txs_type::iter_base > txsBegin() const override
Definition: OpenView.cpp:191
ripple::OpenView::rules_
Rules rules_
Definition: OpenView.h:67
ripple::OpenView::open_
bool open_
Definition: OpenView.h:73
ripple::Rules
Rules controlling protocol behavior.
Definition: ReadView.h:126
ripple::OpenView::txs_
txs_map txs_
Definition: OpenView.h:68
ripple::OpenView::rawDestroyXRP
void rawDestroyXRP(XRPAmount const &fee) override
Destroy XRP.
Definition: OpenView.cpp:256
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:164
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:177
ripple::LedgerInfo
Information about the notional ledger backing the view.
Definition: ReadView.h:79
ripple::OpenView::base_
ReadView const * base_
Definition: OpenView.h:70
ripple::TxsRawView
Interface for changing ledger entries with transactions.
Definition: RawView.h:101
std::unique_ptr
STL class.
ripple::OpenView::slesBegin
std::unique_ptr< sles_type::iter_base > slesBegin() const override
Definition: OpenView.cpp:170
ripple::OpenView::rules
Rules const & rules() const override
Returns the tx processing rules.
Definition: OpenView.cpp:144
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:156