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
65 assert(
end1_ == other.end1_ &&
end0_ == other.end0_);
157 for (
auto const& elem :
items_)
159 auto const& item = elem.second;
182 auto const& item = iter->second;
185 if (!k.
check(*item.sle))
198 boost::optional<key_type>
const& last)
const -> boost::optional<key_type>
200 boost::optional<key_type> next = key;
201 items_t::const_iterator iter;
206 next = base.succ(*next, last);
209 iter = items_.find(*next);
210 }
while (iter != items_.end() && iter->second.action == Action::erase);
212 for (iter = items_.upper_bound(key); iter != items_.end(); ++iter)
214 if (iter->second.action != Action::erase)
217 if (!next || next > iter->first)
224 if (last && next >= last)
234 std::piecewise_construct,
239 auto& item = result.first->second;
243 LogicError(
"RawStateTable::erase: already erased");
259 std::piecewise_construct,
264 auto& item = result.first->second;
272 LogicError(
"RawStateTable::insert: already inserted");
275 LogicError(
"RawStateTable::insert: already exists");
284 std::piecewise_construct,
289 auto& item = result.first->second;
293 LogicError(
"RawStateTable::replace: was erased");
308 auto const& item = iter->second;
327 return std::make_unique<sles_iter_impl>(
334 return std::make_unique<sles_iter_impl>(
341 return std::make_unique<sles_iter_impl>(
XRPAmount dropsDestroyed_
A pair of SHAMap key and LedgerEntryType.
sles_iter_impl(sles_iter_impl const &)=default
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.
iterator const & end() const
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_
boost::optional< key_type > succ(ReadView const &base, key_type const &key, boost::optional< key_type > const &last) const
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_