14#ifndef SIMICS_SYSTEMC_IFACE_TRANSACTION_POOL_H
15#define SIMICS_SYSTEMC_IFACE_TRANSACTION_POOL_H
33 typedef tlm::tlm_generic_payload gp_t;
45 static struct :
public tlm::tlm_mm_interface {
46 void free(tlm::tlm_generic_payload *gp)
override {
51 for (std::set<gp_t *>::iterator it = all_payloads_.begin();
52 it != all_payloads_.end(); ++it) {
53 if ((*it)->get_ref_count() == 0) {
56 (*it)->set_mm(&deleter);
64 void free(gp_t *transaction_ptr)
override {
66 if (
auto *ext = transaction_ptr->get_extension<
71 transaction_ptr->reset();
72 simics::systemc::utility::reset_payload(transaction_ptr);
73 pool_.push_back(transaction_ptr);
75 assert(active_cnt_ >= 0 &&
"Active number of GP becomes negative");
86 all_payloads_.insert(gp);
106 std::deque<gp_t *> pool_;
107 std::set<gp_t *> all_payloads_;
Definition: transaction_extension.h:52
A memory manager that implements the tlm::tlm_mm_interface providing a pool of transaction objects.
Definition: transaction_pool.h:32
int active_cnt() const
Definition: transaction_pool.h:100
void free(gp_t *transaction_ptr) override
Definition: transaction_pool.h:64
unsigned PoolSize() const
Definition: transaction_pool.h:96
TransactionPool()
Definition: transaction_pool.h:36
~TransactionPool()
Definition: transaction_pool.h:40
Transaction acquire()
Definition: transaction_pool.h:78
Class that encapsulates a generic_payload and returns it to the TransactionPool when the Transaction ...
Definition: transaction.h:29