20 #include <ripple/ledger/detail/RawStateTable.h>
21 #include <ripple/basics/contract.h>
31 ReadView::sles_type::iterator
iter0_;
32 ReadView::sles_type::iterator
end0_;
41 items_t::const_iterator end1,
42 ReadView::sles_type::iterator iter0,
43 ReadView::sles_type::iterator end0)
61 return std::make_unique<sles_iter_impl>(*
this);
65 equal (base_type
const& impl)
const override
67 auto const& other =
dynamic_cast<
69 assert(
end1_ == other.end1_ &&
70 end0_ == other.end0_);
71 return iter1_ == other.iter1_ &&
160 for (
auto const& elem :
items_)
162 auto const& item = elem.second;
186 auto const& item = iter->second;
189 if (! k.
check(*item.second))
200 key_type const& key, boost::optional<
202 boost::optional<key_type>
204 boost::optional<key_type> next = key;
205 items_t::const_iterator iter;
210 next = base.succ(*next, last);
213 iter = items_.find(*next);
215 while (iter != items_.end() &&
216 iter->second.first == Action::erase);
218 for (iter = items_.upper_bound(key);
219 iter != items_.end (); ++iter)
221 if (iter->second.first != Action::erase)
224 if (! next || next > iter->first)
231 if (last && next >= last)
242 std::piecewise_construct,
248 auto& item = result.first->second;
252 LogicError(
"RawStateTable::erase: already erased");
269 std::piecewise_construct,
275 auto& item = result.first->second;
283 LogicError(
"RawStateTable::insert: already inserted");
286 LogicError(
"RawStateTable::insert: already exists");
296 std::piecewise_construct,
302 auto& item = result.first->second;
306 LogicError(
"RawStateTable::replace: was erased");
323 auto const& item = iter->second;
328 SLE const> sle = item.second;
343 return std::make_unique<sles_iter_impl>(
351 return std::make_unique<sles_iter_impl>(
359 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_