From 0f27930467377a6aad0009ff7b249082dcbf6aa6 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 4 Jun 2015 15:20:16 +0200 Subject: [PATCH] Core/Signal: Add Signals (WIP) Former-commit-id: eee55aa563f29c5604437f3c1a2b172af1a6410d --- include/Nazara/Core/Signal.hpp | 32 ++++++++++++++++++++++++++++++++ include/Nazara/Core/Signal.inl | 22 ++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 include/Nazara/Core/Signal.hpp create mode 100644 include/Nazara/Core/Signal.inl 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