mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Install upper_bound in ReadView:
* And use it in doLedgerData.
This commit is contained in:
committed by
Edward Hennis
parent
849e1ce5f4
commit
83830ef9c0
@@ -549,6 +549,15 @@ Ledger::slesEnd() const ->
|
||||
stateMap_->end(), *this);
|
||||
}
|
||||
|
||||
auto
|
||||
Ledger::slesUpperBound(uint256 const& key) const ->
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
{
|
||||
return std::make_unique<
|
||||
sles_iter_impl>(
|
||||
stateMap_->upper_bound(key), *this);
|
||||
}
|
||||
|
||||
auto
|
||||
Ledger::txsBegin() const ->
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
|
||||
@@ -170,6 +170,9 @@ public:
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesEnd() const override;
|
||||
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesUpperBound(uint256 const& key) const override;
|
||||
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
txsBegin() const override;
|
||||
|
||||
|
||||
@@ -102,6 +102,12 @@ public:
|
||||
return base_.slesEnd();
|
||||
}
|
||||
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesUpperBound(uint256 const& key) const override
|
||||
{
|
||||
return base_.slesUpperBound(key);
|
||||
}
|
||||
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
txsBegin() const override
|
||||
{
|
||||
|
||||
@@ -182,6 +182,9 @@ public:
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesEnd() const override;
|
||||
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesUpperBound(uint256 const& key) const override;
|
||||
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
txsBegin() const override;
|
||||
|
||||
|
||||
@@ -191,6 +191,7 @@ public:
|
||||
explicit sles_type (ReadView const& view);
|
||||
iterator begin() const;
|
||||
iterator const& end() const;
|
||||
iterator upper_bound(key_type const& key) const;
|
||||
};
|
||||
|
||||
struct txs_type
|
||||
@@ -332,6 +333,11 @@ public:
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesEnd() const = 0;
|
||||
|
||||
// used by the implementation
|
||||
virtual
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesUpperBound(key_type const& key) const = 0;
|
||||
|
||||
// used by the implementation
|
||||
virtual
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
|
||||
@@ -83,6 +83,9 @@ public:
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesEnd() const override;
|
||||
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
slesUpperBound(uint256 const& key) const override;
|
||||
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
txsBegin() const override;
|
||||
|
||||
|
||||
@@ -83,6 +83,9 @@ public:
|
||||
std::unique_ptr<ReadView::sles_type::iter_base>
|
||||
slesEnd (ReadView const& base) const;
|
||||
|
||||
std::unique_ptr<ReadView::sles_type::iter_base>
|
||||
slesUpperBound (ReadView const& base, uint256 const& key) const;
|
||||
|
||||
private:
|
||||
enum class Action
|
||||
{
|
||||
|
||||
@@ -85,6 +85,13 @@ ApplyViewBase::slesEnd() const ->
|
||||
return base_->slesEnd();
|
||||
}
|
||||
|
||||
auto
|
||||
ApplyViewBase::slesUpperBound(uint256 const& key) const ->
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
{
|
||||
return base_->slesUpperBound(key);
|
||||
}
|
||||
|
||||
auto
|
||||
ApplyViewBase::txsBegin() const ->
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
|
||||
@@ -178,6 +178,13 @@ OpenView::slesEnd() const ->
|
||||
return items_.slesEnd(*base_);
|
||||
}
|
||||
|
||||
auto
|
||||
OpenView::slesUpperBound(uint256 const& key) const ->
|
||||
std::unique_ptr<sles_type::iter_base>
|
||||
{
|
||||
return items_.slesUpperBound(*base_, key);
|
||||
}
|
||||
|
||||
auto
|
||||
OpenView::txsBegin() const ->
|
||||
std::unique_ptr<txs_type::iter_base>
|
||||
|
||||
@@ -41,9 +41,9 @@ public:
|
||||
sles_iter_impl (items_t::const_iterator iter1,
|
||||
items_t::const_iterator end1,
|
||||
ReadView::sles_type::iterator iter0,
|
||||
ReadView::sles_type::iterator base0)
|
||||
ReadView::sles_type::iterator end0)
|
||||
: iter0_ (iter0)
|
||||
, end0_ (base0)
|
||||
, end0_ (end0)
|
||||
, iter1_ (iter1)
|
||||
, end1_ (end1)
|
||||
{
|
||||
@@ -354,5 +354,13 @@ RawStateTable::slesEnd (ReadView const& base) const
|
||||
base.sles.end(), base.sles.end());
|
||||
}
|
||||
|
||||
std::unique_ptr<ReadView::sles_type::iter_base>
|
||||
RawStateTable::slesUpperBound (ReadView const& base, uint256 const& key) const
|
||||
{
|
||||
return std::make_unique<sles_iter_impl>(
|
||||
items_.upper_bound(key), items_.end(),
|
||||
base.sles.upper_bound(key), base.sles.end());
|
||||
}
|
||||
|
||||
} // detail
|
||||
} // ripple
|
||||
|
||||
@@ -144,6 +144,13 @@ ReadView::sles_type::end() const ->
|
||||
return *end_;
|
||||
}
|
||||
|
||||
auto
|
||||
ReadView::sles_type::upper_bound(key_type const& key) const ->
|
||||
iterator
|
||||
{
|
||||
return iterator(view_, view_->slesUpperBound(key));
|
||||
}
|
||||
|
||||
ReadView::txs_type::txs_type(
|
||||
ReadView const& view)
|
||||
: ReadViewFwdRange(view)
|
||||
|
||||
@@ -435,6 +435,12 @@ class View_test
|
||||
view.rawInsert (sle (4));
|
||||
view.rawInsert (sle (5));
|
||||
expect (sles (view) == list (2, 3, 4, 5));
|
||||
auto b = view.sles.begin();
|
||||
expect (view.sles.upper_bound(uint256(1)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(2)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(3)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(4)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(5)) == b);
|
||||
}
|
||||
{
|
||||
setup123 ();
|
||||
@@ -444,6 +450,12 @@ class View_test
|
||||
view.rawInsert (sle (4));
|
||||
view.rawInsert (sle (5));
|
||||
expect (sles (view) == list (3, 4, 5));
|
||||
auto b = view.sles.begin();
|
||||
expect (view.sles.upper_bound(uint256(1)) == b);
|
||||
expect (view.sles.upper_bound(uint256(2)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(3)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(4)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(5)) == b);
|
||||
}
|
||||
{
|
||||
setup123 ();
|
||||
@@ -454,6 +466,12 @@ class View_test
|
||||
view.rawInsert (sle (4));
|
||||
view.rawInsert (sle (5));
|
||||
expect (sles (view) == list (4, 5));
|
||||
auto b = view.sles.begin();
|
||||
expect (view.sles.upper_bound(uint256(1)) == b);
|
||||
expect (view.sles.upper_bound(uint256(2)) == b);
|
||||
expect (view.sles.upper_bound(uint256(3)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(4)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(5)) == b);
|
||||
}
|
||||
{
|
||||
setup123 ();
|
||||
@@ -462,6 +480,13 @@ class View_test
|
||||
view.rawInsert (sle (4));
|
||||
view.rawInsert (sle (5));
|
||||
expect (sles (view) == list (1, 2, 4, 5));
|
||||
auto b = view.sles.begin();
|
||||
++b;
|
||||
expect (view.sles.upper_bound(uint256(1)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(2)) == b);
|
||||
expect (view.sles.upper_bound(uint256(3)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(4)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(5)) == b);
|
||||
}
|
||||
{
|
||||
setup123 ();
|
||||
@@ -475,11 +500,25 @@ class View_test
|
||||
|
||||
view.rawErase (sle (3));
|
||||
expect (sles (view) == list (1, 2));
|
||||
auto b = view.sles.begin();
|
||||
++b;
|
||||
expect (view.sles.upper_bound(uint256(1)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(2)) == b);
|
||||
expect (view.sles.upper_bound(uint256(3)) == b);
|
||||
expect (view.sles.upper_bound(uint256(4)) == b);
|
||||
expect (view.sles.upper_bound(uint256(5)) == b);
|
||||
|
||||
view.rawInsert (sle (5));
|
||||
view.rawInsert (sle (4));
|
||||
view.rawInsert (sle (3));
|
||||
expect (sles (view) == list (1, 2, 3, 4, 5));
|
||||
b = view.sles.begin();
|
||||
++b;
|
||||
expect (view.sles.upper_bound(uint256(1)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(2)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(3)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(4)) == b); ++b;
|
||||
expect (view.sles.upper_bound(uint256(5)) == b);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,9 +77,10 @@ Json::Value doLedgerData (RPC::Context& context)
|
||||
|
||||
Json::Value& nodes = jvResult[jss::state];
|
||||
|
||||
while ((key = lpLedger->succ(*key)))
|
||||
auto e = lpLedger->sles.end();
|
||||
for (auto i = lpLedger->sles.upper_bound(*key); i != e; ++i)
|
||||
{
|
||||
auto sle = lpLedger->read(keylet::unchecked(*key));
|
||||
auto sle = lpLedger->read(keylet::unchecked((*i)->key()));
|
||||
if (limit-- <= 0)
|
||||
{
|
||||
// Stop processing before the current key.
|
||||
|
||||
Reference in New Issue
Block a user