X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fpublic-api%2Fobject%2Fref-object.h;h=5aab626c43ed03f8008d16634ae91822e308b90e;hb=36ea2dd0841fadf61696fffc8bb649b63ebfe4b6;hp=b9226bd8188a8cb7b1cde3a1da0bd995031c14b1;hpb=d731255c514247b1cb4a5f60e3d841b072e2d464;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/public-api/object/ref-object.h b/dali/public-api/object/ref-object.h index b9226bd..5aab626 100644 --- a/dali/public-api/object/ref-object.h +++ b/dali/public-api/object/ref-object.h @@ -1,8 +1,8 @@ -#ifndef __DALI_REF_OBJECT_H__ -#define __DALI_REF_OBJECT_H__ +#ifndef DALI_REF_OBJECT_H +#define DALI_REF_OBJECT_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,47 +19,58 @@ */ // EXTERNAL INCLUDES +#include +#include // uint32_t + +// INTERNAL INCLUDES #include #include namespace Dali { +/** + * @addtogroup dali_core_object + * @{ + */ class Value; /** * @brief Base class for reference counted objects. * - * Typically this should be used with a Boost instrusive pointer, + * Typically this should be used with an intrusive pointer, * instead of calling Reference() and Unreference() methods directly. + * @SINCE_1_0.0 */ -class DALI_IMPORT_API RefObject +class DALI_CORE_API RefObject { public: - /** - * @brief Increment the object's reference count. + * @brief Increments the object's reference count. + * @SINCE_1_0.0 */ void Reference(); /** - * @brief Decrement the object's reference count. + * @brief Decrements the object's reference count. * * When the reference count drops to zero, the object will self-destruct. + * @SINCE_1_0.0 */ void Unreference(); /** - * @brief Retrieve the object's reference count. + * @brief Retrieves the object's reference count. * + * @SINCE_1_0.0 * @return The reference count */ - int ReferenceCount(); + uint32_t ReferenceCount(); protected: - /** * @brief Default constructor. + * @SINCE_1_0.0 */ RefObject(); @@ -67,6 +78,7 @@ protected: * @brief RefObject is intended as a base class. * * A RefObject may only be deleted when its reference count is zero. + * @SINCE_1_0.0 */ virtual ~RefObject(); @@ -74,6 +86,7 @@ protected: * @brief Copy constructor. * * The newly copied object will have a reference count of zero. + * @SINCE_1_0.0 * @param[in] rhs The object to copy */ RefObject(const RefObject& rhs); @@ -82,16 +95,24 @@ protected: * @brief Assignment operator. * * The newly copied object will have a reference count of zero. + * @SINCE_1_0.0 * @param[in] rhs The object to copy - * @return a reference to this + * @return A reference to this */ RefObject& operator=(const RefObject& rhs); -private: + // Not movable + + RefObject(RefObject&& rhs) = delete; ///< Deleted move constructor + RefObject& operator=(RefObject&& rhs) = delete; ///< Deleted move assignment operator - volatile int mCount; ///< Reference count +private: + std::atomic_uint32_t mCount{0u}; ///< Reference count }; +/** + * @} + */ } // namespace Dali -#endif // __DALI_REF_OBJECT_H__ +#endif // DALI_REF_OBJECT_H