16#ifndef SIMICS_SYSTEMC_INJECTION_INJECT_REGISTRY_H
17#define SIMICS_SYSTEMC_INJECTION_INJECT_REGISTRY_H
36template <
typename TPAYLOAD>
40 gp_ =
new TPAYLOAD(
this);
42 attr_value_t attrCopy = SIM_attr_copy(*attr);
43 gpAttrCopies_.insert(std::make_pair(gp_, attrCopy));
62 struct ReleasedInvoker {
69 virtual void free(tlm::tlm_generic_payload *gp) {
71 Registry<InjectInterface<TPAYLOAD> >::instance()->reverseIterate(
74 typename std::map<TPAYLOAD *, attr_value_t>::iterator i;
75 i = gpAttrCopies_.find(gp);
76 if (i != gpAttrCopies_.end()) {
77 SIM_attr_free(&i->second);
78 gpAttrCopies_.erase(i);
85 ReleasedInvoker released_;
86 AttrDictParser *parser_;
87 std::map<TPAYLOAD *, attr_value_t> gpAttrCopies_;
Definition: registry.h:30
bool reverseIterate(F *f)
Definition: registry.h:61
Definition: attr_dict_parser.h:40
bool reportInvalidAttrs()
Definition: inject_interface.h:27
virtual void released(TPAYLOAD *gp)=0
virtual void attrToValue(AttrDictParser *parser, TPAYLOAD *gp)=0
Definition: inject_registry.h:37
bool operator()(InjectInterface< TPAYLOAD > *iface)
Definition: inject_registry.h:56
TPAYLOAD * attrToPayload(conf_object_t *obj, attr_value_t *attr)
Definition: inject_registry.h:39
Definition: pci_bus_interface.h:24