Fabcoin Core  0.16.2
P2P Digital Currency
core_memusage.h
Go to the documentation of this file.
1 // Copyright (c) 2015-2017 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 FABCOIN_CORE_MEMUSAGE_H
6 #define FABCOIN_CORE_MEMUSAGE_H
7 
9 #include <primitives/block.h>
10 #include <memusage.h>
11 
12 static inline size_t RecursiveDynamicUsage(const CScript& script) {
13  return memusage::DynamicUsage(script);
14 }
15 
16 static inline size_t RecursiveDynamicUsage(const COutPoint& out) {
17  return 0;
18 }
19 
20 static inline size_t RecursiveDynamicUsage(const CTxIn& in) {
21  size_t mem = RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout) + memusage::DynamicUsage(in.scriptWitness.stack);
22  for (std::vector<std::vector<unsigned char> >::const_iterator it = in.scriptWitness.stack.begin(); it != in.scriptWitness.stack.end(); it++) {
23  mem += memusage::DynamicUsage(*it);
24  }
25  return mem;
26 }
27 
28 static inline size_t RecursiveDynamicUsage(const CTxOut& out) {
29  return RecursiveDynamicUsage(out.scriptPubKey);
30 }
31 
32 static inline size_t RecursiveDynamicUsage(const CTransaction& tx) {
33  size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);
34  for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {
35  mem += RecursiveDynamicUsage(*it);
36  }
37  for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {
38  mem += RecursiveDynamicUsage(*it);
39  }
40  return mem;
41 }
42 
43 static inline size_t RecursiveDynamicUsage(const CMutableTransaction& tx) {
44  size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);
45  for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {
46  mem += RecursiveDynamicUsage(*it);
47  }
48  for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {
49  mem += RecursiveDynamicUsage(*it);
50  }
51  return mem;
52 }
53 
54 static inline size_t RecursiveDynamicUsage(const CBlock& block) {
55  size_t mem = memusage::DynamicUsage(block.vtx);
56  for (const auto& tx : block.vtx) {
57  mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx);
58  }
59  return mem;
60 }
61 
62 static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) {
63  return memusage::DynamicUsage(locator.vHave);
64 }
65 
66 template<typename X>
67 static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) {
68  return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0;
69 }
70 
71 #endif // FABCOIN_CORE_MEMUSAGE_H
Describes a place in the block chain to another node such that if the other node doesn&#39;t have the sam...
Definition: block.h:251
CScript scriptPubKey
Definition: transaction.h:135
Definition: block.h:155
std::vector< CTxIn > vin
Definition: transaction.h:392
CScriptWitness scriptWitness
Definition: transaction.h:67
std::vector< std::vector< unsigned char > > stack
Definition: script.h:724
const std::vector< CTxIn > vin
Definition: transaction.h:292
An input of a transaction.
Definition: transaction.h:61
const std::vector< CTxOut > vout
Definition: transaction.h:293
An output of a transaction.
Definition: transaction.h:131
std::vector< uint256 > vHave
Definition: block.h:253
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:18
std::vector< CTxOut > vout
Definition: transaction.h:393
CScript scriptSig
Definition: transaction.h:65
std::vector< CTransactionRef > vtx
Definition: block.h:159
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:417
A mutable version of CTransaction.
Definition: transaction.h:390
The basic transaction that is broadcasted on the network and contained in blocks. ...
Definition: transaction.h:275
COutPoint prevout
Definition: transaction.h:64