1#include <xrpl/ledger/detail/RawStateTable.h>
3#include <xrpl/basics/base_uint.h>
4#include <xrpl/basics/contract.h>
5#include <xrpl/beast/utility/instrumentation.h>
6#include <xrpl/ledger/RawView.h>
7#include <xrpl/ledger/ReadView.h>
8#include <xrpl/protocol/Keylet.h>
9#include <xrpl/protocol/STLedgerEntry.h>
10#include <xrpl/protocol/XRPAmount.h>
25 ReadView::SlesType::Iterator
end0_;
34 items_t::const_iterator iter1,
35 items_t::const_iterator end1,
36 ReadView::SlesType::Iterator iter0,
37 ReadView::SlesType::Iterator end0)
56 equal(base_type
const& impl)
const override
58 if (
auto const p =
dynamic_cast<SlesIterImpl const*
>(&impl))
62 "xrpl::detail::RawStateTable::equal : matching end "
75 "xrpl::detail::RawStateTable::increment : either SLE is "
173 for (
auto const& elem :
items_)
175 auto const& item = elem.second;
194 XRPL_ASSERT(k.
key.
isNonZero(),
"xrpl::detail::RawStateTable::exists : nonzero key");
198 auto const& item = iter->second;
201 if (!k.
check(*item.sle))
215 items_t::const_iterator iter;
220 next = base.succ(*next, last);
223 iter =
items_.find(*next);
226 for (iter =
items_.upper_bound(key); iter !=
items_.end(); ++iter)
231 if (!next || next > iter->first)
238 if (last && next >= last)
247 auto const result =
items_.emplace(
253 auto& item = result.first->second;
260 items_.erase(result.first);
272 auto const result =
items_.emplace(
278 auto& item = result.first->second;
297 auto const result =
items_.emplace(
303 auto& item = result.first->second;
322 auto const& item = iter->second;
Interface for ledger entry changes.
virtual void rawInsert(SLE::ref sle)=0
Unconditionally insert a state item.
virtual void rawReplace(SLE::ref sle)=0
Unconditionally replace a state item.
virtual void rawErase(SLE::ref sle)=0
Delete an existing state item.
virtual void rawDestroyXRP(XRPAmount const &fee)=0
Destroy XRP.
virtual bool exists(Keylet const &k) const =0
Determine if a state item exists.
virtual SLE::const_pointer read(Keylet const &k) const =0
Return the state item associated with a key.
SlesType sles
Iterable range of ledger state items.
std::shared_ptr< STLedgerEntry > const & ref
std::shared_ptr< STLedgerEntry const > const_pointer
void increment() override
ReadView::SlesType::Iterator end0_
SlesIterImpl(SlesIterImpl const &)=default
SlesIterImpl(items_t::const_iterator iter1, items_t::const_iterator end1, ReadView::SlesType::Iterator iter0, ReadView::SlesType::Iterator end0)
ReadView::SlesType::Iterator iter0_
items_t::const_iterator end1_
value_type dereference() const override
bool equal(base_type const &impl) const override
items_t::const_iterator iter1_
std::unique_ptr< base_type > copy() const override
std::optional< key_type > succ(ReadView const &base, key_type const &key, std::optional< key_type > const &last) const
bool exists(ReadView const &base, Keylet const &k) const
void insert(SLE::ref sle)
SLE::const_pointer read(ReadView const &base, Keylet const &k) const
std::unique_ptr< ReadView::SlesType::iter_base > slesEnd(ReadView const &base) const
void replace(SLE::ref sle)
void apply(RawView &to) const
std::unique_ptr< ReadView::SlesType::iter_base > slesBegin(ReadView const &base) const
ReadView::key_type key_type
std::unique_ptr< ReadView::SlesType::iter_base > slesUpperBound(ReadView const &base, uint256 const &key) const
void destroyXRP(XRPAmount const &fee)
XRPAmount dropsDestroyed_
ReadViewFwdIter< SLE::const_pointer > iter_base
T forward_as_tuple(T... args)
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
A pair of SHAMap key and LedgerEntryType.
bool check(STLedgerEntry const &) const
Returns true if the SLE matches the type.
Iterator upperBound(key_type const &key) const