69 for (
auto &kid: get_child_objects()) {
82 if (!_suspended && !_terminated) {
91 _suspendedReady =
true;
103 if (_suspended && !_terminated) {
107 _suspendedReady =
false;
118 timeoutEvent.scheduled()) {
119 std::string message(
"attempt to disable a thread with timeout wait: ");
153 if (_isUnwinding || _terminated)
165 injectException(killException);
181 if (_isUnwinding || _terminated)
185 _suspendedReady =
false;
187 _resetEvent.notify();
193 injectException(resetException);
206 if (_needsStart || _terminated ||
212 injectException(exc);
270 std::cout <<
"Terminating process " <<
name() << std::endl;
271 }
catch(const ::sc_core::sc_unwind_exception &exc) {
272 reset = exc.is_reset();
273 _isUnwinding =
false;
284 staticSensitivities.push_back(s);
290 if (dynamicSensitivity) {
291 dynamicSensitivity->clear();
292 delete dynamicSensitivity;
294 dynamicSensitivity =
s;
300 resets.push_back(reset);
306 if (timeoutEvent.scheduled())
322 _timedOut = (dynamicSensitivity !=
nullptr);
340 if ((dynamicSensitivity || timeoutEvent.scheduled()) &&
341 dynamicSensitivity != s) {
348 delete dynamicSensitivity;
349 dynamicSensitivity =
nullptr;
360 _suspendedReady =
true;
361 else if (!scheduled())
369 _lastReport = std::unique_ptr<::sc_core::sc_report>(
370 new ::sc_core::sc_report(*report));
372 _lastReport =
nullptr;
379 ::
sc_core::sc_process_b(name), excWrapper(nullptr),
380 timeoutEvent([this]() { this->
timeout(); }),
407 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_[]