4#ifndef _Stroika_Foundation_Execution_SignalHandlers_h_
5#define _Stroika_Foundation_Execution_SignalHandlers_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
12#include "Stroika/Foundation/Common/Common.h"
13#include "Stroika/Foundation/Containers/Mapping.h"
14#include "Stroika/Foundation/Containers/Set.h"
16#include "Stroika/Foundation/Execution/Signals.h"
96 static constexpr Type eDirect = Type::eDirect;
101 static constexpr Type eSafe = Type::eSafe;
114 SignalHandler (
void (*signalHandler) (SignalID)
noexcept,
Type type = Type::eDEFAULT);
119 nonvirtual
Type GetType ()
const;
125 nonvirtual
void operator() (SignalID i)
const;
135 nonvirtual strong_ordering operator<=> (
const SignalHandler& rhs)
const =
default;
291 mutable atomic<unsigned int> fDirectSignalHandlersCache_Lock_{0};
292 vector<function<void (SignalID)>> fDirectSignalHandlersCache_[NSIG];
295 static void FirstPassSignalHandler_ (SignalID signal);
338#if __cpp_lib_atomic_shared_ptr >= 201711
339 static inline atomic<shared_ptr<Rep_>> sTheRep_{
nullptr};
341 static inline shared_ptr<Rep_> sTheRep_{
nullptr};
355#include "SignalHandlers.inl"
#define Stroika_Define_Enum_Bounds(FIRST_ITEM, LAST_ITEM)
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Set<T> is a container of T, where once an item is added, additionally adds () do nothing.
nonvirtual void operator()(SignalID i) const
static void DefaultCrashSignalHandler(SignalID signal)
static Containers::Set< SignalID > GetStandardCrashSignals()
nonvirtual void AddSignalHandler(SignalID signal, const SignalHandler &handler)
nonvirtual void SetSignalHandlers(SignalID signal)
nonvirtual void RemoveSignalHandler(SignalID signal, const SignalHandler &handler)
static SignalHandlerRegistry & Get()
nonvirtual void SetStandardCrashHandlerSignals(SignalHandler handler=SignalHandler{DefaultCrashSignalHandler, SignalHandler::Type::eDirect}, const Containers::Set< SignalID > &forSignals=GetStandardCrashSignals())
static const SignalHandler kIGNORED
nonvirtual Containers::Set< SignalID > GetHandledSignals() const
nonvirtual Containers::Set< SignalHandler > GetSignalHandlers(SignalID signal) const
Wrap any object with Synchronized<> and it can be used similarly to the base type,...