diff options
Diffstat (limited to 'core/src/Utils/Sigslot.cpp')
-rw-r--r-- | core/src/Utils/Sigslot.cpp | 57 |
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; |