16#ifndef SIMICS_SYSTEMC_AWARENESS_TLM_SPY_FACTORY_H
17#define SIMICS_SYSTEMC_AWARENESS_TLM_SPY_FACTORY_H
37class TlmSpyFactoryInterface {
39 virtual TlmSpyFactoryInterface *create() = 0;
40 virtual TraverserInterface *traverser() = 0;
41 virtual ~TlmSpyFactoryInterface() {}
44template <
typename TYPES = tlm::tlm_base_protocol_types,
45 typename INITIATORPORT = TlmFwTransportIfHandler<intc::sc_port_spy<
46 tlm::tlm_fw_transport_if<TYPES> >, TYPES >,
47 typename TARGETPORT = TlmBwTransportIfHandler<intc::sc_port_spy<
48 tlm::tlm_bw_transport_if<TYPES> >, TYPES >,
49 typename INITIATOREXPORT = TlmBwTransportIfHandler<
50 intc::sc_export_spy<tlm::tlm_bw_transport_if<TYPES> >, TYPES >,
51 typename TARGETEXPORT = TlmFwTransportIfHandler<intc::sc_export_spy<
52 tlm::tlm_fw_transport_if<TYPES> >, TYPES > >
53class TlmSpyFactory :
public TlmSpyFactoryInterface,
public MultiTraverser {
61 add(&multi_initiator_);
63 TlmSpyFactory(
const TlmSpyFactory &f) {
66 TlmSpyFactory &operator = (
const TlmSpyFactory &f) {
69 virtual TlmSpyFactoryInterface *create() {
70 return new TlmSpyFactory(*
this);
72 virtual TraverserInterface *traverser() {
76 port_bw_.bindSpies(export_bw_.get_spies());
77 port_fw_.bindSpies(export_fw_.get_spies());
79 multi_target_.bind_spies(export_bw_.get_spies());
80 port_fw_.bindSpies(multi_target_.get_spies());
82 multi_initiator_.bind_spies(export_fw_.get_spies());
83 port_bw_.bindSpies(multi_initiator_.get_spies());
85 virtual ~TlmSpyFactory() =
default;
88 TlmSpyFactory &deep_copy(
const TlmSpyFactory &f) {
97 add(&multi_initiator_);
101 PortSpyFactory<tlm::tlm_fw_transport_if<TYPES>, INITIATORPORT> port_fw_;
102 ExportSpyFactory<tlm::tlm_bw_transport_if<TYPES>, INITIATOREXPORT>
104 PortSpyFactory<tlm::tlm_bw_transport_if<TYPES>, TARGETPORT> port_bw_;
105 ExportSpyFactory<tlm::tlm_fw_transport_if<TYPES>, TARGETEXPORT> export_fw_;
106 MultiTargetSpyFactory<tlm::tlm_bw_transport_if<TYPES>,
107 TARGETEXPORT, TYPES> multi_target_;
108 MultiInitiatorSpyFactory<tlm::tlm_fw_transport_if<TYPES>,
109 INITIATOREXPORT, TYPES> multi_initiator_;
Definition: pci_bus_interface.h:24