16#ifndef SIMICS_SYSTEMC_IFACE_TRANSACTION_POOL_H
17#define SIMICS_SYSTEMC_IFACE_TRANSACTION_POOL_H
35 typedef tlm::tlm_generic_payload gp_t;
47 static struct :
public tlm::tlm_mm_interface {
48 void free(tlm::tlm_generic_payload *gp)
override {
53 for (std::set<gp_t *>::iterator it = all_payloads_.begin();
54 it != all_payloads_.end(); ++it) {
55 if ((*it)->get_ref_count() == 0) {
58 (*it)->set_mm(&deleter);
66 void free(gp_t *transaction_ptr)
override {
68 if (
auto *ext = transaction_ptr->get_extension<
73 transaction_ptr->reset();
74 simics::systemc::utility::reset_payload(transaction_ptr);
75 pool_.push_back(transaction_ptr);
77 assert(active_cnt_ >= 0 &&
"Active number of GP becomes negative");
88 all_payloads_.insert(gp);
108 std::deque<gp_t *> pool_;
109 std::set<gp_t *> all_payloads_;
Definition: transaction_extension.h:54
A memory manager that implements the tlm::tlm_mm_interface providing a pool of transaction objects.
Definition: transaction_pool.h:34
int active_cnt() const
Definition: transaction_pool.h:102
void free(gp_t *transaction_ptr) override
Definition: transaction_pool.h:66
unsigned PoolSize() const
Definition: transaction_pool.h:98
TransactionPool()
Definition: transaction_pool.h:38
~TransactionPool()
Definition: transaction_pool.h:42
Transaction acquire()
Definition: transaction_pool.h:80
Class that encapsulates a generic_payload and returns it to the TransactionPool when the Transaction ...
Definition: transaction.h:31