Clean up the code to build successfully on macOS
[platform/core/uifw/dali-core.git] / dali / public-api / signals / connection-tracker.cpp
1 /*
2  * Copyright (c) 2020 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()
28 {
29 }
30
31 ConnectionTracker::~ConnectionTracker()
32 {
33   DisconnectAll();
34 }
35
36 void ConnectionTracker::DisconnectAll()
37 {
38   std::size_t size = mConnections.Size();
39
40   for(std::size_t i = 0; i < size; ++i)
41   {
42     auto& connection = mConnections[i];
43
44     // Tell the signal that the slot is disconnected
45     connection.GetSlotObserver()->SlotDisconnected(connection.GetCallback());
46
47   }
48
49   mConnections.Clear();
50 }
51
52 void ConnectionTracker::SignalConnected(SlotObserver* slotObserver, CallbackBase* callback)
53 {
54   mConnections.PushBack(SlotConnection(slotObserver, callback));
55 }
56
57 void ConnectionTracker::SignalDisconnected(SlotObserver* signal, CallbackBase* callback)
58 {
59   std::size_t size = mConnections.Size();
60
61   for(std::size_t i = 0; i < size; ++i)
62   {
63     auto& connection = mConnections[i];
64
65     // Pointer comparison i.e. SignalConnection contains pointer to same callback instance
66     if(connection.GetCallback() == callback)
67     {
68       // Remove from connection list
69       mConnections.Erase(mConnections.Begin() + i);
70
71       // Disconnection complete
72       return;
73     }
74   }
75
76   DALI_ABORT("Callback lost in SignalDisconnected()");
77 }
78
79 std::size_t ConnectionTracker::GetConnectionCount() const
80 {
81   return mConnections.Size();
82 }
83
84 } // namespace Dali