aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Arrskog <topfs2@xbmc.org>2011-05-04 22:45:52 +0200
committerTobias Arrskog <topfs2@xbmc.org>2011-05-17 20:05:40 +0200
commitcb1b7acaf97f2371cb71b677fa32998ff330e397 (patch)
tree5cd6a480456a0e877c7524e6b92213c7f30e6828
parent911aa688ac8b55d814968112edf070b4b4d40c38 (diff)
Added swap method to CVariant
-rw-r--r--xbmc/utils/Variant.cpp12
-rw-r--r--xbmc/utils/Variant.h11
2 files changed, 19 insertions, 4 deletions
diff --git a/xbmc/utils/Variant.cpp b/xbmc/utils/Variant.cpp
index 616d095056..49fa02838a 100644
--- a/xbmc/utils/Variant.cpp
+++ b/xbmc/utils/Variant.cpp
@@ -386,6 +386,18 @@ void CVariant::append(CVariant variant)
push_back(variant);
}
+void CVariant::swap(CVariant &rhs)
+{
+ VariantType temp_type = m_type;
+ VariantUnion temp_data = m_data;
+
+ m_type = rhs.m_type;
+ m_data = rhs.m_data;
+
+ rhs.m_type = temp_type;
+ rhs.m_data = temp_data;
+}
+
CVariant::iterator_array CVariant::begin_array()
{
if (m_type == VariantTypeArray)
diff --git a/xbmc/utils/Variant.h b/xbmc/utils/Variant.h
index 72c2ea9d55..57a9b261f9 100644
--- a/xbmc/utils/Variant.h
+++ b/xbmc/utils/Variant.h
@@ -85,6 +85,8 @@ public:
void push_back(CVariant variant);
void append(CVariant variant);
+ void swap(CVariant &rhs);
+
private:
typedef std::vector<CVariant> VariantArray;
typedef std::map<std::string, CVariant> VariantMap;
@@ -116,9 +118,7 @@ public:
void toJsonValue(Json::Value& value) const;
private:
- VariantType m_type;
-
- union
+ union VariantUnion
{
int64_t integer;
uint64_t unsignedinteger;
@@ -127,7 +127,10 @@ private:
std::string *string;
VariantArray *array;
VariantMap *map;
- } m_data;
+ };
+
+ VariantType m_type;
+ VariantUnion m_data;
static CVariant ConstNullVariant;
};