Merge branch 'devel/master' into tizen
[platform/core/uifw/dali-core.git] / dali / internal / event / common / base-object-impl.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/internal/event/common/base-object-impl.h>
20
21 namespace Dali
22 {
23 BaseObject::Impl::Impl(BaseObject& baseObject)
24 : mBaseObject(baseObject)
25 {
26 }
27
28 BaseObject::Impl::~Impl()
29 {
30   // Notification for observers
31   for(auto&& item : mObservers)
32   {
33     item->ObjectDestroyed(mBaseObject);
34   }
35 }
36
37 BaseObject::Impl& BaseObject::Impl::Get(BaseObject& baseObject)
38 {
39   return *baseObject.mImpl;
40 }
41
42 const BaseObject::Impl& BaseObject::Impl::Get(const BaseObject& baseObject)
43 {
44   return *baseObject.mImpl;
45 }
46
47 void BaseObject::Impl::AddObserver(Observer& observer)
48 {
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));
52
53   mObservers.PushBack(&observer);
54 }
55
56 void BaseObject::Impl::RemoveObserver(Observer& observer)
57 {
58   // Find the observer...
59   const auto endIter = mObservers.End();
60   for(auto iter = mObservers.Begin(); iter != endIter; ++iter)
61   {
62     if((*iter) == &observer)
63     {
64       mObservers.Erase(iter);
65       break;
66     }
67   }
68   DALI_ASSERT_DEBUG(endIter != mObservers.End());
69 }
70
71 } // namespace Dali