mkql_terminator.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #pragma once
  2. #include <util/generic/noncopyable.h>
  3. #include <util/system/compiler.h>
  4. namespace NKikimr {
  5. namespace NMiniKQL {
  6. ///////////////////////////////////////////////////////////////////////////////
  7. // ITerminator
  8. ///////////////////////////////////////////////////////////////////////////////
  9. class ITerminator
  10. {
  11. public:
  12. virtual ~ITerminator() = default;
  13. virtual void Terminate(const char* message) const = 0;
  14. };
  15. struct TBindTerminator : private TNonCopyable {
  16. TBindTerminator(ITerminator* terminator);
  17. ~TBindTerminator();
  18. static thread_local ITerminator* Terminator;
  19. private:
  20. ITerminator* PreviousTerminator;
  21. };
  22. struct TThrowingBindTerminator : public TBindTerminator, public ITerminator {
  23. TThrowingBindTerminator();
  24. void Terminate(const char* message) const final;
  25. };
  26. struct TOnlyThrowingBindTerminator : public TBindTerminator, public ITerminator {
  27. TOnlyThrowingBindTerminator();
  28. void Terminate(const char* message) const final;
  29. };
  30. [[noreturn]] void MKQLTerminate(const char* message);
  31. }
  32. }