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/internal/event/common/base-object-impl.h>
24 BaseObject::Impl::Impl( BaseObject& baseObject )
25 : mBaseObject( baseObject )
29 BaseObject::Impl::~Impl()
31 // Notification for observers
32 for( auto&& item : mObservers )
34 item->ObjectDestroyed( mBaseObject );
38 BaseObject::Impl& BaseObject::Impl::Get( BaseObject& baseObject )
40 return *baseObject.mImpl;
43 const BaseObject::Impl& BaseObject::Impl::Get( const BaseObject& baseObject )
45 return *baseObject.mImpl;
48 void BaseObject::Impl::AddObserver( Observer& observer )
50 // make sure an observer doesn't observe the same object twice
51 // otherwise it will get multiple calls to ObjectDestroyed()
52 DALI_ASSERT_DEBUG( mObservers.End() == std::find( mObservers.Begin(), mObservers.End(), &observer) );
54 mObservers.PushBack( &observer );
57 void BaseObject::Impl::RemoveObserver( Observer& observer )
59 // Find the observer...
60 const auto endIter = mObservers.End();
61 for( auto iter = mObservers.Begin(); iter != endIter; ++iter )
63 if( ( *iter ) == &observer)
65 mObservers.Erase( iter );
69 DALI_ASSERT_DEBUG( endIter != mObservers.End() );