diff options
author | Kaz Wesley <keziahw@gmail.com> | 2016-04-30 21:45:26 -0700 |
---|---|---|
committer | Kaz Wesley <keziahw@gmail.com> | 2016-06-02 12:31:51 -0700 |
commit | 9805f4af7ecb6becf8a146bd845fb131ffa625c9 (patch) | |
tree | 4be823065e49b4bd5bbe50e19b7c1d7a1b4bf929 /src/txmempool.h | |
parent | 03cf6e86750218f633498210923544f4a6c3c020 (diff) |
mapNextTx: use pointer as key, simplify value
Saves about 10% of application memory usage once the mempool warms up. Since the
mempool is DynamicUsage-regulated, this will translate to a larger mempool in
the same amount of space.
Map value type: eliminate the vin index; no users of the map need to know which
input of the transaction is spending the prevout.
Map key type: replace the COutPoint with a pointer to a COutPoint. A COutPoint
is 36 bytes, but each COutPoint is accessible from the same map entry's value.
A trivial DereferencingComparator functor allows indirect map keys, but the
resulting syntax is misleading: `map.find(&outpoint)`. Implement an indirectmap
that acts as a wrapper to a map that uses a DereferencingComparator, supporting
a syntax that accurately reflect the container's semantics: inserts and
iterators use pointers since they store pointers and need them to remain
constant and dereferenceable, but lookup functions take const references.
Diffstat (limited to 'src/txmempool.h')
-rw-r--r-- | src/txmempool.h | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/src/txmempool.h b/src/txmempool.h index de4ba0b371..7ad5579a06 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -11,6 +11,7 @@ #include "amount.h" #include "coins.h" +#include "indirectmap.h" #include "primitives/transaction.h" #include "sync.h" @@ -305,20 +306,6 @@ struct ancestor_score {}; class CBlockPolicyEstimator; -/** An inpoint - a combination of a transaction and an index n into its vin */ -class CInPoint -{ -public: - const CTransaction* ptx; - uint32_t n; - - CInPoint() { SetNull(); } - CInPoint(const CTransaction* ptxIn, uint32_t nIn) { ptx = ptxIn; n = nIn; } - void SetNull() { ptx = NULL; n = (uint32_t) -1; } - bool IsNull() const { return (ptx == NULL && n == (uint32_t) -1); } - size_t DynamicMemoryUsage() const { return 0; } -}; - /** * CTxMemPool stores valid-according-to-the-current-best-chain * transactions that may be included in the next block. @@ -477,7 +464,7 @@ private: void UpdateChild(txiter entry, txiter child, bool add); public: - std::map<COutPoint, CInPoint> mapNextTx; + indirectmap<COutPoint, const CTransaction*> mapNextTx; std::map<uint256, std::pair<double, CAmount> > mapDeltas; /** Create a new CTxMemPool. |