]> granicus.if.org Git - icinga2/commitdiff
Re-add Defer functionality
authorMichael Friedrich <michael.friedrich@icinga.com>
Fri, 22 Feb 2019 14:27:34 +0000 (15:27 +0100)
committerMichael Friedrich <michael.friedrich@icinga.com>
Fri, 22 Feb 2019 14:27:34 +0000 (15:27 +0100)
lib/base/defer.hpp [new file with mode: 0644]

diff --git a/lib/base/defer.hpp b/lib/base/defer.hpp
new file mode 100644 (file)
index 0000000..05ae0b8
--- /dev/null
@@ -0,0 +1,59 @@
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012-2018 Icinga Development Team (https://icinga.com/)      *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+#ifndef DEFER
+#define DEFER
+
+#include <functional>
+#include <utility>
+
+namespace icinga
+{
+
+/**
+ * An action to be executed at end of scope.
+ *
+ * @ingroup base
+ */
+class Defer
+{
+public:
+       inline
+       Defer(std::function<void()> func) : m_Func(std::move(func))
+       {
+       }
+
+       Defer(const Defer&) = delete;
+       Defer(Defer&&) = delete;
+       Defer& operator=(const Defer&) = delete;
+       Defer& operator=(Defer&&) = delete;
+
+       inline
+       ~Defer()
+       {
+               m_Func();
+       }
+
+private:
+       std::function<void()> m_Func;
+};
+
+}
+
+#endif /* DEFER */