SPARK  0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
Signal.h
1#pragma once
2
3#include "spark/patterns/details/Connection.h"
4
5#include <functional>
6#include <map>
7
8#include <cstddef>
9
10namespace spark::patterns
11{
16 template <typename... Args>
17 class Signal final
18 {
19 public:
20 explicit Signal();
21 ~Signal();
22
23 Signal(const Signal& signal) = delete;
24 Signal(Signal&& signal) noexcept;
25 Signal& operator=(const Signal& signal) = delete;
26 Signal& operator=(Signal&& signal) noexcept;
27
33 std::size_t connect(Slot<Args...>* slot);
34
40 std::size_t connect(Slot<Args...>& slot);
41
47 std::size_t connect(Slot<Args...>&& slot);
48
54 std::size_t connect(const std::function<void(Args...)>& callback);
55
61 std::size_t connect(std::function<void(Args...)>&& callback);
62
67 void disconnect(std::size_t key);
68
73 void disconnect(Slot<Args...>* slot);
74
79 void disconnect(Slot<Args...>& slot);
80
84 void clear();
85
91 [[nodiscard]] bool isConnected(std::size_t key) const;
92
97 [[nodiscard]] std::vector<std::size_t> connectedKeys() const;
98
103 [[nodiscard]] std::vector<const Slot<Args...>*> connectedSlots() const;
104
110 template <typename... FnArgs>
111 void emit(FnArgs&&... args) const;
112
117 void operator()(Args&&... args) const;
118
119 private:
126 std::size_t connect(Slot<Args...>* slot, bool managed);
127
132 void move(Signal* signal);
133
134 private:
135 std::map<std::size_t, details::Connection<Args...>> m_connections;
136 std::size_t m_sequence = 0;
137 };
138}
139
140#include "spark/patterns/impl/Signal.h"
void disconnect(std::size_t key)
Disconnects a slot from the signal.
Definition Signal.h:81
std::vector< std::size_t > connectedKeys() const
Gets all the keys of the connected slots.
Definition Signal.h:120
bool isConnected(std::size_t key) const
Finds if a slot is connected to the signal.
Definition Signal.h:113
std::size_t connect(Slot< Args... > *slot)
Connects a slot to the signal.
Definition Signal.h:51
void clear()
Disconnects all connected slots from the signal.
Definition Signal.h:105
std::vector< const Slot< Args... > * > connectedSlots() const
Gets all the connected slots.
Definition Signal.h:130
void emit(FnArgs &&... args) const
Emits the signal to all connected slots.
Definition Signal.h:140
void operator()(Args &&... args) const
Emits the signal to all connected slots. Same as emit.
Definition Signal.h:45