diff options
Diffstat (limited to 'nihil.guard')
| -rw-r--r-- | nihil.guard/CMakeLists.txt | 22 | ||||
| -rw-r--r-- | nihil.guard/guard.ccm | 41 | ||||
| -rw-r--r-- | nihil.guard/test.cc | 16 |
3 files changed, 0 insertions, 79 deletions
diff --git a/nihil.guard/CMakeLists.txt b/nihil.guard/CMakeLists.txt deleted file mode 100644 index a5e0fc2..0000000 --- a/nihil.guard/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# This source code is released into the public domain. - -add_library(nihil.guard STATIC) -target_link_libraries(nihil.guard PRIVATE nihil.std) -target_sources(nihil.guard - PUBLIC FILE_SET modules TYPE CXX_MODULES FILES - guard.ccm -) - -if(NIHIL_TESTS) - enable_testing() - - add_executable(nihil.guard.test test.cc) - target_link_libraries(nihil.guard.test PRIVATE - nihil.guard - Catch2::Catch2WithMain - ) - - include(CTest) - include(Catch) - catch_discover_tests(nihil.guard.test) -endif() diff --git a/nihil.guard/guard.ccm b/nihil.guard/guard.ccm deleted file mode 100644 index fdda45c..0000000 --- a/nihil.guard/guard.ccm +++ /dev/null @@ -1,41 +0,0 @@ -// This source code is released into the public domain. -export module nihil.guard; - -import nihil.std; - -namespace nihil { - -// guard: invoke a callable when this object is destroyed; this is similar to -// scope_exit from the library fundamentals TS, which LLVM doesn't implement. -export template<std::invocable F> -struct guard final { - // Initialise the guard with a callable we will invoke later. - explicit guard(F func) : m_func(std::move(func)) {} - - // We are being destroyed, so call the callable. - // If the callable throws, std::terminate() will be called. - ~guard() - { - if (m_func) - std::invoke(*m_func); - } - - // Release the guard. This turns the destructor into a no-op. - auto release(this guard &self) noexcept -> void - { - self.m_func.reset(); - } - - // Not default-constructible, movable or copyable. - guard() = delete; - guard(guard const &) = delete; - guard(guard &&) noexcept = delete; - auto operator=(this guard &, guard const &) -> guard & = delete; - auto operator=(this guard &, guard &&) noexcept -> guard & = delete; - -private: - // The callable to be invoked when we are destroyed. - std::optional<F> m_func; -}; - -} // namespace nihil diff --git a/nihil.guard/test.cc b/nihil.guard/test.cc deleted file mode 100644 index f1b3f21..0000000 --- a/nihil.guard/test.cc +++ /dev/null @@ -1,16 +0,0 @@ -// This source code is released into the public domain. - -#include <catch2/catch_test_macros.hpp> - -import nihil.guard; - -TEST_CASE("guard: basic", "[guard]") { - int n = 0; - - { - auto guard = nihil::guard([&] { n = 1; }); - REQUIRE(n == 0); - } - - REQUIRE(n == 1); -} |
