89 struct global_state_params {
90 std::weak_ptr<fe_trap> observer;
93 static global_state_params global_state;
96 struct scoped_instance {
97 explicit scoped_instance(std::shared_ptr<fe_trap> ptr)
98 : m_resource{std::move(ptr)} {}
99 scoped_instance(scoped_instance
const &) =
delete;
100 scoped_instance(scoped_instance &&)
noexcept =
default;
101 scoped_instance &operator=(scoped_instance
const &) =
delete;
102 scoped_instance &operator=(scoped_instance &&)
noexcept =
default;
103 bool is_unique()
const {
return m_resource->is_unique(); }
104 bool is_active()
const {
return m_resource->is_active(); }
105 int get_flags()
const {
return m_resource->get_flags(); }
106 auto &get_trap() {
return *m_resource; }
107 auto const &get_trap()
const {
return *m_resource; }
108 bool operator==(scoped_instance
const &)
const =
default;
111 std::shared_ptr<fe_trap> m_resource;
115 struct scoped_pause {
116 std::weak_ptr<fe_trap> m_resource;
117 explicit scoped_pause(std::shared_ptr<fe_trap> ptr) : m_resource{ptr} {
121 if (
auto const ptr = m_resource.lock()) {
128 void operator()(
fe_trap *ptr) {
delete ptr; }
135 std::weak_ptr<scoped_pause> m_pause;
137 fe_trap(std::optional<int> excepts,
bool unique)
138 : m_flags{parse_excepts(excepts)}, m_unique{unique}, m_active{
false},
144 static int parse_excepts(std::optional<int> excepts);
162 static scoped_instance
170 static scoped_instance