20 #include <ripple/basics/contract.h>
21 #include <ripple/ledger/detail/RawStateTable.h>
30 ReadView::sles_type::iterator
iter0_;
31 ReadView::sles_type::iterator
end0_;
40 items_t::const_iterator iter1,
41 items_t::const_iterator end1,
42 ReadView::sles_type::iterator iter0,
43 ReadView::sles_type::iterator end0)
58 return std::make_unique<sles_iter_impl>(*
this);
62 equal(base_type
const& impl)
const override
66 assert(
end1_ == p->end1_ &&
end0_ == p->end0_);
161 for (
auto const& elem :
items_)
163 auto const& item = elem.second;
186 auto const& item = iter->second;
189 if (!k.
check(*item.sle))
205 items_t::const_iterator iter;
210 next = base.succ(*next, last);
213 iter = items_.find(*next);
214 }
while (iter != items_.end() && iter->second.action == Action::erase);
216 for (iter = items_.upper_bound(key); iter != items_.end(); ++iter)
218 if (iter->second.action != Action::erase)
221 if (!next || next > iter->first)
228 if (last && next >= last)
238 std::piecewise_construct,
243 auto& item = result.first->second;
247 LogicError(
"RawStateTable::erase: already erased");
263 std::piecewise_construct,
268 auto& item = result.first->second;
276 LogicError(
"RawStateTable::insert: already inserted");
279 LogicError(
"RawStateTable::insert: already exists");
288 std::piecewise_construct,
293 auto& item = result.first->second;
297 LogicError(
"RawStateTable::replace: was erased");
312 auto const& item = iter->second;
331 return std::make_unique<sles_iter_impl>(
338 return std::make_unique<sles_iter_impl>(
345 return std::make_unique<sles_iter_impl>(
XRPAmount dropsDestroyed_
A pair of SHAMap key and LedgerEntryType.
sles_iter_impl(sles_iter_impl const &)=default
std::optional< key_type > succ(ReadView const &base, key_type const &key, std::optional< key_type > const &last) const
ReadView::sles_type::iterator iter0_
virtual void rawDestroyXRP(XRPAmount const &fee)=0
Destroy XRP.
std::shared_ptr< SLE const > read(ReadView const &base, Keylet const &k) const
iterator upper_bound(key_type const &key) const
virtual void rawReplace(std::shared_ptr< SLE > const &sle)=0
Unconditionally replace a state item.
sles_iter_impl(items_t::const_iterator iter1, items_t::const_iterator end1, ReadView::sles_type::iterator iter0, ReadView::sles_type::iterator end0)
virtual void rawErase(std::shared_ptr< SLE > const &sle)=0
Delete an existing state item.
Interface for ledger entry changes.
value_type dereference() const override
std::unique_ptr< ReadView::sles_type::iter_base > slesUpperBound(ReadView const &base, uint256 const &key) const
virtual void rawInsert(std::shared_ptr< SLE > const &sle)=0
Unconditionally insert a state item.
virtual bool exists(Keylet const &k) const =0
Determine if a state item exists.
sles_type sles
Iterable range of ledger state items.
std::unique_ptr< ReadView::sles_type::iter_base > slesBegin(ReadView const &base) const
bool equal(base_type const &impl) const override
T forward_as_tuple(T... args)
void erase(std::shared_ptr< SLE > const &sle)
bool exists(ReadView const &base, Keylet const &k) const
items_t::const_iterator end1_
virtual std::shared_ptr< SLE const > read(Keylet const &k) const =0
Return the state item associated with a key.
std::unique_ptr< base_type > copy() const override
void increment() override
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
void apply(RawView &to) const
void destroyXRP(XRPAmount const &fee)
std::shared_ptr< SLE const > sle0_
void LogicError(std::string const &how) noexcept
Called when faulty logic causes a broken invariant.
void insert(std::shared_ptr< SLE > const &sle)
ReadViewFwdIter< std::shared_ptr< SLE const > > iter_base
items_t::const_iterator iter1_
void replace(std::shared_ptr< SLE > const &sle)
bool check(STLedgerEntry const &) const
Returns true if the SLE matches the type.
std::shared_ptr< SLE const > sle1_
std::unique_ptr< ReadView::sles_type::iter_base > slesEnd(ReadView const &base) const
ReadView::sles_type::iterator end0_