2 * Copyright (c) 2020 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()
31 ConnectionTracker::~ConnectionTracker()
36 void ConnectionTracker::DisconnectAll()
38 std::size_t size = mConnections.Size();
40 for(std::size_t i = 0; i < size; ++i)
42 auto& connection = mConnections[i];
44 // Tell the signal that the slot is disconnected
45 connection.GetSlotObserver()->SlotDisconnected(connection.GetCallback());
52 void ConnectionTracker::SignalConnected(SlotObserver* slotObserver, CallbackBase* callback)
54 mConnections.PushBack(SlotConnection(slotObserver, callback));
57 void ConnectionTracker::SignalDisconnected(SlotObserver* signal, CallbackBase* callback)
59 std::size_t size = mConnections.Size();
61 for(std::size_t i = 0; i < size; ++i)
63 auto& connection = mConnections[i];
65 // Pointer comparison i.e. SignalConnection contains pointer to same callback instance
66 if(connection.GetCallback() == callback)
68 // Remove from connection list
69 mConnections.Erase(mConnections.Begin() + i);
71 // Disconnection complete
76 DALI_ABORT("Callback lost in SignalDisconnected()");
79 std::size_t ConnectionTracker::GetConnectionCount() const
81 return mConnections.Size();