Deskflow 1.22.0.197
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
10namespace deskflow {
11
15template <class Callable> class FinalAction
16{
17public:
18 FinalAction() noexcept = default;
19
20 explicit FinalAction(Callable callable) noexcept : m_callable{callable}
21 {
22 // do nothing
23 }
24
25 ~FinalAction() noexcept
26 {
27 if (!m_invoked) {
28 m_callable();
29 }
30 }
31
32 FinalAction(FinalAction &&other) noexcept : m_callable{std::move(other.m_callable)}
33 {
34 std::swap(m_invoked, other.m_invoked);
35 }
36
37 FinalAction(const FinalAction &) = delete;
38 FinalAction &operator=(const FinalAction &) = delete;
39
40private:
41 bool m_invoked = false;
42 Callable m_callable;
43};
44
45template <class Callable> inline FinalAction<Callable> finally(Callable &&callable) noexcept
46{
47 return FinalAction<Callable>(std::forward<Callable>(callable));
48}
49
50} // namespace deskflow
The FinalAction class implements a common pattern for calling an action at the end of a function.
Definition FinalAction.h:16
FinalAction(FinalAction &&other) noexcept
Definition FinalAction.h:32
FinalAction() noexcept=default
FinalAction & operator=(const FinalAction &)=delete
FinalAction(const FinalAction &)=delete
~FinalAction() noexcept
Definition FinalAction.h:25
Definition EventTypes.h:11