Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
FinalAction.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2021 Barrier Contributors
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include <utility>
11
12namespace deskflow {
13
17template <class Callable> class FinalAction
18{
19public:
20 FinalAction() noexcept = default;
21
22 explicit FinalAction(Callable callable) noexcept : m_callable{callable}
23 {
24 // do nothing
25 }
26
27 ~FinalAction() noexcept
28 {
29 if (!m_invoked) {
30 m_callable();
31 }
32 }
33
34 FinalAction(FinalAction &&other) noexcept : m_callable{std::move(other.m_callable)}
35 {
36 std::swap(m_invoked, other.m_invoked);
37 }
38
39 FinalAction(const FinalAction &) = delete;
40 FinalAction &operator=(const FinalAction &) = delete;
41
42private:
43 bool m_invoked = false;
44 Callable m_callable;
45};
46
47template <class Callable> inline FinalAction<Callable> finally(Callable &&callable) noexcept
48{
49 return FinalAction<Callable>(std::forward<Callable>(callable));
50}
51
52} // namespace deskflow
The FinalAction class implements a common pattern for calling an action at the end of a function.
Definition FinalAction.h:18
FinalAction(FinalAction &&other) noexcept
Definition FinalAction.h:34
FinalAction() noexcept=default
FinalAction & operator=(const FinalAction &)=delete
FinalAction(const FinalAction &)=delete
~FinalAction() noexcept
Definition FinalAction.h:27
Definition EventTypes.h:11