#ifndef BITCOIN_KERNEL_DISCONNECTED_TRANSACTIONS_H
#define BITCOIN_KERNEL_DISCONNECTED_TRANSACTIONS_H
#include <primitives/transaction.h>
#include <util/hasher.h>
#include <list>
#include <unordered_map>
#include <vector>
static const unsigned int MAX_DISCONNECTED_TX_POOL_BYTES{20'000'000};
class DisconnectedBlockTransactions {
private:
uint64_t cachedInnerUsage = 0;
const size_t m_max_mem_usage;
std::list<CTransactionRef> queuedTx;
using TxList = decltype(queuedTx);
std::unordered_map<uint256, TxList::iterator, SaltedTxidHasher> iters_by_txid;
std::vector<CTransactionRef> LimitMemoryUsage();
public:
DisconnectedBlockTransactions(size_t max_mem_usage)
: m_max_mem_usage{max_mem_usage} {}
~DisconnectedBlockTransactions();
size_t DynamicMemoryUsage() const;
[[nodiscard]] std::vector<CTransactionRef> AddTransactionsFromBlock(const std::vector<CTransactionRef>& vtx);
void removeForBlock(const std::vector<CTransactionRef>& vtx);
size_t size() const { return queuedTx.size(); }
void clear();
std::list<CTransactionRef> take();
};
#endif