Convert Variant to json method should be const
[xbmc:xbmc-antiquated.git] / xbmc / utils / Variant.h
1 #pragma once
2 /*
3  *      Copyright (C) 2005-2010 Team XBMC
4  *      http://www.xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, write to
18  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
19  *  http://www.gnu.org/copyleft/gpl.html
20  *
21  */
22 #include <map>
23 #include <vector>
24 #include <string>
25 #include <stdint.h>
26
27 namespace Json
28 {
29   class Value;
30 }
31
32 class CVariant
33 {
34 public:
35   enum VariantType
36   {
37     VariantTypeInteger,
38     VariantTypeUnsignedInteger,
39     VariantTypeBoolean,
40     VariantTypeString,
41     VariantTypeFloat,
42     VariantTypeArray,
43     VariantTypeObject,
44     VariantTypeNull,
45     VariantTypeConstNull
46   };
47
48   CVariant(VariantType type = VariantTypeNull);
49   CVariant(int integer);
50   CVariant(int64_t integer);
51   CVariant(unsigned int unsignedinteger);
52   CVariant(uint64_t unsignedinteger);
53   CVariant(float fFloat);
54   CVariant(bool boolean);
55   CVariant(const char *str);
56   CVariant(const std::string &str);
57   CVariant(const CVariant &variant);
58
59   ~CVariant();
60
61   bool isInteger() const;
62   bool isUnsignedInteger() const;
63   bool isBoolean() const;
64   bool isString() const;
65   bool isFloat() const;
66   bool isArray() const;
67   bool isObject() const;
68   bool isNull() const;
69
70   int64_t asInteger(int64_t fallback = 0) const;
71   uint64_t asUnsignedInteger(uint64_t fallback = 0u) const;
72   bool asBoolean(bool fallback = false) const;
73   const char *asString(const char *fallback = "") const;
74   float asFloat(float fallback = 0.0f) const;
75
76   CVariant &operator[](std::string key);
77   CVariant &operator[](unsigned int position);
78
79   CVariant &operator=(const CVariant &rhs);
80
81   void push_back(CVariant variant);
82
83   unsigned int size() const;
84   bool empty() const;
85   void clear();
86   void erase(std::string key);
87   void erase(unsigned int position);
88
89   void debug();
90   void internaldebug();
91
92   void toJsonValue(Json::Value& value) const;
93 private:
94   VariantType m_type;
95
96   typedef std::vector<CVariant> VariantArray;
97   typedef std::map<std::string, CVariant> VariantMap;
98
99   union
100   {
101     int64_t integer;
102     uint64_t unsignedinteger;
103     bool boolean;
104     float fFloat;
105     std::string *string;
106     VariantArray *array;
107     VariantMap *map;
108   } m_data;
109
110   static CVariant ConstNullVariant;
111 };