30 #ifndef __SYSTEMC_EXT_CORE_SC_SPAWN_HH__ 31 #define __SYSTEMC_EXT_CORE_SC_SPAWN_HH__ 42 class sc_spawn_options;
61 template <
typename T,
typename R>
69 void call()
override { *r =
t(); }
73 const ::sc_core::sc_spawn_options *);
87 class sc_signal_in_if;
90 class sc_event_finder;
105 void dont_initialize();
106 void set_stack_size(
int);
108 void set_sensitivity(
const sc_event *);
119 void async_reset_signal_is(
const sc_in<bool> &,
bool);
134 template <
typename T>
137 Reset(T *
t,
bool v,
bool s) : target(t), value(v), sync(s) {}
154 template <
typename T>
159 auto func = new ::sc_gem5::ProcessObjFuncWrapper<T>(object);
164 template <
typename T>
166 sc_spawn(
typename T::result_type *r_p, T
object,
const char *name_p=
nullptr,
169 auto func = new ::sc_gem5::ProcessObjRetFuncWrapper<
170 T,
typename T::result_type>(object, r_p);
177 ::sc_core::sc_process_handle forkees[] = { 181 ::sc_core::sc_join join; \ 182 for (int i = 0; i < sizeof(forkees) / sizeof(forkees[0]); i++) \ 183 join.add_process(forkees[i]); \ 190 ::sc_core::sc_join join; \ 191 for (int i = 0; i < sizeof(forkees) / sizeof(forkees[0]); i++) \ 192 join.add_process(forkees[i]); \ 193 join.wait_clocked(); \ 199 template <
typename F,
typename... Args>
201 decltype(std::bind(std::forward<F>(
f), std::forward<Args>(args)...))
203 return std::bind(std::forward<F>(
f), std::forward<Args>(args)...);
206 template <
typename T>
207 auto sc_ref(T &&
v) -> decltype(std::ref(std::forward<T>(
v)))
209 return std::ref(std::forward<T>(
v));
212 template <
typename T>
213 auto sc_cref(T &&
v) -> decltype(std::cref(std::forward<T>(
v)))
215 return std::cref(std::forward<T>(
v));
231 #endif //__SYSTEMC_EXT_CORE_SC_SPAWN_HH__
Process * spawnWork(ProcessFuncWrapper *func, const char *name, const ::sc_core::sc_spawn_options *opts)
std::vector< sc_interface * > _interfaces
const std::string & name()
std::vector< sc_port_base * > _ports
std::vector< Reset< const sc_out< bool > > > _out_resets
std::vector< Reset< const sc_in< bool > > > _in_resets
sc_process_handle sc_spawn(T object, const char *name_p=nullptr, const sc_spawn_options *opt_p=nullptr)
std::vector< const sc_event * > _events
sc_spawn_options(const sc_spawn_options &)
ProcessObjFuncWrapper(T t)
auto sc_ref(T &&v) -> decltype(std::ref(std::forward< T >(v)))
auto sc_cref(T &&v) -> decltype(std::cref(std::forward< T >(v)))
auto sc_bind(F &&f, Args &&...args) -> decltype(std::bind(std::forward< F >(f), std::forward< Args >(args)...))
std::vector< sc_export_base * > _exports
std::vector< Reset< const sc_signal_in_if< bool > > > _if_resets
ProcessObjRetFuncWrapper(T t, R *r)
std::vector< Reset< const sc_inout< bool > > > _inout_resets
std::vector< sc_event_finder * > _finders
Reset(T *t, bool v, bool s)