Line data Source code
1 : // Copyright (c) 2015 The Bitcoin Core developers 2 : // Distributed under the MIT software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #ifndef BITCOIN_CORE_MEMUSAGE_H 6 : #define BITCOIN_CORE_MEMUSAGE_H 7 : 8 : #include <primitives/transaction.h> 9 : #include <primitives/block.h> 10 : #include <memusage.h> 11 : 12 62095 : static inline size_t RecursiveDynamicUsage(const CScript& script) { 13 62095 : return memusage::DynamicUsage(script); 14 : } 15 : 16 27912 : static inline size_t RecursiveDynamicUsage(const COutPoint& out) { 17 27912 : return 0; 18 : } 19 : 20 27912 : static inline size_t RecursiveDynamicUsage(const CTxIn& in) { 21 27912 : return RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout); 22 : } 23 : 24 34183 : static inline size_t RecursiveDynamicUsage(const CTxOut& out) { 25 34183 : return RecursiveDynamicUsage(out.scriptPubKey); 26 : } 27 : 28 27462 : static inline size_t RecursiveDynamicUsage(const CTransaction& tx) { 29 27462 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout); 30 55374 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) { 31 27912 : mem += RecursiveDynamicUsage(*it); 32 27912 : } 33 61645 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) { 34 34183 : mem += RecursiveDynamicUsage(*it); 35 34183 : } 36 27462 : return mem; 37 : } 38 : 39 : static inline size_t RecursiveDynamicUsage(const CMutableTransaction& tx) { 40 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout); 41 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) { 42 : mem += RecursiveDynamicUsage(*it); 43 : } 44 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) { 45 : mem += RecursiveDynamicUsage(*it); 46 : } 47 : return mem; 48 : } 49 : 50 : static inline size_t RecursiveDynamicUsage(const CBlock& block) { 51 : size_t mem = memusage::DynamicUsage(block.vtx); 52 : for (const auto& tx : block.vtx) { 53 : mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx); 54 : } 55 : return mem; 56 : } 57 : 58 : static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) { 59 : return memusage::DynamicUsage(locator.vHave); 60 : } 61 : 62 : template<typename X> 63 27462 : static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) { 64 27462 : return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0; 65 : } 66 : 67 : #endif // BITCOIN_CORE_MEMUSAGE_H