From 29d86eba554247f34fa55f23900691dacfecfdb2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 14 May 2013 18:36:14 -0700 Subject: [PATCH] Cache for immutable LES's. --- src/cpp/ripple/LedgerEntrySet.cpp | 8 ++++---- src/cpp/ripple/LedgerEntrySet.h | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index beb34a19d3..0931b82fca 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -94,7 +94,7 @@ SLE::pointer LedgerEntrySet::entryCache(LedgerEntryType letType, const uint256& if (!sleEntry) { assert(action != taaDELETE); - sleEntry = mLedger->getSLE(index); + sleEntry = mImmutable ? mLedger->getSLEi(index) : mLedger->getSLE(index); if (sleEntry) entryCache(sleEntry); } @@ -138,7 +138,7 @@ void LedgerEntrySet::entryCache(SLE::ref sle) void LedgerEntrySet::entryCreate(SLE::ref sle) { - assert(mLedger); + assert(mLedger && !mImmutable); assert(sle->isMutable()); std::map::iterator it = mEntries.find(sle->getIndex()); if (it == mEntries.end()) @@ -175,7 +175,7 @@ void LedgerEntrySet::entryCreate(SLE::ref sle) void LedgerEntrySet::entryModify(SLE::ref sle) { - assert(sle->isMutable()); + assert(sle->isMutable() && !mImmutable); assert(mLedger); std::map::iterator it = mEntries.find(sle->getIndex()); if (it == mEntries.end()) @@ -209,7 +209,7 @@ void LedgerEntrySet::entryModify(SLE::ref sle) void LedgerEntrySet::entryDelete(SLE::ref sle) { - assert(sle->isMutable()); + assert(sle->isMutable() && !mImmutable); assert(mLedger); std::map::iterator it = mEntries.find(sle->getIndex()); if (it == mEntries.end()) diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 47962cdb19..8a4267b8b9 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -56,6 +56,7 @@ protected: TransactionMetaSet mSet; TransactionEngineParams mParams; int mSeq; + bool mImmutable; LedgerEntrySet(Ledger::ref ledger, const std::map &e, const TransactionMetaSet& s, int m) : mLedger(ledger), mEntries(e), mSet(s), mParams(tapNONE), mSeq(m) { ; } @@ -72,11 +73,14 @@ protected: public: - LedgerEntrySet(Ledger::ref ledger, TransactionEngineParams tep) : mLedger(ledger), mParams(tep), mSeq(0) { ; } + LedgerEntrySet(Ledger::ref ledger, TransactionEngineParams tep, bool immutable = false) : + mLedger(ledger), mParams(tep), mSeq(0), mImmutable(immutable) { ; } - LedgerEntrySet() : mParams(tapNONE), mSeq(0) { ; } + LedgerEntrySet() : mParams(tapNONE), mSeq(0), mImmutable(false) { ; } // set functions + void setImmutable() { mImmutable = true; } + bool isImmutable() const { return mImmutable; } LedgerEntrySet duplicate() const; // Make a duplicate of this set void setTo(const LedgerEntrySet&); // Set this set to have the same contents as another void swapWith(LedgerEntrySet&); // Swap the contents of two sets