From 5217c9205334c9a173108f3d24401dd2cf84544e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 15 Nov 2012 09:05:01 -0800 Subject: [PATCH] Let's use one simple general-purpose function rathern than five complex special-purpose ones. --- src/cpp/ripple/ValidationCollection.cpp | 30 +++++++++++++++++++++++++ src/cpp/ripple/ValidationCollection.h | 1 + 2 files changed, 31 insertions(+) diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index eded830c6..acb6c2c4b 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -189,6 +189,36 @@ int ValidationCollection::getLoadRatio(bool overLoaded) return (goodNodes * 100) / (goodNodes + badNodes); } +std::list ValidationCollection::getCurrentTrustedValidations() +{ + uint32 cutoff = theApp->getOPs().getNetworkTimeNC() - LEDGER_VAL_INTERVAL; + + std::list ret; + + boost::mutex::scoped_lock sl(mValidationLock); + boost::unordered_map::iterator it = mCurrentValidations.begin(); + while (it != mCurrentValidations.end()) + { + if (!it->second) // contains no record + it = mCurrentValidations.erase(it); + else if (it->second->getSignTime() < cutoff) + { // contains a stale record + mStaleValidations.push_back(it->second); + it->second.reset(); + condWrite(); + it = mCurrentValidations.erase(it); + } + else + { // contains a live record + if (it->second->isTrusted()) + ret.push_back(it->second); + ++it; + } + } + + return ret; +} + boost::unordered_map ValidationCollection::getCurrentValidations(uint256 currentLedger) { diff --git a/src/cpp/ripple/ValidationCollection.h b/src/cpp/ripple/ValidationCollection.h index 51f60a5a9..d8ecd791e 100644 --- a/src/cpp/ripple/ValidationCollection.h +++ b/src/cpp/ripple/ValidationCollection.h @@ -46,6 +46,7 @@ public: int getLoadRatio(bool overLoaded); boost::unordered_map getCurrentValidations(uint256 currentLedger); + std::list getCurrentTrustedValidations(); void flush(); void sweep() { mValidations.sweep(); }