DSObject: update pimpl 91/241491/1
authorMinJeong Kim <minjjj.kim@samsung.com>
Thu, 5 Mar 2020 05:14:11 +0000 (14:14 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 20 Aug 2020 09:43:57 +0000 (18:43 +0900)
- removed constructor with name(string)
- clean data at destructor
- added operator= for move assignment
- create __d_ptr for DSObjectPrivate using std::make_unique

Change-Id: I006eeb34ce03fee97ea8e804654f6a355120d780
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/lib/DSObject.cpp
src/lib/DSObject.h
src/lib/DSObjectPrivate.h

index f26ec7f..7052226 100644 (file)
@@ -3,14 +3,16 @@
 #include "DSProperty.h"
 
 namespace display_server {
-       DSObjectPrivate::DSObjectPrivate(DSObject *p_ptr, std::string name) :
+       DSObjectPrivate::DSObjectPrivate(DSObject *p_ptr) :
                __p_ptr(p_ptr)
        {
-               __type_info.name = name;
        }
 
        DSObjectPrivate::~DSObjectPrivate()
        {
+               __type_info.name.clear();
+               __observers.clear();
+               __properties.clear();
        }
 
        void DSObjectPrivate::attachDestroyObserver(DSObjectObserverIface *ob)
@@ -54,9 +56,27 @@ namespace display_server {
                return __type_info.name;
        }
 
-       DSObject::DSObject(std::string name) :
-               __d_ptr(new DSObjectPrivate(this, name))
+       DSObjectPrivate& DSObjectPrivate::operator=(DSObjectPrivate &&p)
+       {
+               if (__p_ptr)
+                       return *this;
+
+               __type_info.name = p.__type_info.name;
+               __p_ptr = p.__p_ptr;
+               __observers = std::move(p.__observers);
+               __properties = std::move(p.__properties);
+
+               p.__type_info.name.clear();
+               p.__p_ptr = nullptr;
+               p.__observers.clear();
+               p.__properties.clear();
+
+               return *this;
+       }
+
+       DSObject::DSObject()
        {
+               __d_ptr = std::make_unique<DSObjectPrivate>(this);
        }
 
        DSObject::~DSObject()
@@ -88,4 +108,9 @@ namespace display_server {
        {
                return d_func()->getName();
        }
+
+       DSObject::DSObject(std::unique_ptr<DSObjectPrivate> ptr)
+       {
+               __d_ptr = std::move(ptr);
+       }
 } // namespace display_server
index 6fb8fb1..ba84625 100644 (file)
@@ -14,7 +14,7 @@ namespace display_server {
 
        class DSObject {
        public:
-               explicit DSObject(std::string name = "WObject");
+               explicit DSObject();
                virtual ~DSObject();
 
                void attachDestroyObserver(DSObjectObserverIface *ob);
@@ -24,7 +24,9 @@ namespace display_server {
                const DSPropertyVariant &getProperty(std::string key);
 
                std::string getName(void);
-
+       protected:
+               DSObject(std::unique_ptr<DSObjectPrivate> ptr);
+               std::unique_ptr<DSObjectPrivate> __d_ptr;
        private:
                inline DSObjectPrivate *d_func()
                {
@@ -34,8 +36,6 @@ namespace display_server {
                {
                        return __d_ptr.get();
                }
-
-               std::unique_ptr<DSObjectPrivate> __d_ptr;
        };
 
        class DSObjectObserverIface {
index b44024c..4fdf068 100644 (file)
@@ -15,7 +15,7 @@ namespace display_server {
        class DSObjectPrivate {
        public:
                DSObjectPrivate() = delete;
-               DSObjectPrivate(DSObject *p_ptr, std::string name = "default");
+               DSObjectPrivate(DSObject *p_ptr);
                virtual ~DSObjectPrivate();
 
                inline const DSObject *p_func() const
@@ -32,6 +32,8 @@ namespace display_server {
 
                std::string getName(void);
 
+               DSObjectPrivate &operator=(DSObjectPrivate &&p);           //move assignment
+
        private:
                struct
                {