16#ifndef SIMICS_SYSTEMC_AWARENESS_PORT_SPY_FACTORY_H
17#define SIMICS_SYSTEMC_AWARENESS_PORT_SPY_FACTORY_H
23#include <sysc/intc/communication/sc_port_spy.h>
33template <
typename IF,
typename HANDLER>
36 typedef typename std::vector<HANDLER *>::iterator iterator;
37 typedef typename std::map<IF*, intc::sc_port_spy<IF> *>::iterator
40 PortSpyFactory(
const PortSpyFactory &f) {}
41 PortSpyFactory &operator = (
const PortSpyFactory &f) {}
42 virtual ~PortSpyFactory() {
43 for (iterator i = handlers_.begin(); i != handlers_.end(); ++i)
45 for (spy_iterator i = spies_.begin(); i != spies_.end(); ++i)
48 virtual void applyOn(sc_core::sc_object *sc_object) {
49 if (sc_core::sc_port<IF> *if_
50 =
dynamic_cast<sc_core::sc_port<IF> *
>(sc_object)) {
53 intc::sc_port_spy<IF> *spy =
new intc::sc_port_spy<IF>(if_);
54 HANDLER *handler =
new HANDLER(spy);
55 spy->set_spy_interface(handler);
56 handlers_.push_back(handler);
57 spies_[spy->get_interface()] = spy;
59 if (sc_core::sc_port<IF, 0> *if_
60 =
dynamic_cast<sc_core::sc_port<IF, 0> *
>(sc_object)) {
63 for (
int i = 0; i < if_->size(); ++i) {
64 intc::sc_port_spy<IF> *spy =
new intc::sc_port_spy<IF>(if_, i);
65 HANDLER *handler =
new HANDLER(spy);
66 handlers_.push_back(handler);
67 spy->set_spy_interface(handler);
68 spies_[spy->get_interface()] = spy;
72 virtual void done() {}
73 void bindSpies(std::map<IF*, intc::sc_export_spy<IF> *> *exports) {
74 for (spy_iterator i = spies_.begin(); i != spies_.end(); ++i) {
75 if (intc::sc_export_spy<IF> *spy = (*exports)[i->first]) {
76 i->second->set_interface(spy->get_current_interface());
80 void bindSpies(std::map<IF*, IF *> *exports) {
81 for (spy_iterator i = spies_.begin(); i != spies_.end(); ++i) {
82 if (IF *spy = (*exports)[i->first]) {
83 i->second->set_interface(spy);
89 std::vector<HANDLER *> handlers_;
90 std::map<IF*, intc::sc_port_spy<IF> *> spies_;
Definition: traverser_interface.h:26
Definition: pci_bus_interface.h:24