/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace AK { template class ScopeGuard { public: ScopeGuard(Callback callback) : m_callback(move(callback)) { } ~ScopeGuard() { m_callback(); } private: Callback m_callback; }; template class ArmedScopeGuard { public: ArmedScopeGuard(Callback callback) : m_callback(move(callback)) { } ~ArmedScopeGuard() { if (m_armed) m_callback(); } void disarm() { m_armed = false; } private: Callback m_callback; bool m_armed { true }; }; } #if USING_AK_GLOBALLY using AK::ArmedScopeGuard; using AK::ScopeGuard; #endif