systemc: Add the nonstandard macro SC_NEW.
This is in the Accellera implementation and in the regression tests. The implementation here is a bit different than theirs in that it uses std::unique_ptrs. Change-Id: Id3d1ad82482b94a5d99f27e02d1e447ca1944797 Reviewed-on: https://gem5-review.googlesource.com/11255 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
@@ -27,6 +27,9 @@
|
||||
* Authors: Gabe Black
|
||||
*/
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "base/logging.hh"
|
||||
#include "systemc/ext/core/sc_module.hh"
|
||||
|
||||
@@ -539,4 +542,12 @@ sc_end_of_simulation_invoked()
|
||||
return false;
|
||||
}
|
||||
|
||||
sc_module *
|
||||
sc_module_sc_new(sc_module *mod)
|
||||
{
|
||||
static std::vector<std::unique_ptr<sc_module> > modules;
|
||||
modules.emplace_back(mod);
|
||||
return mod;
|
||||
}
|
||||
|
||||
} // namespace sc_core
|
||||
|
||||
@@ -244,6 +244,12 @@ typedef sc_module sc_channel;
|
||||
bool sc_start_of_simulation_invoked();
|
||||
bool sc_end_of_simulation_invoked();
|
||||
|
||||
// Nonstandard
|
||||
// Allocates a module of type x and records a pointer to it so that it gets
|
||||
// destructed automatically at the end of the simulation.
|
||||
sc_module *sc_module_sc_new(sc_module *);
|
||||
#define SC_NEW(x) ::sc_core::sc_module_sc_new(new x);
|
||||
|
||||
} // namespace sc_core
|
||||
|
||||
#endif //__SYSTEMC_EXT_CORE_SC_MODULE_HH__
|
||||
|
||||
Reference in New Issue
Block a user