diff --git a/include/Nazara/Core/Signal.hpp b/include/Nazara/Core/Signal.hpp new file mode 100644 index 000000000..2c1b54231 --- /dev/null +++ b/include/Nazara/Core/Signal.hpp @@ -0,0 +1,32 @@ +// Copyright (C) 2015 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_SIGNAL_HPP +#define NAZARA_SIGNAL_HPP + +#include +#include + +template +class NzSignal +{ + public: + using Callback = std::function; + + NzSignal() = default; + ~NzSignal() = default; + + void Connect(const Callback& func); + + void operator()(Args&&... args); + + private: + std::vector m_callbacks; +}; + +#include + +#endif // NAZARA_SIGNAL_HPP diff --git a/include/Nazara/Core/Signal.inl b/include/Nazara/Core/Signal.inl new file mode 100644 index 000000000..db6de027f --- /dev/null +++ b/include/Nazara/Core/Signal.inl @@ -0,0 +1,22 @@ +// Copyright (C) 2015 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 +#include +#include + +template +void NzSignal::Connect(const Callback& func) +{ + m_callbacks.push_back(func); +} + +template +void NzSignal::operator()(Args&&... args) +{ + for (const Callback& func : m_callbacks) + func(std::forward(args)...); +} + +#include