2 * Copyright (c) 2015 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-observers.h>
23 #include <dali/public-api/signals/signal-slot-connections.h>
28 ConnectionTracker::ConnectionTracker()
32 ConnectionTracker::~ConnectionTracker()
37 void ConnectionTracker::DisconnectAll()
39 std::size_t size = mConnections.Size();
41 for( std::size_t i = 0; i< size; ++i )
43 SlotConnection* connection = mConnections[i];
45 // Tell the signal that the slot is disconnected
46 connection->GetSlotObserver()->SlotDisconnected( connection->GetCallback() );
54 void ConnectionTracker::SignalConnected( SlotObserver* slotObserver, CallbackBase* callback )
56 SlotConnection* connection = new SlotConnection( slotObserver, callback );
57 mConnections.PushBack( connection );
60 void ConnectionTracker::SignalDisconnected( SlotObserver* signal, CallbackBase* callback )
62 std::size_t size = mConnections.Size();
64 for( std::size_t i = 0; i< size; ++i )
66 SlotConnection* connection = mConnections[i];
68 // Pointer comparison i.e. SignalConnection contains pointer to same callback instance
69 if( connection->GetCallback() == callback )
71 // Remove from connection list
72 mConnections.Erase( mConnections.Begin() + i );
77 // Disconnection complete
82 DALI_ABORT( "Callback lost in SignalDisconnected()" );
85 std::size_t ConnectionTracker::GetConnectionCount() const
87 return mConnections.Size();