/// @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 #include template class BasicEvent; /// A type that represents a handle to an active event connection. template class Connection { private: public: Connection(BasicEvent *creator, delegate cb); bool Disconnect(); // Breaks the event connection, but does not destroy the instance void Invoke(Args... e); private: BasicEvent * owner; delegate callback; bool active = true; }; template Connection::Connection(BasicEvent *creator, delegate cb) : owner(creator), callback(std::move(cb)) {} template void Connection::Invoke(Args... e) { callback(e...); } template bool Connection::Disconnect() { if (active) { owner->Disconnect(this); active = false; return true; } return false; }