[SRUK] Initial copy from Tizen 2.2 version
[platform/core/uifw/dali-core.git] / dali / public-api / object / ref-object.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 // CLASS HEADER
18 #include <dali/public-api/object/ref-object.h>
19
20 // INTERNAL INCLUDES
21 #include <dali/public-api/common/dali-common.h>
22
23 namespace Dali
24 {
25
26 RefObject::RefObject()
27 : mCount(0)
28 {
29 }
30
31 RefObject::RefObject(const RefObject&)
32 : mCount(0) // Do not copy the reference count
33 {
34 }
35
36 RefObject::~RefObject()
37 {
38   DALI_ASSERT_DEBUG(mCount == 0);
39 }
40
41 RefObject& RefObject::operator=(const RefObject&)
42 {
43   // Do not copy the reference count
44   return *this;
45 }
46
47 void RefObject::Reference()
48 {
49   // gcc > 4.1 builtin atomic add and fetch (++mCount; return mCount)
50   __sync_add_and_fetch(&mCount, 1);
51 }
52
53 void RefObject::Unreference()
54 {
55   // gcc > 4.1 builtin atomic subtract and fetch (--mCount; return mCount)
56   if (__sync_sub_and_fetch(&mCount, 1) == 0)
57   {
58     delete this;
59   }
60 }
61
62 int RefObject::ReferenceCount()
63 {
64   return mCount;
65 }
66
67 } // namespace Dali
68
69