#ifndef SYSC_PLAYGROUND_SYSC #define SYSC_PLAYGROUND_SYSC #include #include struct scoped_push_hierarchy { [[nodiscard]] explicit scoped_push_hierarchy(sc_core::sc_module& mod) : m_mod(mod), m_simctx(sc_core::sc_get_curr_simcontext()) { assert(m_simctx); m_simctx->hierarchy_push(&m_mod); } ~scoped_push_hierarchy() { const auto* top = m_simctx->hierarchy_pop(); assert(top == &m_mod); } private: sc_core::sc_simcontext* m_simctx{nullptr}; sc_core::sc_module& m_mod; }; #endif