2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/public-api/signals/connection-tracker.h>
21 #include <dali/public-api/signals/callback.h>
22 #include <dali/public-api/signals/signal-slot-connections.h>
23 #include <dali/public-api/signals/signal-slot-observers.h>
27 ConnectionTracker::ConnectionTracker() = default;
29 ConnectionTracker::~ConnectionTracker()
34 void ConnectionTracker::DisconnectAll()
36 std::size_t size = mConnections.Size();
38 for(std::size_t i = 0; i < size; ++i)
40 auto& connection = mConnections[i];
42 // Tell the signal that the slot is disconnected
43 connection.GetSlotObserver()->SlotDisconnected(connection.GetCallback());
49 void ConnectionTracker::SignalConnected(SlotObserver* slotObserver, CallbackBase* callback)
51 mConnections.PushBack(SlotConnection(slotObserver, callback));
54 void ConnectionTracker::SignalDisconnected(SlotObserver* signal, CallbackBase* callback)
56 std::size_t size = mConnections.Size();
58 for(std::size_t i = 0; i < size; ++i)
60 auto& connection = mConnections[i];
62 // Pointer comparison i.e. SignalConnection contains pointer to same callback instance
63 if(connection.GetCallback() == callback)
65 // Remove from connection list
66 mConnections.Erase(mConnections.Begin() + i);
68 // Disconnection complete
73 DALI_ABORT("Callback lost in SignalDisconnected()");
76 std::size_t ConnectionTracker::GetConnectionCount() const
78 return mConnections.Size();