Refactor Event class to support any delegate type.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/// @file EventConnection.hpp
|
||||
/// @file Connection.hpp
|
||||
/// @description Callback handler for event connections
|
||||
/// @author Josh O'Leary - Redacted Software
|
||||
/// @revision 3
|
||||
@@ -10,32 +10,32 @@
|
||||
#include <functional>
|
||||
#include <Event.h>
|
||||
|
||||
template <typename ... Args>
|
||||
class Event;
|
||||
template <typename delegate, typename ... Args>
|
||||
class BasicEvent;
|
||||
|
||||
template <typename ... Args>
|
||||
class EventConnection {
|
||||
/// A type that represents a handle to an active event connection.
|
||||
template <typename delegate, typename ... Args>
|
||||
class Connection {
|
||||
private:
|
||||
using delegate = std::function<void(Args...)>;
|
||||
public:
|
||||
EventConnection(Event<Args...> *creator, delegate cb);
|
||||
Connection(BasicEvent<delegate, Args...> *creator, delegate cb);
|
||||
bool Disconnect(); // Breaks the event connection, but does not destroy the instance
|
||||
void Invoke(Args... e);
|
||||
private:
|
||||
Event<Args...> * owner;
|
||||
BasicEvent<delegate, Args...> * owner;
|
||||
delegate callback;
|
||||
bool active = true;
|
||||
};
|
||||
|
||||
template<typename... Args>
|
||||
EventConnection<Args...>::EventConnection(Event<Args...> *creator, EventConnection::delegate cb) : owner(creator), callback(std::move(cb)) {}
|
||||
template<typename delegate, typename... Args>
|
||||
Connection<delegate, Args...>::Connection(BasicEvent<delegate, Args...> *creator, delegate cb) : owner(creator), callback(std::move(cb)) {}
|
||||
|
||||
|
||||
template <typename... Args>
|
||||
void EventConnection<Args...>::Invoke(Args... e) { callback(e...); }
|
||||
template <typename delegate, typename... Args>
|
||||
void Connection<delegate, Args...>::Invoke(Args... e) { callback(e...); }
|
||||
|
||||
template <typename ... Args>
|
||||
bool EventConnection<Args...>::Disconnect() {
|
||||
template <typename delegate, typename ... Args>
|
||||
bool Connection<delegate, Args...>::Disconnect() {
|
||||
if (active) {
|
||||
owner->Disconnect(this);
|
||||
active = false;
|
||||
|
Reference in New Issue
Block a user