Files
Event/include/EventConnection.h

46 lines
1.3 KiB
C++

/// @file Connection.hpp
/// @description Callback handler for event connections
/// @author Josh O'Leary - Redacted Software
/// @revision 3
/// @lastedit 2024-02-21
/// @license Unlicense - Public Domain
#pragma once
#include <functional>
#include <Event.h>
template <typename delegate, typename ... Args>
class BasicEvent;
/// A type that represents a handle to an active event connection.
template <typename delegate, typename ... Args>
class Connection {
private:
public:
Connection(BasicEvent<delegate, Args...> *creator, delegate cb);
bool Disconnect(); // Breaks the event connection, but does not destroy the instance
void Invoke(Args... e);
private:
BasicEvent<delegate, Args...> * owner;
delegate callback;
bool active = true;
};
template<typename delegate, typename... Args>
Connection<delegate, Args...>::Connection(BasicEvent<delegate, Args...> *creator, delegate cb) : owner(creator), callback(std::move(cb)) {}
template <typename delegate, typename... Args>
void Connection<delegate, Args...>::Invoke(Args... e) { callback(e...); }
template <typename delegate, typename ... Args>
bool Connection<delegate, Args...>::Disconnect() {
if (active) {
owner->Disconnect(this);
active = false;
return true;
}
return false;
}