From f9e8a77d9042960494639f5a6f220cb41eaa6a2c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 24 Jul 2012 13:27:57 -0700 Subject: [PATCH] Bugfix and some more missing pieces. --- src/TransactionMeta.cpp | 36 ++++++++++++++++++++++++++++++++++-- src/TransactionMeta.h | 6 +++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/TransactionMeta.cpp b/src/TransactionMeta.cpp index b1c80d348d..4c3eee3c3d 100644 --- a/src/TransactionMeta.cpp +++ b/src/TransactionMeta.cpp @@ -99,7 +99,7 @@ TransactionMetaNode::TransactionMetaNode(const uint256& node, SerializerIterator { type = sit.get8(); if (type == TransactionMetaNodeEntry::TMNChangedBalance) - mEntries.push_back(boost::shared_ptr(new TMNEBalance(sit))); + mEntries.insert(boost::shared_ptr(new TMNEBalance(sit))); else if (type != TransactionMetaNodeEntry::TMNEndOfMetadata) throw std::runtime_error("Unparseable metadata"); } while (type != TransactionMetaNodeEntry::TMNEndOfMetadata); @@ -110,12 +110,28 @@ void TransactionMetaNode::addRaw(Serializer& s) const s.add256(mNode); s.add256(mPreviousTransaction); s.add32(mPreviousLedger); - for (std::list::const_iterator it = mEntries.begin(), end = mEntries.end(); + for (std::set::const_iterator it = mEntries.begin(), end = mEntries.end(); it != end; ++it) (*it)->addRaw(s); s.add8(TransactionMetaNodeEntry::TMNEndOfMetadata); } +Json::Value TransactionMetaNode::getJson(int v) const +{ + Json::Value ret = Json::objectValue; + ret["node"] = mNode.GetHex(); + ret["previous_transaction"] = mPreviousTransaction.GetHex(); + ret["previous_ledger"] = mPreviousLedger; + + Json::Value e = Json::arrayValue; + for (std::set::const_iterator it = mEntries.begin(), end = mEntries.end(); + it != end; ++it) + e.append((*it)->getJson(v)); + ret["entries"] = e; + + return ret; +} + TransactionMetaSet::TransactionMetaSet(uint32 ledger, const std::vector& vec) : mLedger(ledger) { Serializer s(vec); @@ -140,3 +156,19 @@ void TransactionMetaSet::addRaw(Serializer& s) const it->addRaw(s); s.add256(uint256()); } + +Json::Value TransactionMetaSet::getJson(int v) const +{ + Json::Value ret = Json::objectValue; + + ret["transaction_id"] = mTransactionID.GetHex(); + ret["ledger"] = mLedger; + + Json::Value e = Json::arrayValue; + for (std::set::const_iterator it = mNodes.begin(), end = mNodes.end(); + it != end; ++it) + e.append(it->getJson(v)); + ret["nodes_affected"] = e; + + return ret; +} diff --git a/src/TransactionMeta.h b/src/TransactionMeta.h index 737186c54a..4805562e5c 100644 --- a/src/TransactionMeta.h +++ b/src/TransactionMeta.h @@ -2,7 +2,6 @@ #define __TRANSACTIONMETA__ #include -#include #include #include @@ -78,7 +77,7 @@ protected: uint256 mNode; uint256 mPreviousTransaction; uint32 mPreviousLedger; - std::list mEntries; + std::set mEntries; public: TransactionMetaNode(const uint256 &node) : mNode(node) { ; } @@ -86,7 +85,7 @@ public: const uint256& getNode() const { return mNode; } const uint256& getPreviousTransaction() const { return mPreviousTransaction; } uint32 getPreviousLedger() const { return mPreviousLedger; } - const std::list& peekEntries() const { return mEntries; } + const std::set& peekEntries() const { return mEntries; } bool operator<(const TransactionMetaNode& n) const { return mNode < n.mNode; } bool operator<=(const TransactionMetaNode& n) const { return mNode <= n.mNode; } @@ -95,6 +94,7 @@ public: TransactionMetaNode(const uint256&node, SerializerIterator&); void addRaw(Serializer&) const; + Json::Value getJson(int) const; }; class TransactionMetaSet