From eb285643ed5dab8125e9c6bc94abd7ef562096a5 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 27 Feb 2025 23:58:57 +0100 Subject: Finish work on deducing this, for now --- asl/base/defer.hpp | 96 +++++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) (limited to 'asl/base/defer.hpp') diff --git a/asl/base/defer.hpp b/asl/base/defer.hpp index e881d8a..122312a 100644 --- a/asl/base/defer.hpp +++ b/asl/base/defer.hpp @@ -1,48 +1,48 @@ -#pragma once - -#include "asl/base/utility.hpp" -#include "asl/base/functional.hpp" - -namespace asl -{ - -template -class DeferCallback -{ - Callback m_callback; - bool m_moved = false; - -public: - template - explicit DeferCallback(T&& callback) : m_callback(ASL_FWD(callback)) - { - } - - ASL_DELETE_COPY(DeferCallback); - - DeferCallback(DeferCallback&& other) : - m_callback(ASL_MOVE(other.m_callback)), m_moved(exchange(other.m_moved, true)) - { - } - - DeferCallback& operator=(DeferCallback&&) = delete; - - ~DeferCallback() - { - if (!m_moved) { invoke(m_callback); } - } -}; - -struct DeferFactory -{ - template - DeferCallback operator<<(Callback&& callback) const - { - return DeferCallback(ASL_FWD(callback)); - } -}; - -} // namespace asl - -#define ASL_DEFER auto ASL_CONCAT(_defer_, __COUNTER__) = ::asl::DeferFactory{} << - +#pragma once + +#include "asl/base/utility.hpp" +#include "asl/base/functional.hpp" + +namespace asl +{ + +template +class DeferCallback +{ + Callback m_callback; + bool m_moved = false; + +public: + template + explicit DeferCallback(T&& callback) : m_callback(ASL_FWD(callback)) + { + } + + ASL_DELETE_COPY(DeferCallback); + + DeferCallback(DeferCallback&& other) : + m_callback(ASL_MOVE(other.m_callback)), m_moved(exchange(other.m_moved, true)) + { + } + + DeferCallback& operator=(DeferCallback&&) = delete; + + ~DeferCallback() + { + if (!m_moved) { invoke(m_callback); } + } +}; + +struct DeferFactory +{ + template + DeferCallback operator<<(Callback&& callback) const + { + return DeferCallback(ASL_FWD(callback)); + } +}; + +} // namespace asl + +#define ASL_DEFER auto ASL_CONCAT(_defer_, __COUNTER__) = ::asl::DeferFactory{} << + -- cgit