diff --git a/include/Nazara/Core/CallOnExit.hpp b/include/Nazara/Core/CallOnExit.hpp new file mode 100644 index 000000000..4d95042a6 --- /dev/null +++ b/include/Nazara/Core/CallOnExit.hpp @@ -0,0 +1,28 @@ +// Copyright (C) 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_CALLONEXIT_HPP +#define NAZARA_CALLONEXIT_HPP + +#include + +class NzCallOnExit +{ + using Func = void (*)(); + + public: + NzCallOnExit(Func func = nullptr); + ~NzCallOnExit(); + + void Reset(Func func = nullptr); + + private: + Func m_func; +}; + +#include + +#endif // NAZARA_CALLONEXIT_HPP diff --git a/include/Nazara/Core/CallOnExit.inl b/include/Nazara/Core/CallOnExit.inl new file mode 100644 index 000000000..00960f3ac --- /dev/null +++ b/include/Nazara/Core/CallOnExit.inl @@ -0,0 +1,23 @@ +// Copyright (C) 2014 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include + +inline NzCallOnExit::NzCallOnExit(Func func) : +m_func(func) +{ +} + +inline NzCallOnExit::~NzCallOnExit() +{ + if (m_func) + m_func(); +} + +inline void NzCallOnExit::Reset(Func func) +{ + m_func = func; +} + +#include