14#ifndef SIMICS_SYSTEMC_AWARENESS_TLM_SPY_FACTORY_REGISTRY_H
15#define SIMICS_SYSTEMC_AWARENESS_TLM_SPY_FACTORY_REGISTRY_H
29class TlmSpyFactoryRegistry :
public MultiTraverser {
31 TlmSpyFactoryRegistry() {
33 TlmSpyFactoryRegistry(
const TlmSpyFactoryRegistry &r) {
36 TlmSpyFactoryRegistry &operator=(
const TlmSpyFactoryRegistry &r) {
40 virtual ~TlmSpyFactoryRegistry() {
41 for (
auto *traverser : traversers_)
44 template <
typename TYPES>
45 void createSpyFactory() {
46 for (
auto *traverser : traversers_) {
47 if (
dynamic_cast<TlmSpyFactory<TYPES> *
>(traverser))
51 add(
new TlmSpyFactory<TYPES>());
55 TlmSpyFactoryRegistry &deepCopy(
const TlmSpyFactoryRegistry &r) {
59 for (
auto *traverser : r.traversers_) {
60 TlmSpyFactoryInterface *f =
61 dynamic_cast<TlmSpyFactoryInterface *
>(traverser);
63 add(f->create()->traverser());