Remove unused var UNLIKELY_PCT from fees.h
[bitcoinplatinum.git] / src / undo.h
blobd4fc84c90c0d026efcdd96360984e76eeeb6f5a9
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
6 #ifndef BITCOIN_UNDO_H
7 #define BITCOIN_UNDO_H
9 #include "compressor.h"
10 #include "primitives/transaction.h"
11 #include "serialize.h"
13 /** Undo information for a CTxIn
15 * Contains the prevout's CTxOut being spent, and if this was the
16 * last output of the affected transaction, its metadata as well
17 * (coinbase or not, height, transaction version)
19 class CTxInUndo
21 public:
22 CTxOut txout; // the txout data before being spent
23 bool fCoinBase; // if the outpoint was the last unspent: whether it belonged to a coinbase
24 unsigned int nHeight; // if the outpoint was the last unspent: its height
25 int nVersion; // if the outpoint was the last unspent: its version
27 CTxInUndo() : txout(), fCoinBase(false), nHeight(0), nVersion(0) {}
28 CTxInUndo(const CTxOut &txoutIn, bool fCoinBaseIn = false, unsigned int nHeightIn = 0, int nVersionIn = 0) : txout(txoutIn), fCoinBase(fCoinBaseIn), nHeight(nHeightIn), nVersion(nVersionIn) { }
30 unsigned int GetSerializeSize(int nType, int nVersion) const {
31 return ::GetSerializeSize(VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion) +
32 (nHeight > 0 ? ::GetSerializeSize(VARINT(this->nVersion), nType, nVersion) : 0) +
33 ::GetSerializeSize(CTxOutCompressor(REF(txout)), nType, nVersion);
36 template<typename Stream>
37 void Serialize(Stream &s, int nType, int nVersion) const {
38 ::Serialize(s, VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion);
39 if (nHeight > 0)
40 ::Serialize(s, VARINT(this->nVersion), nType, nVersion);
41 ::Serialize(s, CTxOutCompressor(REF(txout)), nType, nVersion);
44 template<typename Stream>
45 void Unserialize(Stream &s, int nType, int nVersion) {
46 unsigned int nCode = 0;
47 ::Unserialize(s, VARINT(nCode), nType, nVersion);
48 nHeight = nCode / 2;
49 fCoinBase = nCode & 1;
50 if (nHeight > 0)
51 ::Unserialize(s, VARINT(this->nVersion), nType, nVersion);
52 ::Unserialize(s, REF(CTxOutCompressor(REF(txout))), nType, nVersion);
56 /** Undo information for a CTransaction */
57 class CTxUndo
59 public:
60 // undo information for all txins
61 std::vector<CTxInUndo> vprevout;
63 ADD_SERIALIZE_METHODS;
65 template <typename Stream, typename Operation>
66 inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
67 READWRITE(vprevout);
71 /** Undo information for a CBlock */
72 class CBlockUndo
74 public:
75 std::vector<CTxUndo> vtxundo; // for all but the coinbase
77 ADD_SERIALIZE_METHODS;
79 template <typename Stream, typename Operation>
80 inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
81 READWRITE(vtxundo);
85 #endif // BITCOIN_UNDO_H