aboutsummaryrefslogtreecommitdiffstats
path: root/src/catch2/internal/catch_context.hpp
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-06-29 19:25:29 +0100
committerLexi Winter <lexi@le-fay.org>2025-06-29 19:25:29 +0100
commitbc524d70253a4ab2fe40c3ca3e5666e267c0a4d1 (patch)
tree1e629e7b46b1d9972a973bc93fd100bcebd395be /src/catch2/internal/catch_context.hpp
downloadnihil-548ea226e1944e077d3ff305df43ef6b366b03f4.tar.gz
nihil-548ea226e1944e077d3ff305df43ef6b366b03f4.tar.bz2
Diffstat (limited to 'src/catch2/internal/catch_context.hpp')
-rw-r--r--src/catch2/internal/catch_context.hpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/catch2/internal/catch_context.hpp b/src/catch2/internal/catch_context.hpp
new file mode 100644
index 0000000..4d8a5da
--- /dev/null
+++ b/src/catch2/internal/catch_context.hpp
@@ -0,0 +1,56 @@
+
+// Copyright Catch2 Authors
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.txt or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+
+// SPDX-License-Identifier: BSL-1.0
+#ifndef CATCH_CONTEXT_HPP_INCLUDED
+#define CATCH_CONTEXT_HPP_INCLUDED
+
+#include <catch2/internal/catch_compiler_capabilities.hpp>
+
+namespace Catch {
+
+ class IResultCapture;
+ class IConfig;
+
+ class Context {
+ IConfig const* m_config = nullptr;
+ IResultCapture* m_resultCapture = nullptr;
+
+ CATCH_EXPORT static Context* currentContext;
+ friend Context& getCurrentMutableContext();
+ friend Context const& getCurrentContext();
+ static void createContext();
+ friend void cleanUpContext();
+
+ public:
+ constexpr IResultCapture* getResultCapture() const {
+ return m_resultCapture;
+ }
+ constexpr IConfig const* getConfig() const { return m_config; }
+ constexpr void setResultCapture( IResultCapture* resultCapture ) {
+ m_resultCapture = resultCapture;
+ }
+ constexpr void setConfig( IConfig const* config ) { m_config = config; }
+
+ };
+
+ Context& getCurrentMutableContext();
+
+ inline Context const& getCurrentContext() {
+ // We duplicate the logic from `getCurrentMutableContext` here,
+ // to avoid paying the call overhead in debug mode.
+ if ( !Context::currentContext ) { Context::createContext(); }
+ // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
+ return *Context::currentContext;
+ }
+
+ void cleanUpContext();
+
+ class SimplePcg32;
+ SimplePcg32& sharedRng();
+}
+
+#endif // CATCH_CONTEXT_HPP_INCLUDED