From 1213f34d754d447638d2bfc0d1bb7b74978b893d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 31 Jul 2012 01:01:50 -0700 Subject: [PATCH] More pieces. --- src/TransactionMeta.cpp | 32 +++++++++++++++++++++++++++++--- src/TransactionMeta.h | 4 ++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/TransactionMeta.cpp b/src/TransactionMeta.cpp index 6594dc0392..d1f4840e72 100644 --- a/src/TransactionMeta.cpp +++ b/src/TransactionMeta.cpp @@ -101,6 +101,12 @@ Json::Value TMNEUnfunded::getJson(int) const return Json::Value("delete_unfunded"); } +void TMNEUnfunded::setBalances(const STAmount& first, const STAmount& second) +{ + firstAmount = first; + secondAmount = second; +} + int TMNEUnfunded::compare(const TransactionMetaNodeEntry&) const { assert(false); // Can't be two deletes for same node @@ -137,6 +143,20 @@ void TransactionMetaNode::addRaw(Serializer& s) s.add8(TransactionMetaNodeEntry::TMNEndOfMetadata); } +TransactionMetaNodeEntry* TransactionMetaNode::findEntry(int nodeType) +{ + for (boost::ptr_vector::iterator it = mEntries.begin(), end = mEntries.end(); + it != end; ++it) + if (it->getType() == nodeType) + return &*it; + return NULL; +} + +void TransactionMetaNode::addNode(TransactionMetaNodeEntry* node) +{ + mEntries.push_back(node); +} + void TransactionMetaNode::thread(const uint256& prevTx, uint32 prevLgr) { assert((mPreviousLedger == 0) || (mPreviousLedger == prevLgr)); @@ -241,8 +261,14 @@ void TransactionMetaSet::threadNode(const uint256& node, const uint256& prevTx, modifyNode(node).thread(prevTx, prevLgr); } -bool TransactionMetaSet::deleteUnfunded(const uint256& node, const STAmount& firstBalance, const STAmount &secondBalance) +bool TransactionMetaSet::deleteUnfunded(const uint256& nodeID, + const STAmount& firstBalance, const STAmount &secondBalance) { - // WRITEME - return true; + TransactionMetaNode& node = modifyNode(nodeID); + TMNEUnfunded* entry = dynamic_cast(node.findEntry(TransactionMetaNodeEntry::TMNDeleteUnfunded)); + if (entry) + entry->setBalances(firstBalance, secondBalance); + else + node.addNode(new TMNEUnfunded(firstBalance, secondBalance)); + return true; } diff --git a/src/TransactionMeta.h b/src/TransactionMeta.h index cc1bd50659..5765034186 100644 --- a/src/TransactionMeta.h +++ b/src/TransactionMeta.h @@ -84,6 +84,7 @@ public: TMNEUnfunded() : TransactionMetaNodeEntry(TMNDeleteUnfunded) { ; } TMNEUnfunded(const STAmount& f, const STAmount& s) : TransactionMetaNodeEntry(TMNDeleteUnfunded), firstAmount(f), secondAmount(s) { ; } + void setBalances(const STAmount& firstBalance, const STAmount& secondBalance); virtual void addRaw(Serializer&) const; virtual Json::Value getJson(int) const; virtual int compare(const TransactionMetaNodeEntry&) const; @@ -112,6 +113,9 @@ public: uint32 getPreviousLedger() const { return mPreviousLedger; } const boost::ptr_vector& peekEntries() const { return mEntries; } + TransactionMetaNodeEntry* findEntry(int nodeType); + void addNode(TransactionMetaNodeEntry*); + bool operator<(const TransactionMetaNode& n) const { return mNode < n.mNode; } bool operator<=(const TransactionMetaNode& n) const { return mNode <= n.mNode; } bool operator>(const TransactionMetaNode& n) const { return mNode > n.mNode; }