Merge "Added New() function creating Renderer with RenderCallback" into devel/master
[platform/core/uifw/dali-core.git] / dali / public-api / signals / connection-tracker.cpp
1 /*
2  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/public-api/signals/connection-tracker.h>
20
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>
24
25 namespace Dali
26 {
27 ConnectionTracker::ConnectionTracker() = default;
28
29 ConnectionTracker::~ConnectionTracker()
30 {
31   DisconnectAll();
32 }
33
34 void ConnectionTracker::DisconnectAll()
35 {
36   std::size_t size = mConnections.Size();
37
38   for(std::size_t i = 0; i < size; ++i)
39   {
40     auto& connection = mConnections[i];
41
42     // Tell the signal that the slot is disconnected
43     connection.GetSlotObserver()->SlotDisconnected(connection.GetCallback());
44   }
45
46   mConnections.Clear();
47 }
48
49 void ConnectionTracker::SignalConnected(SlotObserver* slotObserver, CallbackBase* callback)
50 {
51   mConnections.PushBack(SlotConnection(slotObserver, callback));
52 }
53
54 void ConnectionTracker::SignalDisconnected(SlotObserver* signal, CallbackBase* callback)
55 {
56   std::size_t size = mConnections.Size();
57
58   for(std::size_t i = 0; i < size; ++i)
59   {
60     auto& connection = mConnections[i];
61
62     // Pointer comparison i.e. SignalConnection contains pointer to same callback instance
63     if(connection.GetCallback() == callback)
64     {
65       // Remove from connection list
66       mConnections.Erase(mConnections.Begin() + i);
67
68       // Disconnection complete
69       return;
70     }
71   }
72
73   DALI_ABORT("Callback lost in SignalDisconnected()");
74 }
75
76 std::size_t ConnectionTracker::GetConnectionCount() const
77 {
78   return mConnections.Size();
79 }
80
81 } // namespace Dali