Branch data Line data Source code
# 1 : : // Copyright (c) 2015-2018 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 : 376400 : static inline size_t RecursiveDynamicUsage(const CScript& script) { # 13 : 376400 : return memusage::DynamicUsage(script); # 14 : 376400 : } # 15 : : # 16 : 138771 : static inline size_t RecursiveDynamicUsage(const COutPoint& out) { # 17 : 138771 : return 0; # 18 : 138771 : } # 19 : : # 20 : 138771 : static inline size_t RecursiveDynamicUsage(const CTxIn& in) { # 21 : 138771 : size_t mem = RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout) + memusage::DynamicUsage(in.scriptWitness.stack); # 22 [ + + ][ + + ]: 1115727 : for (std::vector<std::vector<unsigned char> >::const_iterator it = in.scriptWitness.stack.begin(); it != in.scriptWitness.stack.end(); it++) { # [ + + ] # 23 : 976956 : mem += memusage::DynamicUsage(*it); # 24 : 976956 : } # 25 : 138771 : return mem; # 26 : 138771 : } # 27 : : # 28 : 237629 : static inline size_t RecursiveDynamicUsage(const CTxOut& out) { # 29 : 237629 : return RecursiveDynamicUsage(out.scriptPubKey); # 30 : 237629 : } # 31 : : # 32 : 97025 : static inline size_t RecursiveDynamicUsage(const CTransaction& tx) { # 33 : 97025 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout); # 34 [ + + ][ + + ]: 235796 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) { # [ + + ] # 35 : 138771 : mem += RecursiveDynamicUsage(*it); # 36 : 138771 : } # 37 [ + + ][ + + ]: 334654 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) { # [ + + ] # 38 : 237629 : mem += RecursiveDynamicUsage(*it); # 39 : 237629 : } # 40 : 97025 : return mem; # 41 : 97025 : } # 42 : : # 43 : 0 : static inline size_t RecursiveDynamicUsage(const CMutableTransaction& tx) { # 44 : 0 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout); # 45 : 0 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) { # 46 : 0 : mem += RecursiveDynamicUsage(*it); # 47 : 0 : } # 48 : 0 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) { # 49 : 0 : mem += RecursiveDynamicUsage(*it); # 50 : 0 : } # 51 : 0 : return mem; # 52 : 0 : } # 53 : : # 54 : 0 : static inline size_t RecursiveDynamicUsage(const CBlock& block) { # 55 : 0 : size_t mem = memusage::DynamicUsage(block.vtx); # 56 : 0 : for (const auto& tx : block.vtx) { # 57 : 0 : mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx); # 58 : 0 : } # 59 : 0 : return mem; # 60 : 0 : } # 61 : : # 62 : 0 : static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) { # 63 : 0 : return memusage::DynamicUsage(locator.vHave); # 64 : 0 : } # 65 : : # 66 : : template<typename X> # 67 : 96946 : static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) { # 68 [ + - ][ + - ]: 96946 : return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0; # 69 : 96946 : } # 70 : : # 71 : : #endif // BITCOIN_CORE_MEMUSAGE_H