aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Arrskog <topfs2@xbmc.org>2011-05-04 20:13:27 +0200
committerTobias Arrskog <topfs2@xbmc.org>2011-05-17 20:05:38 +0200
commitc32316c569c026fb09eb46d67d23e9c364e97e3c (patch)
tree385f71355ef3fd992527bb0a78431618f0cb2f64
parent6b4b5a08508cb0cd4dd3fde572870c44641e555c (diff)
Added array and map iterators to CVariant
-rw-r--r--xbmc/utils/Variant.cpp64
-rw-r--r--xbmc/utils/Variant.h24
2 files changed, 85 insertions, 3 deletions
diff --git a/xbmc/utils/Variant.cpp b/xbmc/utils/Variant.cpp
index 5971dfa8d3..f55ada0cc0 100644
--- a/xbmc/utils/Variant.cpp
+++ b/xbmc/utils/Variant.cpp
@@ -332,6 +332,70 @@ void CVariant::append(CVariant variant)
push_back(variant);
}
+CVariant::iterator_array CVariant::begin_array()
+{
+ if (m_type == VariantTypeArray)
+ return m_data.array->begin();
+ else
+ return iterator_array();
+}
+
+CVariant::const_iterator_array CVariant::begin_array() const
+{
+ if (m_type == VariantTypeArray)
+ return m_data.array->begin();
+ else
+ return const_iterator_array();
+}
+
+CVariant::iterator_array CVariant::end_array()
+{
+ if (m_type == VariantTypeArray)
+ return m_data.array->end();
+ else
+ return iterator_array();
+}
+
+CVariant::const_iterator_array CVariant::end_array() const
+{
+ if (m_type == VariantTypeArray)
+ return m_data.array->end();
+ else
+ return const_iterator_array();
+}
+
+CVariant::iterator_map CVariant::begin_map()
+{
+ if (m_type == VariantTypeObject)
+ return m_data.map->begin();
+ else
+ return iterator_map();
+}
+
+CVariant::const_iterator_map CVariant::begin_map() const
+{
+ if (m_type == VariantTypeObject)
+ return m_data.map->begin();
+ else
+ return const_iterator_map();
+}
+
+CVariant::iterator_map CVariant::end_map()
+{
+ if (m_type == VariantTypeObject)
+ return m_data.map->end();
+ else
+ return iterator_map();
+}
+
+CVariant::const_iterator_map CVariant::end_map() const
+{
+ if (m_type == VariantTypeObject)
+ return m_data.map->end();
+ else
+ return const_iterator_map();
+}
+
unsigned int CVariant::size() const
{
if (isObject())
diff --git a/xbmc/utils/Variant.h b/xbmc/utils/Variant.h
index 94925c3652..2e5efc3283 100644
--- a/xbmc/utils/Variant.h
+++ b/xbmc/utils/Variant.h
@@ -84,6 +84,27 @@ public:
void push_back(CVariant variant);
void append(CVariant variant);
+private:
+ typedef std::vector<CVariant> VariantArray;
+ typedef std::map<std::string, CVariant> VariantMap;
+
+public:
+ typedef VariantArray::iterator iterator_array;
+ typedef VariantArray::const_iterator const_iterator_array;
+
+ typedef VariantMap::iterator iterator_map;
+ typedef VariantMap::const_iterator const_iterator_map;
+
+ iterator_array begin_array();
+ const_iterator_array begin_array() const;
+ iterator_array end_array();
+ const_iterator_array end_array() const;
+
+ iterator_map begin_map();
+ const_iterator_map begin_map() const;
+ iterator_map end_map();
+ const_iterator_map end_map() const;
+
unsigned int size() const;
bool empty() const;
void clear();
@@ -96,9 +117,6 @@ public:
private:
VariantType m_type;
- typedef std::vector<CVariant> VariantArray;
- typedef std::map<std::string, CVariant> VariantMap;
-
union
{
int64_t integer;