diff options
Diffstat (limited to 'src/systemc/ext/tlm_utils/peq_with_get.h')
-rw-r--r-- | src/systemc/ext/tlm_utils/peq_with_get.h | 108 |
1 files changed, 55 insertions, 53 deletions
diff --git a/src/systemc/ext/tlm_utils/peq_with_get.h b/src/systemc/ext/tlm_utils/peq_with_get.h index 5c85f25d5..a341c05cf 100644 --- a/src/systemc/ext/tlm_utils/peq_with_get.h +++ b/src/systemc/ext/tlm_utils/peq_with_get.h @@ -21,74 +21,76 @@ // 20-Mar-2009 John Aynsley Add cancel_all() method -#ifndef __PEQ_WITH_GET_H__ -#define __PEQ_WITH_GET_H__ +#ifndef __SYSTEMC_EXT_TLM_UTILS_PEQ_WITH_GET_H__ +#define __SYSTEMC_EXT_TLM_UTILS_PEQ_WITH_GET_H__ -#include <systemc> -//#include <tlm> #include <map> +#include <systemc> -namespace tlm_utils { +namespace tlm_utils +{ template <class PAYLOAD> class peq_with_get : public sc_core::sc_object { -public: - typedef PAYLOAD transaction_type; - typedef std::pair<const sc_core::sc_time, transaction_type*> pair_type; - -public: - peq_with_get(const char* name) : sc_core::sc_object(name) - { - } - - void notify(transaction_type& trans, const sc_core::sc_time& t) - { - m_scheduled_events.insert(pair_type(t + sc_core::sc_time_stamp(), &trans)); - m_event.notify(t); - } - - void notify(transaction_type& trans) - { - m_scheduled_events.insert(pair_type(sc_core::sc_time_stamp(), &trans)); - m_event.notify(); // immediate notification - } - - // needs to be called until it returns 0 - transaction_type* get_next_transaction() - { - if (m_scheduled_events.empty()) { - return 0; + public: + typedef PAYLOAD transaction_type; + typedef std::pair<const sc_core::sc_time, transaction_type *> pair_type; + + public: + peq_with_get(const char *name) : sc_core::sc_object(name) {} + + void + notify(transaction_type &trans, const sc_core::sc_time &t) + { + m_scheduled_events.insert(pair_type(t + sc_core::sc_time_stamp(), + &trans)); + m_event.notify(t); } - sc_core::sc_time now = sc_core::sc_time_stamp(); - if (m_scheduled_events.begin()->first <= now) { - transaction_type* trans = m_scheduled_events.begin()->second; - m_scheduled_events.erase(m_scheduled_events.begin()); - return trans; + void + notify(transaction_type &trans) + { + m_scheduled_events.insert(pair_type(sc_core::sc_time_stamp(), &trans)); + m_event.notify(); // Immediate notification. } - m_event.notify(m_scheduled_events.begin()->first - now); + // Needs to be called until it returns NULL + transaction_type * + get_next_transaction() + { + if (m_scheduled_events.empty()) { + return nullptr; + } - return 0; - } + sc_core::sc_time now = sc_core::sc_time_stamp(); + if (m_scheduled_events.begin()->first <= now) { + transaction_type *trans = m_scheduled_events.begin()->second; + m_scheduled_events.erase(m_scheduled_events.begin()); + return trans; + } - sc_core::sc_event& get_event() - { - return m_event; - } + m_event.notify(m_scheduled_events.begin()->first - now); - // Cancel all events from the event queue - void cancel_all() { - m_scheduled_events.clear(); - m_event.cancel(); - } + return nullptr; + } + + sc_core::sc_event &get_event() { return m_event; } + + // Cancel all events from the event queue. + void + cancel_all() + { + m_scheduled_events.clear(); + m_event.cancel(); + } -private: - std::multimap<const sc_core::sc_time, transaction_type*> m_scheduled_events; - sc_core::sc_event m_event; + private: + std::multimap<const sc_core::sc_time, transaction_type *> + m_scheduled_events; + sc_core::sc_event m_event; }; -} +} // namespace tlm_utils -#endif +#endif /* __SYSTEMC_EXT_TLM_UTILS_PEQ_WITH_GET_H__ */ |