2 * Copyright (c) 2021 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>
23 BaseObject::Impl::Impl(BaseObject& baseObject)
24 : mBaseObject(baseObject)
28 BaseObject::Impl::~Impl()
30 // Notification for observers
31 for(auto&& item : mObservers)
33 item->ObjectDestroyed(mBaseObject);
37 BaseObject::Impl& BaseObject::Impl::Get(BaseObject& baseObject)
39 return *baseObject.mImpl;
42 const BaseObject::Impl& BaseObject::Impl::Get(const BaseObject& baseObject)
44 return *baseObject.mImpl;
47 void BaseObject::Impl::AddObserver(Observer& observer)
49 // make sure an observer doesn't observe the same object twice
50 // otherwise it will get multiple calls to ObjectDestroyed()
51 DALI_ASSERT_DEBUG(mObservers.End() == std::find(mObservers.Begin(), mObservers.End(), &observer));
53 mObservers.PushBack(&observer);
56 void BaseObject::Impl::RemoveObserver(Observer& observer)
58 // Find the observer...
59 const auto endIter = mObservers.End();
60 for(auto iter = mObservers.Begin(); iter != endIter; ++iter)
62 if((*iter) == &observer)
64 mObservers.Erase(iter);
68 DALI_ASSERT_DEBUG(endIter != mObservers.End());