71 for (
auto &kid: get_child_objects()) {
84 if (!_suspended && !_terminated) {
93 _suspendedReady =
true;
105 if (_suspended && !_terminated) {
109 _suspendedReady =
false;
120 timeoutEvent.scheduled()) {
121 std::string message(
"attempt to disable a thread with timeout wait: ");
155 if (_isUnwinding || _terminated)
167 injectException(killException);
183 if (_isUnwinding || _terminated)
187 _suspendedReady =
false;
189 _resetEvent.notify();
195 injectException(resetException);
208 if (_needsStart || _terminated ||
214 injectException(exc);
272 std::cout <<
"Terminating process " <<
name() << std::endl;
273 }
catch(const ::sc_core::sc_unwind_exception &exc) {
274 reset = exc.is_reset();
275 _isUnwinding =
false;
286 staticSensitivities.push_back(s);
292 if (dynamicSensitivity) {
293 dynamicSensitivity->clear();
294 delete dynamicSensitivity;
296 dynamicSensitivity =
s;
302 resets.push_back(reset);
308 if (timeoutEvent.scheduled())
324 _timedOut = (dynamicSensitivity !=
nullptr);
342 if ((dynamicSensitivity || timeoutEvent.scheduled()) &&
343 dynamicSensitivity != s) {
350 delete dynamicSensitivity;
351 dynamicSensitivity =
nullptr;
362 _suspendedReady =
true;
363 else if (!scheduled())
371 _lastReport = std::unique_ptr<::sc_core::sc_report>(
372 new ::sc_core::sc_report(*report));
374 _lastReport =
nullptr;
381 ::
sc_core::sc_process_b(name), excWrapper(nullptr),
382 timeoutEvent([this]() { this->
timeout(); }),
409 staticSensitivities.clear();
const char SC_ID_THROW_IT_IGNORED_[]
void addStatic(StaticSensitivity *)
const std::string & name()
void setTimeout(::sc_core::sc_time t)
std::vector<::sc_core::sc_join * > joinWaiters
BuiltinExceptionWrapper< UnwindExceptionReset > resetException
void satisfySensitivity(Sensitivity *)
void addReset(Reset *reset)
void forEachKid(const std::function< void(Process *)> &work)
void signalReset(bool set, bool sync)
void newReset(const sc_core::sc_port_base *pb, Process *p, bool s, bool v)
#define SC_REPORT_WARNING(msg_type, msg)
DynamicSensitivity * dynamicSensitivity
void enable(bool inc_kids)
const char SC_ID_PROCESS_CONTROL_CORNER_CASE_[]
void syncResetOn(bool inc_kids)
void deschedule(ScEvent *event)
const char SC_ID_KILL_PROCESS_WHILE_UNITIALIZED_[]
void injectException(ExceptionWrapperBase &exc)
void syncResetOff(bool inc_kids)
static const size_t DefaultStackSize
void disable(bool inc_kids)
void resume(bool inc_kids)
void throw_it(ExceptionWrapperBase &exc, bool inc_kids)
ProcessFuncWrapper * func
void throw_it_wrapper(Process *p, ExceptionWrapperBase &exc, bool inc_kids)
void suspend(bool inc_kids)
InternalScEvent _terminatedEvent
static Port * fromPort(const ::sc_core::sc_port_base *pb)
sc_status sc_get_status()
BuiltinExceptionWrapper< UnwindExceptionKill > killException
void reset(bool inc_kids)
StaticSensitivities staticSensitivities
#define SC_REPORT_ERROR(msg_type, msg)
bool sc_allow_process_control_corners
Process(const char *name, ProcessFuncWrapper *func, bool internal=false)
void setDynamic(DynamicSensitivity *)
const char SC_ID_THROW_IT_WHILE_NOT_RUNNING_[]
void schedule(ScEvent *event, const ::sc_core::sc_time &delay)
bool install(const sc_core::sc_signal_in_if< bool > *s)
::sc_core::sc_report * lastReport() const
const char SC_ID_RESET_PROCESS_WHILE_NOT_RUNNING_[]