From ce2e1cea33d7984c1bcd37a654380e231e3197e0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 27 Jul 2012 12:56:28 -0700 Subject: [PATCH] Beging merging transaction metadata code with ledger entry set code. --- src/LedgerEntrySet.cpp | 17 ++++++++++++++++- src/LedgerEntrySet.h | 8 ++++++-- src/TransactionEngine.cpp | 2 +- src/TransactionMeta.cpp | 13 +++++++++++++ src/TransactionMeta.h | 8 ++++++-- 5 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/LedgerEntrySet.cpp b/src/LedgerEntrySet.cpp index 627352d885..e325b47dee 100644 --- a/src/LedgerEntrySet.cpp +++ b/src/LedgerEntrySet.cpp @@ -2,20 +2,35 @@ #include +void LedgerEntrySet::init(const uint256& transactionID, uint32 ledgerID) +{ + mEntries.clear(); + mSet.init(transactionID, ledgerID); + mSeq = 0; +} + +void LedgerEntrySet::clear() +{ + mEntries.clear(); + mSet.clear(); +} + LedgerEntrySet LedgerEntrySet::duplicate() { - return LedgerEntrySet(mEntries, mSeq + 1); + return LedgerEntrySet(mEntries, mSet, mSeq + 1); } void LedgerEntrySet::setTo(LedgerEntrySet& e) { mEntries = e.mEntries; + mSet = e.mSet; mSeq = e.mSeq; } void LedgerEntrySet::swapWith(LedgerEntrySet& e) { std::swap(mSeq, e.mSeq); + mSet.swap(e.mSet); mEntries.swap(e.mEntries); } diff --git a/src/LedgerEntrySet.h b/src/LedgerEntrySet.h index b44e4a9421..01312e0b52 100644 --- a/src/LedgerEntrySet.h +++ b/src/LedgerEntrySet.h @@ -4,6 +4,7 @@ #include #include "SerializedLedger.h" +#include "TransactionMeta.h" enum LedgerEntryAction { @@ -30,9 +31,11 @@ class LedgerEntrySet { protected: boost::unordered_map mEntries; + TransactionMetaSet mSet; int mSeq; - LedgerEntrySet(const boost::unordered_map &e, int m) : mEntries(e), mSeq(m) { ; } + LedgerEntrySet(const boost::unordered_map &e, TransactionMetaSet& s, int m) : + mEntries(e), mSet(s), mSeq(m) { ; } public: LedgerEntrySet() : mSeq(0) { ; } @@ -44,7 +47,8 @@ public: int getSeq() const { return mSeq; } void bumpSeq() { ++mSeq; } - void clear() { mEntries.empty(); mSeq = 0; } + void init(const uint256& transactionID, uint32 ledgerID); + void clear(); // basic entry functions SLE::pointer getEntry(const uint256& index, LedgerEntryAction&); diff --git a/src/TransactionEngine.cpp b/src/TransactionEngine.cpp index 3fce70bdd7..a3fadeb840 100644 --- a/src/TransactionEngine.cpp +++ b/src/TransactionEngine.cpp @@ -796,7 +796,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran Log(lsTRACE) << "applyTransaction>"; assert(mLedger); mLedgerParentCloseTime = mLedger->getParentCloseTimeNC(); - mNodes.clear(); + mNodes.init(txn.getTransactionID(), mLedger->getLedgerSeq()); #ifdef DEBUG if (1) diff --git a/src/TransactionMeta.cpp b/src/TransactionMeta.cpp index fac9798f26..7948057856 100644 --- a/src/TransactionMeta.cpp +++ b/src/TransactionMeta.cpp @@ -217,3 +217,16 @@ const TransactionMetaNode& TransactionMetaSet::peekAffectedNode(const uint256& n return *it; throw std::runtime_error("Affected node not found"); } + +void TransactionMetaSet::init(const uint256& id, uint32 ledger) +{ + mTransactionID = id; + mLedger = ledger; + mNodes.clear(); +} + +void TransactionMetaSet::swap(TransactionMetaSet& s) +{ + assert((mTransactionID == s.mTransactionID) && (mLedger == s.mLedger)); + mNodes.swap(s.mNodes); +} diff --git a/src/TransactionMeta.h b/src/TransactionMeta.h index db84452d87..a0685a1496 100644 --- a/src/TransactionMeta.h +++ b/src/TransactionMeta.h @@ -115,10 +115,14 @@ protected: std::set mNodes; public: - TransactionMetaSet(const uint256& txID, uint32 ledger) : mTransactionID(txID), mLedger(ledger) - { ; } + TransactionMetaSet() : mLedger(0) { ; } + TransactionMetaSet(const uint256& txID, uint32 ledger) : mTransactionID(txID), mLedger(ledger) { ; } TransactionMetaSet(uint32 ledger, const std::vector&); + void init(const uint256& transactionID, uint32 ledger); + void clear() { mNodes.clear(); } + void swap(TransactionMetaSet&); + bool isNodeAffected(const uint256&) const; TransactionMetaNode getAffectedNode(const uint256&); const TransactionMetaNode& peekAffectedNode(const uint256&) const;