File indexing completed on 2025-09-18 09:08:51
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef CATCH_FATAL_CONDITION_HANDLER_HPP_INCLUDED
0009 #define CATCH_FATAL_CONDITION_HANDLER_HPP_INCLUDED
0010
0011 #include <cassert>
0012
0013 namespace Catch {
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 class FatalConditionHandler {
0026 bool m_started = false;
0027
0028
0029
0030
0031 void engage_platform();
0032 void disengage_platform() noexcept;
0033 public:
0034
0035 FatalConditionHandler();
0036 ~FatalConditionHandler();
0037
0038 void engage() {
0039 assert(!m_started && "Handler cannot be installed twice.");
0040 m_started = true;
0041 engage_platform();
0042 }
0043
0044 void disengage() noexcept {
0045 assert(m_started && "Handler cannot be uninstalled without being installed first");
0046 m_started = false;
0047 disengage_platform();
0048 }
0049 };
0050
0051
0052 class FatalConditionHandlerGuard {
0053 FatalConditionHandler* m_handler;
0054 public:
0055 FatalConditionHandlerGuard(FatalConditionHandler* handler):
0056 m_handler(handler) {
0057 m_handler->engage();
0058 }
0059 ~FatalConditionHandlerGuard() {
0060 m_handler->disengage();
0061 }
0062 };
0063
0064 }
0065
0066 #endif