]> git.tdb.fi Git - libs/core.git/commitdiff
Add copy constructor and copy assignment to Variant
authorMikko Rasa <tdb@tdb.fi>
Mon, 15 Dec 2008 11:40:24 +0000 (11:40 +0000)
committerMikko Rasa <tdb@tdb.fi>
Mon, 15 Dec 2008 11:40:24 +0000 (11:40 +0000)
source/core/variant.h

index 6425fbfcbf7e4046d58105b445563f5e4d221acd..6632831e9efa4557f777f36e03f30d416a853d0b 100644 (file)
@@ -19,6 +19,7 @@ private:
        struct StoreBase
        {
                virtual ~StoreBase() { }
+               virtual StoreBase *clone() const =0;
        };
 
        template<typename T>
@@ -27,6 +28,7 @@ private:
                T data;
 
                Store(T d): data(d) { }
+               virtual StoreBase *clone() const { return new Store<T>(data); }
        };
 
        StoreBase *store;
@@ -35,6 +37,7 @@ public:
        Variant(): store(0) { }
        template<typename T>
        Variant(const T &v): store(new Store<typename RemoveConst<T>::Type>(v)) { }
+       Variant(const Variant &v): store(v.store ? v.store->clone() : 0) { }
        ~Variant() { delete store; }
 
        template<typename T>
@@ -45,6 +48,13 @@ public:
                return *this;
        }
 
+       Variant &operator=(const Variant &v)
+       {
+               delete store;
+               store=(v.store ? v.store->clone() : 0);
+               return *this;
+       }
+
        template<typename T>
        T &value() const
        {