summaryrefslogtreecommitdiff
path: root/UnityCore
diff options
Diffstat (limited to 'UnityCore')
-rw-r--r--UnityCore/Variant.cpp14
-rw-r--r--UnityCore/Variant.h2
2 files changed, 15 insertions, 1 deletions
diff --git a/UnityCore/Variant.cpp b/UnityCore/Variant.cpp
index 21507d001..e8eba40a2 100644
--- a/UnityCore/Variant.cpp
+++ b/UnityCore/Variant.cpp
@@ -31,7 +31,7 @@ Variant::Variant()
Variant::Variant(GVariant* variant)
: variant_(variant)
{
- g_variant_ref_sink(variant_);
+ if (variant) g_variant_ref_sink(variant_);
}
Variant::Variant(GVariant* variant, StealRef const& ref)
@@ -95,6 +95,11 @@ bool Variant::ASVToHints(HintsMap& hints) const
return true;
}
+void Variant::swap(Variant& other)
+{
+ std::swap(this->variant_, other.variant_);
+}
+
Variant& Variant::operator=(GVariant* val)
{
if (variant_) g_variant_unref(variant_);
@@ -103,6 +108,13 @@ Variant& Variant::operator=(GVariant* val)
return *this;
}
+Variant& Variant::operator=(Variant other)
+{
+ swap(other);
+
+ return *this;
+}
+
Variant::operator GVariant* () const
{
return variant_;
diff --git a/UnityCore/Variant.h b/UnityCore/Variant.h
index a851a060d..1dcebd38d 100644
--- a/UnityCore/Variant.h
+++ b/UnityCore/Variant.h
@@ -53,7 +53,9 @@ public:
bool ASVToHints(HintsMap& hints) const;
+ void swap(Variant&);
Variant& operator=(GVariant*);
+ Variant& operator=(Variant);
operator GVariant*() const;
operator bool() const;