11 #include <kvikio/error.hpp>
13 namespace kvikio::detail {
22 [[nodiscard]] std::size_t align_up(std::size_t value, std::size_t alignment);
31 [[nodiscard]]
void* align_up(
void* addr, std::size_t alignment);
40 [[nodiscard]] std::size_t align_down(std::size_t value, std::size_t alignment);
49 [[nodiscard]]
void* align_down(
void* addr, std::size_t alignment);
58 bool is_aligned(std::size_t value, std::size_t alignment);
67 bool is_aligned(
void* addr, std::size_t alignment);
87 static_assert(std::is_invocable_v<F>,
"ScopeExit callable must be invocable with no arguments");
97 [[nodiscard]]
explicit ScopeExit(F&& cleanup) : _cleanup(std::move(cleanup)) {}
103 }
catch (std::exception
const& e) {
104 KVIKIO_LOG_ERROR(e.what());
106 KVIKIO_LOG_ERROR(
"Unhandled exception");
A simple scope guard that invokes a cleanup callable upon destruction.
ScopeExit(F &&cleanup)
Constructs a scope guard that will invoke cleanup on destruction.