aboutsummaryrefslogtreecommitdiff
path: root/core/src/Utils/Sigslot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Utils/Sigslot.cpp')
-rw-r--r--core/src/Utils/Sigslot.cpp57
1 files changed, 38 insertions, 19 deletions
diff --git a/core/src/Utils/Sigslot.cpp b/core/src/Utils/Sigslot.cpp
index 14deece..1132dfb 100644
--- a/core/src/Utils/Sigslot.cpp
+++ b/core/src/Utils/Sigslot.cpp
@@ -2,23 +2,28 @@
#include <doctest/doctest.h>
-bool SignalStub::Connection::IsOccupied() const {
+bool SignalStub::Connection::IsOccupied() const
+{
return id != InvalidId;
}
SignalStub::SignalStub(IWrapper& wrapper)
- : mWrapper{ &wrapper } {
+ : mWrapper{ &wrapper }
+{
}
-SignalStub::~SignalStub() {
+SignalStub::~SignalStub()
+{
RemoveAllConnections();
}
-std::span<const SignalStub::Connection> SignalStub::GetConnections() const {
+std::span<const SignalStub::Connection> SignalStub::GetConnections() const
+{
return mConnections;
}
-SignalStub::Connection& SignalStub::InsertConnection(SlotGuard* guard) {
+SignalStub::Connection& SignalStub::InsertConnection(SlotGuard* guard)
+{
Connection* result;
int size = static_cast<int>(mConnections.size());
for (int i = 0; i < size; ++i) {
@@ -42,7 +47,8 @@ setup:
return *result;
}
-void SignalStub::RemoveConnection(int id) {
+void SignalStub::RemoveConnection(int id)
+{
if (id >= 0 && id < mConnections.size()) {
auto& conn = mConnections[id];
if (conn.IsOccupied()) {
@@ -58,24 +64,29 @@ void SignalStub::RemoveConnection(int id) {
}
}
-void SignalStub::RemoveConnectionFor(SlotGuard& guard) {
+void SignalStub::RemoveConnectionFor(SlotGuard& guard)
+{
guard.RemoveConnectionFor(*this);
}
-void SignalStub::RemoveAllConnections() {
+void SignalStub::RemoveAllConnections()
+{
for (size_t i = 0; i < mConnections.size(); ++i) {
RemoveConnection(i);
}
}
-SlotGuard::SlotGuard() {
+SlotGuard::SlotGuard()
+{
}
-SlotGuard::~SlotGuard() {
+SlotGuard::~SlotGuard()
+{
DisconnectAll();
}
-void SlotGuard::DisconnectAll() {
+void SlotGuard::DisconnectAll()
+{
for (auto& conn : mConnections) {
if (conn.stub) {
// Also calls SlotGuard::removeConnection, our copy of the data will be cleared in it
@@ -84,7 +95,8 @@ void SlotGuard::DisconnectAll() {
}
}
-int SlotGuard::InsertConnection(SignalStub& stub, int stubId) {
+int SlotGuard::InsertConnection(SignalStub& stub, int stubId)
+{
int size = static_cast<int>(mConnections.size());
for (int i = 0; i < size; ++i) {
auto& conn = mConnections[i];
@@ -102,7 +114,8 @@ int SlotGuard::InsertConnection(SignalStub& stub, int stubId) {
return size;
}
-void SlotGuard::RemoveConnectionFor(SignalStub& stub) {
+void SlotGuard::RemoveConnectionFor(SignalStub& stub)
+{
for (auto& conn : mConnections) {
if (conn.stub == &stub) {
conn.stub->RemoveConnection(conn.stubId);
@@ -110,11 +123,13 @@ void SlotGuard::RemoveConnectionFor(SignalStub& stub) {
}
}
-void SlotGuard::RemoveConnection(int slotId) {
+void SlotGuard::RemoveConnection(int slotId)
+{
mConnections[slotId] = {};
}
-TEST_CASE("Signal connect and disconnect") {
+TEST_CASE("Signal connect and disconnect")
+{
Signal<> sig;
int counter = 0;
@@ -131,7 +146,8 @@ TEST_CASE("Signal connect and disconnect") {
CHECK(counter == 2);
}
-TEST_CASE("Signal with parameters") {
+TEST_CASE("Signal with parameters")
+{
Signal<int> sig;
int counter = 0;
@@ -151,7 +167,8 @@ TEST_CASE("Signal with parameters") {
CHECK(counter == 5);
}
-TEST_CASE("Signal disconnectAll()") {
+TEST_CASE("Signal disconnectAll()")
+{
Signal<> sig;
int counter1 = 0;
@@ -173,7 +190,8 @@ TEST_CASE("Signal disconnectAll()") {
CHECK(counter2 == 2);
}
-TEST_CASE("SlotGuard auto-disconnection") {
+TEST_CASE("SlotGuard auto-disconnection")
+{
int counter1 = 0;
int counter2 = 0;
Signal<> sig;
@@ -197,7 +215,8 @@ TEST_CASE("SlotGuard auto-disconnection") {
CHECK(counter2 == 2);
}
-TEST_CASE("Signal destruct before SlotGuard") {
+TEST_CASE("Signal destruct before SlotGuard")
+{
int counter = 0;
SlotGuard guard;