-#ifndef __DALI_REF_OBJECT_H__
-#define __DALI_REF_OBJECT_H__
+#ifndef DALI_REF_OBJECT_H
+#define DALI_REF_OBJECT_H
/*
- * Copyright (c) 2015 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.
*/
// EXTERNAL INCLUDES
+#include <atomic>
+#include <cstdint> // uint32_t
+
+// INTERNAL INCLUDES
#include <dali/public-api/common/dali-common.h>
#include <dali/public-api/common/intrusive-ptr.h>
namespace Dali
{
/**
- * @addtogroup dali-core-object
+ * @addtogroup dali_core_object
* @{
*/
/**
* @brief Base class for reference counted objects.
*
- * Typically this should be used with an 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();
* @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();
* @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);
* @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