lottie/vector: added unique(), refCount() and null() api to vpath class.
[platform/core/uifw/lottie-player.git] / src / vector / vcowptr.h
index 8e94703..39a16e4 100644 (file)
@@ -1,7 +1,8 @@
 #ifndef VCOWPTR_H
 #define VCOWPTR_H
 
-#include<assert.h>
+#include <assert.h>
+#include "vglobal.h"
 
 template <typename T>
 class vcow_ptr {
@@ -11,42 +12,52 @@ class vcow_ptr {
         model() = default;
 
         template <class... Args>
-        explicit model(Args&&... args) : mValue(std::forward<Args>(args)...) {}
+        explicit model(Args&&... args) : mValue(std::forward<Args>(args)...)
+        {
+        }
 
         T mValue;
     };
     model* mModel;
+
 public:
     using element_type = T;
 
-    vcow_ptr() {
+    vcow_ptr()
+    {
         static model default_s;
         mModel = &default_s;
         ++mModel->mRef;
     }
 
-    ~vcow_ptr() {
+    ~vcow_ptr()
+    {
         if (mModel && (--mModel->mRef == 0)) delete mModel;
     }
 
     template <class... Args>
-    vcow_ptr(Args&&... args)
-        : mModel(new model(std::forward<Args>(args)...)) {}
+    vcow_ptr(Args&&... args) : mModel(new model(std::forward<Args>(args)...))
+    {
+    }
 
-    vcow_ptr(const vcow_ptr& x) noexcept : mModel(x.mModel) {
+    vcow_ptr(const vcow_ptr& x) noexcept : mModel(x.mModel)
+    {
         assert(mModel);
         ++mModel->mRef;
     }
-    vcow_ptr(vcow_ptr&& x) noexcept : mModel(x.mModel) {
+    vcow_ptr(vcow_ptr&& x) noexcept : mModel(x.mModel)
+    {
         assert(mModel);
         x.mModel = nullptr;
     }
 
-    auto operator=(const vcow_ptr& x) noexcept -> vcow_ptr& {
+    auto operator=(const vcow_ptr& x) noexcept -> vcow_ptr&
+    {
         return *this = vcow_ptr(x);
     }
 
-    auto operator=(vcow_ptr&& x) noexcept -> vcow_ptr& {
+    auto operator=(vcow_ptr&& x) noexcept -> vcow_ptr&
+    {
         auto tmp = std::move(x);
         swap(*this, tmp);
         return *this;
@@ -56,27 +67,38 @@ public:
 
     auto operator-> () const noexcept -> const element_type* { return &read(); }
 
-    bool unique() const noexcept {
+    int refCount() const noexcept
+    {
+        assert(mModel);
+
+        return mModel->mRef;
+    }
+
+    bool unique() const noexcept
+    {
         assert(mModel);
 
         return mModel->mRef == 1;
     }
 
-    auto write() -> element_type& {
+    auto write() -> element_type&
+    {
         if (!unique()) *this = vcow_ptr(read());
 
         return mModel->mValue;
     }
 
-    auto read() const noexcept -> const element_type& {
+    auto read() const noexcept -> const element_type&
+    {
         assert(mModel);
 
         return mModel->mValue;
     }
 
-    friend inline void swap(vcow_ptr& x, vcow_ptr& y) noexcept {
+    friend inline void swap(vcow_ptr& x, vcow_ptr& y) noexcept
+    {
         std::swap(x.mModel, y.mModel);
     }
 };
 
-#endif // VCOWPTR_H
+#endif  // VCOWPTR_H