00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __libutilxx__sella__variant__Variant_H__
00010 #define __libutilxx__sella__variant__Variant_H__
00011
00012 #include "../../common.h"
00013 #include "TypeCastException.h"
00014 #include "UnsupportedOperatorException.h"
00015 #include "Nullable.h"
00016 #include "Null.h"
00017 #include "Boolean.h"
00018 #include "Signed.h"
00019 #include "Unsigned.h"
00020 #include "Double.h"
00021 #include "String.h"
00022 #include "UUID.h"
00023 #include "Binary.h"
00024 #include "Pointer.h"
00025 #include "IPAddress.h"
00026 #include "IPPrefix.h"
00027 #include "Interval.h"
00028 #include "Time.h"
00029 #include "Date.h"
00030 #include "TimeStamp.h"
00031 #include "Vector.h"
00032 #include "Object.h"
00033
00034 #include <ctype.h>
00035 #include <iostream>
00036 #include <memory>
00037 #include <algorithm>
00038
00039 #include <boost/regex.hpp>
00040 #include <boost/iterator/iterator_facade.hpp>
00041
00042 namespace sella {
00043 namespace variant {
00044 class Variant;
00045 class Variant_iterator;
00046
00047 struct iterator_t {
00048 int type;
00049 std::vector<Variant>::iterator vit;
00050 std::map<std::string, Variant>::iterator oit;
00051 Variant *v;
00052 };
00053 }
00054 }
00055
00056 class sella::variant::Variant {
00057 public:
00058 typedef std::shared_ptr<Variant> shared;
00059 typedef Variant *ptr;
00060 typedef Variant_iterator iterator;
00061 typedef const Variant_iterator const_iterator;
00062
00063 public:
00064
00065 const static int TypeAuto = 0x00;
00066
00067 const static int TypeNull = 0x01;
00068
00069 const static int TypeBoolean = 0x02;
00070 const static int TypeSigned = 0x03;
00071 const static int TypeUnsigned = 0x04;
00072 const static int TypeDouble = 0x05;
00073 const static int TypeString = 0x06;
00074 const static int TypeUUID = 0x07;
00075 const static int TypeBinary = 0x08;
00076 const static int TypePointer = 0x09;
00077 const static int TypeIPAddress = 0x10;
00078 const static int TypeIPPrefix = 0x11;
00079
00080 const static int TypeInterval = 0x20;
00081 const static int TypeTime = 0x21;
00082 const static int TypeDate = 0x22;
00083 const static int TypeTimeStamp = 0x23;
00084
00085 const static int TypeVector = 0x50;
00086 const static int TypeObject = 0x51;
00087
00088 const static int JSON = 0x00;
00089 const static int XML = 0x01;
00090
00091 const static int IterScalar = 0x00;
00092 const static int IterVector = 0x01;
00093 const static int IterObject = 0x02;
00094
00095
00096 Variant() throw ();
00097 Variant(std::shared_ptr<Nullable> value, int type) throw (TypeCastException);
00098 Variant(const char *value, int type = TypeAuto) throw (TypeCastException);
00099 Variant(const std::string &value, int type = TypeString) throw (TypeCastException);
00100 Variant(const sella::util::UUID &value) throw ();
00101 Variant(uuid_t &value) throw ();
00102 Variant(void *ptr) throw ();
00103 Variant(bool value) throw ();
00104 Variant(uint8_t value) throw ();
00105 Variant(uint16_t value) throw ();
00106 Variant(uint32_t value) throw ();
00107 Variant(uint64_t value) throw ();
00108 Variant(int8_t value) throw ();
00109 Variant(int16_t value) throw ();
00110 Variant(int32_t value) throw ();
00111 Variant(int64_t value) throw ();
00112 Variant(float value) throw ();
00113 Variant(double value) throw ();
00114 Variant(const std::vector<std::string> &token) throw (TypeCastException);
00115 #ifdef __LP64__
00116 Variant(unsigned long long value) throw ();
00117 Variant(long long value) throw ();
00118 #else
00119 Variant(unsigned long value) throw ();
00120 Variant(long value) throw ();
00121 #endif
00122
00123 Variant(const Variant &other) throw ();
00124 Variant(const Variant &&other) throw ();
00125 virtual ~Variant() throw ();
00126
00127 iterator begin() throw ();
00128 iterator end() throw ();
00129
00130
00131 int getType() const throw (UnsupportedOperatorException);
00132 void setType(int type) throw (TypeCastException);
00133 const char* getTypeName(int type = -1) const throw ();
00134 Variant& parse(const std::string &value, int type = TypeAuto) throw (TypeCastException);
00135 void clear() throw ();
00136 size_t size() const throw ();
00137 bool empty() const throw ();
00138 bool isScalar() const throw ();
00139 bool isNumeric() const throw ();
00140 bool isTemporal() const throw ();
00141 bool isNull() const throw ();
00142 bool isBoolean() const throw ();
00143 bool isSigned() const throw ();
00144 bool isUnsigned() const throw ();
00145 bool isDouble() const throw ();
00146 bool isString() const throw ();
00147 bool isUUID() const throw ();
00148 bool isBinary() const throw ();
00149 bool isPointer() const throw ();
00150 bool isIPAddress() const throw ();
00151 bool isIPPrefix() const throw ();
00152 bool isInterval() const throw ();
00153 bool isTime() const throw ();
00154 bool isDate() const throw ();
00155 bool isTimeStamp() const throw ();
00156 bool isVector() const throw ();
00157 bool isObject() const throw ();
00158
00159 template <class T> bool contains(const T &value) throw (UnsupportedOperatorException) {
00160 Variant v(value);
00161
00162 if (getType() == TypeObject) {
00163 const auto &r = *(get<Object>().getObject());
00164
00165 return (r.find(v.str()) != r.end());
00166 } else if (getType() == TypeVector) {
00167 const auto &r = *(get<Vector>().getVector());
00168
00169 return (std::find(r.begin(), r.end(), v) != r.end());
00170 }
00171
00172 return (*this == v);
00173 }
00174
00175 bool erase(const Variant &value) throw ();
00176 bool erase(int index) throw ();
00177 void shrink_to_fit() throw ();
00178
00179 template <class T> void push_back(const T &value) throw (UnsupportedOperatorException) {
00180 if (getType() != TypeVector) {
00181 (*this)[0] = value;
00182 } else {
00183 *this += value;
00184 }
00185 }
00186
00187 template <class T> const T& get() const throw () {
00188 return *std::static_pointer_cast<T>(this->value);
00189 }
00190
00191 template <class T> T& get() throw () {
00192 return *std::static_pointer_cast<T>(this->value);
00193 }
00194
00195 template <class T> T cast() const throw (TypeCastException);
00196
00197 const std::string& str(int type = JSON) const throw ();
00198 const char* c_str(int type = JSON) const throw ();
00199
00200 const std::string& json(void) const throw () { return str(JSON); }
00201 const char* c_json(void) const throw () { return c_str(JSON); }
00202 const std::string& xml(void) const throw () { return str(XML); }
00203 const char* c_xml(void) const throw () { return c_str(XML); }
00204
00205
00206 Variant& operator=(const Variant &other) throw ();
00207 Variant& operator=(const Variant &&other) throw ();
00208 Variant& operator=(const std::string &value) throw ();
00209 Variant& operator=(const char *value) throw ();
00210 Variant& operator=(const sella::util::UUID &value) throw ();
00211 Variant& operator=(uuid_t &value) throw ();
00212 Variant& operator=(void *ptr) throw ();
00213 Variant& operator=(bool value) throw ();
00214 Variant& operator=(uint8_t value) throw ();
00215 Variant& operator=(uint16_t value) throw ();
00216 Variant& operator=(uint32_t value) throw ();
00217 Variant& operator=(uint64_t value) throw ();
00218 Variant& operator=(int8_t value) throw ();
00219 Variant& operator=(int16_t value) throw ();
00220 Variant& operator=(int32_t value) throw ();
00221 Variant& operator=(int64_t value) throw ();
00222 Variant& operator=(float value) throw ();
00223 Variant& operator=(double value) throw ();
00224 #ifdef __LP64__
00225 Variant& operator=(unsigned long long value) throw ();
00226 Variant& operator=(long long value) throw ();
00227 #else
00228 Variant& operator=(unsigned long value) throw ();
00229 Variant& operator=(long value) throw ();
00230 #endif
00231
00232 bool operator!() throw (UnsupportedOperatorException);
00233 Variant& operator++() throw (UnsupportedOperatorException);
00234 Variant operator++(int) throw (UnsupportedOperatorException);
00235 Variant& operator--() throw (UnsupportedOperatorException);
00236 Variant operator--(int) throw (UnsupportedOperatorException);
00237
00238 const Variant& operator[](const char *key) const throw ();
00239 const Variant& operator[](const std::string &key) const throw ();
00240 Variant& operator[](const char *key) throw ();
00241 Variant& operator[](const std::string &key) throw ();
00242 const Variant& operator[](int index) const throw (UnsupportedOperatorException);
00243 Variant& operator[](int index) throw (UnsupportedOperatorException);
00244
00245 operator const char*() const throw (TypeCastException);
00246 operator const std::string&() const throw (TypeCastException);
00247 operator sella::util::UUID() const throw (TypeCastException);
00248 operator bool() const throw (TypeCastException);
00249 operator uint8_t() const throw (TypeCastException);
00250 operator uint16_t() const throw (TypeCastException);
00251 operator uint32_t() const throw (TypeCastException);
00252 operator uint64_t() const throw (TypeCastException);
00253 operator int8_t() const throw (TypeCastException);
00254 operator int16_t() const throw (TypeCastException);
00255 operator int32_t() const throw (TypeCastException);
00256 operator int64_t() const throw (TypeCastException);
00257 operator float() const throw (TypeCastException);
00258 operator double() const throw (TypeCastException);
00259 #ifdef __LP64__
00260 operator unsigned long long() const throw (TypeCastException);
00261 operator long long() const throw (TypeCastException);
00262 #else
00263 operator unsigned long() const throw (TypeCastException);
00264 operator long() const throw (TypeCastException);
00265 #endif
00266 operator void*() const throw (TypeCastException);
00267
00268
00269 friend bool operator==(const Variant &a, const Variant &b) throw ();
00270 friend bool operator!=(const Variant &a, const Variant &b) throw ();
00271 friend bool operator>(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00272 friend bool operator<(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00273 friend bool operator>=(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00274 friend bool operator<=(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00275
00276 friend Variant& operator+=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00277 friend Variant& operator-=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00278 friend Variant& operator*=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00279 friend Variant& operator/=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00280 friend Variant& operator^=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00281 friend Variant& operator%=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00282 friend Variant& operator&=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00283 friend Variant& operator|=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00284 friend Variant& operator<<=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00285 friend Variant& operator>>=(Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00286
00287 friend Variant operator+(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00288 friend Variant operator-(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00289 friend Variant operator*(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00290 friend Variant operator/(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00291 friend Variant operator^(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00292 friend Variant operator%(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00293 friend Variant operator&(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00294 friend Variant operator|(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00295 friend Variant operator<<(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00296 friend Variant operator>>(const Variant &a, const Variant &b) throw (UnsupportedOperatorException);
00297
00298
00299 friend bool operator==(const Variant &a, const char *b) throw (TypeCastException) { return a == Variant(b); }
00300 friend bool operator==(const char *a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00301 friend bool operator==(const Variant &a, const std::string &b) throw (TypeCastException) { return a == Variant(b); }
00302 friend bool operator==(const std::string &a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00303 friend bool operator==(const Variant &a, bool b) throw (TypeCastException) { return a == Variant(b); }
00304 friend bool operator==(bool a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00305 friend bool operator==(uint8_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00306 friend bool operator==(const Variant &a, uint8_t b) throw (TypeCastException) { return a == Variant(b); }
00307 friend bool operator==(uint16_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00308 friend bool operator==(const Variant &a, uint16_t b) throw (TypeCastException) { return a == Variant(b); }
00309 friend bool operator==(uint32_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00310 friend bool operator==(const Variant &a, uint32_t b) throw (TypeCastException) { return a == Variant(b); }
00311 friend bool operator==(uint64_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00312 friend bool operator==(const Variant &a, uint64_t b) throw (TypeCastException) { return a == Variant(b); }
00313 friend bool operator==(int16_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00314 friend bool operator==(const Variant &a, int16_t b) throw (TypeCastException) { return a == Variant(b); }
00315 friend bool operator==(int32_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00316 friend bool operator==(const Variant &a, int32_t b) throw (TypeCastException) { return a == Variant(b); }
00317 friend bool operator==(int64_t a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00318 friend bool operator==(const Variant &a, int64_t b) throw (TypeCastException) { return a == Variant(b); }
00319 friend bool operator==(float a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00320 friend bool operator==(const Variant &a, float b) throw (TypeCastException) { return a == Variant(b); }
00321 friend bool operator==(double a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00322 friend bool operator==(const Variant &a, double b) throw (TypeCastException) { return a == Variant(b); }
00323 #ifdef __LP64__
00324 friend bool operator==(unsigned long long a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00325 friend bool operator==(const Variant &a, unsigned long long b) throw (TypeCastException) { return a == Variant(b); }
00326 friend bool operator==(long long a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00327 friend bool operator==(const Variant &a, long long b) throw (TypeCastException) { return a == Variant(b); }
00328 #else
00329 friend bool operator==(unsigned long a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00330 friend bool operator==(const Variant &a, unsigned long b) throw (TypeCastException) { return a == Variant(b); }
00331 friend bool operator==(long a, const Variant &b) throw (TypeCastException) { return Variant(a) == b; }
00332 friend bool operator==(const Variant &a, long b) throw (TypeCastException) { return a == Variant(b); }
00333 #endif
00334
00335 friend bool operator!=(const Variant &a, const char *b) throw (TypeCastException) { return a != Variant(b); }
00336 friend bool operator!=(const char *a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00337 friend bool operator!=(const Variant &a, const std::string &b) throw (TypeCastException) { return a != Variant(b); }
00338 friend bool operator!=(const std::string &a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00339 friend bool operator!=(const Variant &a, bool b) throw (TypeCastException) { return a != Variant(b); }
00340 friend bool operator!=(bool a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00341 friend bool operator!=(uint8_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00342 friend bool operator!=(const Variant &a, uint8_t b) throw (TypeCastException) { return a != Variant(b); }
00343 friend bool operator!=(uint16_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00344 friend bool operator!=(const Variant &a, uint16_t b) throw (TypeCastException) { return a != Variant(b); }
00345 friend bool operator!=(uint32_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00346 friend bool operator!=(const Variant &a, uint32_t b) throw (TypeCastException) { return a != Variant(b); }
00347 friend bool operator!=(uint64_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00348 friend bool operator!=(const Variant &a, uint64_t b) throw (TypeCastException) { return a != Variant(b); }
00349 friend bool operator!=(int16_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00350 friend bool operator!=(const Variant &a, int16_t b) throw (TypeCastException) { return a != Variant(b); }
00351 friend bool operator!=(int32_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00352 friend bool operator!=(const Variant &a, int32_t b) throw (TypeCastException) { return a != Variant(b); }
00353 friend bool operator!=(int64_t a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00354 friend bool operator!=(const Variant &a, int64_t b) throw (TypeCastException) { return a != Variant(b); }
00355 friend bool operator!=(float a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00356 friend bool operator!=(const Variant &a, float b) throw (TypeCastException) { return a != Variant(b); }
00357 friend bool operator!=(double a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00358 friend bool operator!=(const Variant &a, double b) throw (TypeCastException) { return a != Variant(b); }
00359 #ifdef __LP64__
00360 friend bool operator!=(unsigned long long a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00361 friend bool operator!=(const Variant &a, unsigned long long b) throw (TypeCastException) { return a != Variant(b); }
00362 friend bool operator!=(long long a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00363 friend bool operator!=(const Variant &a, long long b) throw (TypeCastException) { return a != Variant(b); }
00364 #else
00365 friend bool operator!=(unsigned long a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00366 friend bool operator!=(const Variant &a, unsigned long b) throw (TypeCastException) { return a != Variant(b); }
00367 friend bool operator!=(long a, const Variant &b) throw (TypeCastException) { return Variant(a) != b; }
00368 friend bool operator!=(const Variant &a, long b) throw (TypeCastException) { return a != Variant(b); }
00369 #endif
00370
00371 friend bool operator>(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00372 friend bool operator>(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00373 friend bool operator>(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00374 friend bool operator>(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00375 friend bool operator>(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00376 friend bool operator>(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00377 friend bool operator>(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00378 friend bool operator>(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00379 friend bool operator>(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00380 friend bool operator>(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00381 friend bool operator>(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00382 friend bool operator>(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00383 friend bool operator>(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00384 friend bool operator>(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00385 friend bool operator>(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00386 friend bool operator>(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00387 friend bool operator>(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00388 friend bool operator>(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00389 friend bool operator>(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00390 friend bool operator>(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00391 friend bool operator>(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00392 friend bool operator>(const Variant &a, float b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00393 friend bool operator>(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00394 friend bool operator>(const Variant &a, double b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00395 #ifdef __LP64__
00396 friend bool operator>(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00397 friend bool operator>(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00398 friend bool operator>(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00399 friend bool operator>(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00400 #else
00401 friend bool operator>(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00402 friend bool operator>(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00403 friend bool operator>(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) > b; }
00404 friend bool operator>(const Variant &a, long b) throw (UnsupportedOperatorException) { return a > Variant(b); }
00405 #endif
00406
00407 friend bool operator<(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00408 friend bool operator<(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00409 friend bool operator<(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00410 friend bool operator<(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00411 friend bool operator<(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00412 friend bool operator<(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00413 friend bool operator<(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00414 friend bool operator<(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00415 friend bool operator<(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00416 friend bool operator<(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00417 friend bool operator<(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00418 friend bool operator<(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00419 friend bool operator<(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00420 friend bool operator<(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00421 friend bool operator<(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00422 friend bool operator<(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00423 friend bool operator<(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00424 friend bool operator<(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00425 friend bool operator<(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00426 friend bool operator<(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00427 friend bool operator<(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00428 friend bool operator<(const Variant &a, float b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00429 friend bool operator<(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00430 friend bool operator<(const Variant &a, double b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00431 #ifdef __LP64__
00432 friend bool operator<(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00433 friend bool operator<(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00434 friend bool operator<(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00435 friend bool operator<(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00436 #else
00437 friend bool operator<(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00438 friend bool operator<(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00439 friend bool operator<(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) < b; }
00440 friend bool operator<(const Variant &a, long b) throw (UnsupportedOperatorException) { return a < Variant(b); }
00441 #endif
00442
00443 friend bool operator>=(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00444 friend bool operator>=(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00445 friend bool operator>=(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00446 friend bool operator>=(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00447 friend bool operator>=(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00448 friend bool operator>=(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00449 friend bool operator>=(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00450 friend bool operator>=(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00451 friend bool operator>=(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00452 friend bool operator>=(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00453 friend bool operator>=(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00454 friend bool operator>=(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00455 friend bool operator>=(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00456 friend bool operator>=(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00457 friend bool operator>=(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00458 friend bool operator>=(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00459 friend bool operator>=(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00460 friend bool operator>=(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00461 friend bool operator>=(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00462 friend bool operator>=(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00463 friend bool operator>=(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00464 friend bool operator>=(const Variant &a, float b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00465 friend bool operator>=(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00466 friend bool operator>=(const Variant &a, double b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00467 #ifdef __LP64__
00468 friend bool operator>=(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00469 friend bool operator>=(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00470 friend bool operator>=(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00471 friend bool operator>=(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00472 #else
00473 friend bool operator>=(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00474 friend bool operator>=(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00475 friend bool operator>=(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >= b; }
00476 friend bool operator>=(const Variant &a, long b) throw (UnsupportedOperatorException) { return a >= Variant(b); }
00477 #endif
00478
00479 friend bool operator<=(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00480 friend bool operator<=(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00481 friend bool operator<=(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00482 friend bool operator<=(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00483 friend bool operator<=(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00484 friend bool operator<=(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00485 friend bool operator<=(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00486 friend bool operator<=(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00487 friend bool operator<=(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00488 friend bool operator<=(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00489 friend bool operator<=(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00490 friend bool operator<=(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00491 friend bool operator<=(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00492 friend bool operator<=(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00493 friend bool operator<=(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00494 friend bool operator<=(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00495 friend bool operator<=(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00496 friend bool operator<=(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00497 friend bool operator<=(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00498 friend bool operator<=(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00499 friend bool operator<=(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00500 friend bool operator<=(const Variant &a, float b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00501 friend bool operator<=(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00502 friend bool operator<=(const Variant &a, double b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00503 #ifdef __LP64__
00504 friend bool operator<=(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00505 friend bool operator<=(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00506 friend bool operator<=(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00507 friend bool operator<=(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00508 #else
00509 friend bool operator<=(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00510 friend bool operator<=(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00511 friend bool operator<=(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) <= b; }
00512 friend bool operator<=(const Variant &a, long b) throw (UnsupportedOperatorException) { return a <= Variant(b); }
00513 #endif
00514
00515 friend Variant operator+(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00516 friend Variant operator+(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00517 friend Variant operator+(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00518 friend Variant operator+(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00519 friend Variant operator+(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00520 friend Variant operator+(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00521 friend Variant operator+(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00522 friend Variant operator+(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00523 friend Variant operator+(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00524 friend Variant operator+(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00525 friend Variant operator+(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00526 friend Variant operator+(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00527 friend Variant operator+(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00528 friend Variant operator+(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00529 friend Variant operator+(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00530 friend Variant operator+(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00531 friend Variant operator+(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00532 friend Variant operator+(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00533 friend Variant operator+(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00534 friend Variant operator+(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00535 friend Variant operator+(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00536 friend Variant operator+(const Variant &a, float b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00537 friend Variant operator+(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00538 friend Variant operator+(const Variant &a, double b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00539 #ifdef __LP64__
00540 friend Variant operator+(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00541 friend Variant operator+(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00542 friend Variant operator+(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00543 friend Variant operator+(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00544 #else
00545 friend Variant operator+(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00546 friend Variant operator+(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00547 friend Variant operator+(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) + b; }
00548 friend Variant operator+(const Variant &a, long b) throw (UnsupportedOperatorException) { return a + Variant(b); }
00549 #endif
00550
00551 friend Variant operator-(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00552 friend Variant operator-(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00553 friend Variant operator-(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00554 friend Variant operator-(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00555 friend Variant operator-(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00556 friend Variant operator-(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00557 friend Variant operator-(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00558 friend Variant operator-(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00559 friend Variant operator-(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00560 friend Variant operator-(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00561 friend Variant operator-(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00562 friend Variant operator-(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00563 friend Variant operator-(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00564 friend Variant operator-(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00565 friend Variant operator-(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00566 friend Variant operator-(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00567 friend Variant operator-(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00568 friend Variant operator-(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00569 friend Variant operator-(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00570 friend Variant operator-(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00571 friend Variant operator-(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00572 friend Variant operator-(const Variant &a, float b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00573 friend Variant operator-(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00574 friend Variant operator-(const Variant &a, double b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00575 #ifdef __LP64__
00576 friend Variant operator-(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00577 friend Variant operator-(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00578 friend Variant operator-(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00579 friend Variant operator-(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00580 #else
00581 friend Variant operator-(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00582 friend Variant operator-(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00583 friend Variant operator-(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) - b; }
00584 friend Variant operator-(const Variant &a, long b) throw (UnsupportedOperatorException) { return a - Variant(b); }
00585 #endif
00586
00587 friend Variant operator*(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00588 friend Variant operator*(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00589 friend Variant operator*(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00590 friend Variant operator*(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00591 friend Variant operator*(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00592 friend Variant operator*(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00593 friend Variant operator*(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00594 friend Variant operator*(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00595 friend Variant operator*(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00596 friend Variant operator*(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00597 friend Variant operator*(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00598 friend Variant operator*(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00599 friend Variant operator*(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00600 friend Variant operator*(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00601 friend Variant operator*(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00602 friend Variant operator*(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00603 friend Variant operator*(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00604 friend Variant operator*(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00605 friend Variant operator*(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00606 friend Variant operator*(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00607 friend Variant operator*(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00608 friend Variant operator*(const Variant &a, float b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00609 friend Variant operator*(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00610 friend Variant operator*(const Variant &a, double b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00611 #ifdef __LP64__
00612 friend Variant operator*(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00613 friend Variant operator*(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00614 friend Variant operator*(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00615 friend Variant operator*(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00616 #else
00617 friend Variant operator*(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00618 friend Variant operator*(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00619 friend Variant operator*(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) * b; }
00620 friend Variant operator*(const Variant &a, long b) throw (UnsupportedOperatorException) { return a * Variant(b); }
00621 #endif
00622
00623 friend Variant operator/(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00624 friend Variant operator/(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00625 friend Variant operator/(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00626 friend Variant operator/(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00627 friend Variant operator/(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00628 friend Variant operator/(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00629 friend Variant operator/(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00630 friend Variant operator/(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00631 friend Variant operator/(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00632 friend Variant operator/(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00633 friend Variant operator/(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00634 friend Variant operator/(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00635 friend Variant operator/(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00636 friend Variant operator/(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00637 friend Variant operator/(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00638 friend Variant operator/(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00639 friend Variant operator/(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00640 friend Variant operator/(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00641 friend Variant operator/(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00642 friend Variant operator/(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00643 friend Variant operator/(float a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00644 friend Variant operator/(const Variant &a, float b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00645 friend Variant operator/(double a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00646 friend Variant operator/(const Variant &a, double b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00647 #ifdef __LP64__
00648 friend Variant operator/(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00649 friend Variant operator/(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00650 friend Variant operator/(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00651 friend Variant operator/(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00652 #else
00653 friend Variant operator/(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00654 friend Variant operator/(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00655 friend Variant operator/(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) / b; }
00656 friend Variant operator/(const Variant &a, long b) throw (UnsupportedOperatorException) { return a / Variant(b); }
00657 #endif
00658
00659 friend Variant operator^(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00660 friend Variant operator^(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00661 friend Variant operator^(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00662 friend Variant operator^(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00663 friend Variant operator^(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00664 friend Variant operator^(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00665 friend Variant operator^(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00666 friend Variant operator^(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00667 friend Variant operator^(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00668 friend Variant operator^(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00669 friend Variant operator^(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00670 friend Variant operator^(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00671 friend Variant operator^(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00672 friend Variant operator^(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00673 friend Variant operator^(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00674 friend Variant operator^(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00675 friend Variant operator^(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00676 friend Variant operator^(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00677 friend Variant operator^(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00678 friend Variant operator^(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00679 #ifdef __LP64__
00680 friend Variant operator^(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00681 friend Variant operator^(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00682 friend Variant operator^(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00683 friend Variant operator^(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00684 #else
00685 friend Variant operator^(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00686 friend Variant operator^(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00687 friend Variant operator^(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) ^ b; }
00688 friend Variant operator^(const Variant &a, long b) throw (UnsupportedOperatorException) { return a ^ Variant(b); }
00689 #endif
00690
00691 friend Variant operator%(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00692 friend Variant operator%(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00693 friend Variant operator%(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00694 friend Variant operator%(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00695 friend Variant operator%(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00696 friend Variant operator%(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00697 friend Variant operator%(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00698 friend Variant operator%(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00699 friend Variant operator%(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00700 friend Variant operator%(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00701 friend Variant operator%(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00702 friend Variant operator%(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00703 friend Variant operator%(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00704 friend Variant operator%(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00705 friend Variant operator%(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00706 friend Variant operator%(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00707 friend Variant operator%(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00708 friend Variant operator%(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00709 friend Variant operator%(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00710 friend Variant operator%(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00711 #ifdef __LP64__
00712 friend Variant operator%(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00713 friend Variant operator%(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00714 friend Variant operator%(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00715 friend Variant operator%(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00716 #else
00717 friend Variant operator%(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00718 friend Variant operator%(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00719 friend Variant operator%(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) % b; }
00720 friend Variant operator%(const Variant &a, long b) throw (UnsupportedOperatorException) { return a % Variant(b); }
00721 #endif
00722
00723 friend Variant operator&(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00724 friend Variant operator&(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00725 friend Variant operator&(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00726 friend Variant operator&(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00727 friend Variant operator&(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00728 friend Variant operator&(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00729 friend Variant operator&(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00730 friend Variant operator&(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00731 friend Variant operator&(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00732 friend Variant operator&(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00733 friend Variant operator&(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00734 friend Variant operator&(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00735 friend Variant operator&(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00736 friend Variant operator&(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00737 friend Variant operator&(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00738 friend Variant operator&(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00739 friend Variant operator&(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00740 friend Variant operator&(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00741 friend Variant operator&(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00742 friend Variant operator&(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00743 #ifdef __LP64__
00744 friend Variant operator&(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00745 friend Variant operator&(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00746 friend Variant operator&(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00747 friend Variant operator&(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00748 #else
00749 friend Variant operator&(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00750 friend Variant operator&(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00751 friend Variant operator&(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) & b; }
00752 friend Variant operator&(const Variant &a, long b) throw (UnsupportedOperatorException) { return a & Variant(b); }
00753 #endif
00754
00755 friend Variant operator|(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00756 friend Variant operator|(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00757 friend Variant operator|(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00758 friend Variant operator|(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00759 friend Variant operator|(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00760 friend Variant operator|(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00761 friend Variant operator|(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00762 friend Variant operator|(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00763 friend Variant operator|(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00764 friend Variant operator|(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00765 friend Variant operator|(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00766 friend Variant operator|(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00767 friend Variant operator|(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00768 friend Variant operator|(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00769 friend Variant operator|(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00770 friend Variant operator|(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00771 friend Variant operator|(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00772 friend Variant operator|(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00773 friend Variant operator|(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00774 friend Variant operator|(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00775 #ifdef __LP64__
00776 friend Variant operator|(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00777 friend Variant operator|(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00778 friend Variant operator|(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00779 friend Variant operator|(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00780 #else
00781 friend Variant operator|(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00782 friend Variant operator|(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00783 friend Variant operator|(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) | b; }
00784 friend Variant operator|(const Variant &a, long b) throw (UnsupportedOperatorException) { return a | Variant(b); }
00785 #endif
00786
00787 friend Variant operator>>(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00788 friend Variant operator>>(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00789 friend Variant operator>>(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00790 friend Variant operator>>(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00791 friend Variant operator>>(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00792 friend Variant operator>>(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00793 friend Variant operator>>(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00794 friend Variant operator>>(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00795 friend Variant operator>>(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00796 friend Variant operator>>(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00797 friend Variant operator>>(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00798 friend Variant operator>>(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00799 friend Variant operator>>(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00800 friend Variant operator>>(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00801 friend Variant operator>>(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00802 friend Variant operator>>(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00803 friend Variant operator>>(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00804 friend Variant operator>>(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00805 friend Variant operator>>(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00806 friend Variant operator>>(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00807 #ifdef __LP64__
00808 friend Variant operator>>(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00809 friend Variant operator>>(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00810 friend Variant operator>>(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00811 friend Variant operator>>(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00812 #else
00813 friend Variant operator>>(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00814 friend Variant operator>>(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00815 friend Variant operator>>(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) >> b; }
00816 friend Variant operator>>(const Variant &a, long b) throw (UnsupportedOperatorException) { return a >> Variant(b); }
00817 #endif
00818
00819 friend Variant operator<<(const Variant &a, const char *b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00820 friend Variant operator<<(const char *a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00821 friend Variant operator<<(const Variant &a, const std::string &b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00822 friend Variant operator<<(const std::string &a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00823 friend Variant operator<<(const Variant &a, bool b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00824 friend Variant operator<<(bool a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00825 friend Variant operator<<(uint8_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00826 friend Variant operator<<(const Variant &a, uint8_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00827 friend Variant operator<<(uint16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00828 friend Variant operator<<(const Variant &a, uint16_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00829 friend Variant operator<<(uint32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00830 friend Variant operator<<(const Variant &a, uint32_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00831 friend Variant operator<<(uint64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00832 friend Variant operator<<(const Variant &a, uint64_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00833 friend Variant operator<<(int16_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00834 friend Variant operator<<(const Variant &a, int16_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00835 friend Variant operator<<(int32_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00836 friend Variant operator<<(const Variant &a, int32_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00837 friend Variant operator<<(int64_t a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00838 friend Variant operator<<(const Variant &a, int64_t b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00839 #ifdef __LP64__
00840 friend Variant operator<<(unsigned long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00841 friend Variant operator<<(const Variant &a, unsigned long long b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00842 friend Variant operator<<(long long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00843 friend Variant operator<<(const Variant &a, long long b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00844 #else
00845 friend Variant operator<<(unsigned long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00846 friend Variant operator<<(const Variant &a, unsigned long b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00847 friend Variant operator<<(long a, const Variant &b) throw (UnsupportedOperatorException) { return Variant(a) << b; }
00848 friend Variant operator<<(const Variant &a, long b) throw (UnsupportedOperatorException) { return a << Variant(b); }
00849 #endif
00850
00851 friend std::istream& operator>>(std::istream &is, Variant &value) throw (TypeCastException);
00852 friend std::ostream& operator<<(std::ostream &os, const Variant &value) throw (TypeCastException);
00853
00854 private:
00855 std::shared_ptr<Nullable> value;
00856 int type;
00857 mutable std::string cache;
00858 };
00859
00860 namespace sella {
00861 namespace variant {
00862 template <> inline const char* Variant::cast<const char*>() const throw (TypeCastException) {
00863 return c_str();
00864 }
00865
00866 template <> inline std::string Variant::cast<std::string>() const throw (TypeCastException) {
00867 return str();
00868 }
00869
00870 template <> inline const std::string& Variant::cast<const std::string&>() const throw (TypeCastException) {
00871 return str();
00872 }
00873
00874 template <> inline const sella::util::UUID Variant::cast<const sella::util::UUID>() const throw (TypeCastException) {
00875 if (getType() != TypeUUID) {
00876 THROW(TypeCastException, "unable to cast from %s to a UUID value", getTypeName());
00877 }
00878
00879 return static_cast<sella::util::UUID>(*(this->get<sella::variant::UUID>().getUUID()));
00880 }
00881
00882 template <> inline bool Variant::cast<bool>() const throw (TypeCastException) {
00883 if (!this->value->isNull()) {
00884 switch (this->getType()) {
00885 case TypeBoolean:
00886 return *(this->get<sella::variant::Boolean>().getBoolean());
00887
00888 case TypeSigned:
00889 return static_cast<bool>(*(this->get<sella::variant::Signed>().getSigned()));
00890
00891 case TypeUnsigned:
00892 return static_cast<bool>(*(this->get<sella::variant::Unsigned>().getUnsigned()));
00893
00894 case TypeDouble:
00895 return static_cast<bool>(*(this->get<sella::variant::Double>().getDouble()));
00896
00897 case TypeString:
00898 if (boost::regex_match(*(this->get<sella::variant::String>().getString()), Boolean::Pattern)) {
00899 return (tolower((*this->get<sella::variant::String>().getString())[0]) == 't');
00900 }
00901 THROW(TypeCastException, "unable to cast from %s to a boolean value (invalid string)", getTypeName());
00902
00903 case TypeInterval:
00904 return static_cast<bool>(*(this->get<sella::variant::Interval>().getUsec()));
00905
00906 case TypeTime:
00907 return static_cast<bool>(*(this->get<sella::variant::Time>().getUsec()));
00908
00909 case TypeDate:
00910 return static_cast<bool>(*(this->get<sella::variant::Date>().getUsec()));
00911
00912 case TypeTimeStamp:
00913 return static_cast<bool>(*(this->get<sella::variant::TimeStamp>().getUsec()));
00914
00915 case TypeVector:
00916 return this->get<sella::variant::Vector>().empty();
00917
00918 case TypeObject:
00919 return this->get<sella::variant::Object>().empty();
00920
00921 case TypeBinary:
00922 return this->get<sella::variant::Binary>().empty();
00923
00924 default:
00925 THROW(TypeCastException, "unable to cast from %s to bool", getTypeName());
00926 }
00927 }
00928
00929 return 0;
00930 }
00931
00932 template <> inline uint64_t Variant::cast<uint64_t>() const throw (TypeCastException) {
00933 if (!this->value->isNull()) {
00934 switch (this->getType()) {
00935 case TypeBoolean:
00936 return *(this->get<sella::variant::Boolean>().getBoolean()) ? 1 : 0;
00937
00938 case TypeSigned:
00939 if (*(this->get<sella::variant::Signed>().getSigned()) >= 0) {
00940 return static_cast<uint64_t>(*(this->get<sella::variant::Signed>().getSigned()));
00941 }
00942 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value is negative)", getTypeName());
00943
00944 case TypeUnsigned:
00945 return *(this->get<sella::variant::Unsigned>().getUnsigned());
00946
00947 case TypeDouble:
00948 if (*(this->get<sella::variant::Double>().getDouble()) >= 0) {
00949 if (*(this->get<sella::variant::Double>().getDouble()) <= std::numeric_limits<uint64_t>::max()) {
00950 return static_cast<uint64_t>(*(this->get<sella::variant::Double>().getDouble()));
00951 }
00952 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value too large)", getTypeName());
00953 }
00954 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value is negative)", getTypeName());
00955
00956 case TypeString:
00957 try {
00958 return std::stoull(*this->get<sella::variant::String>().getString());
00959 } catch (std::invalid_argument &e) {
00960 THROW(TypeCastException, "unable to cast from %s to a signed value (invalid string)", getTypeName());
00961 } catch (std::out_of_range &e) {
00962 THROW(TypeCastException, "unable to cast from %s to a signed value (overflow/underflow)", getTypeName());
00963 }
00964
00965 case TypeInterval:
00966 if (*(this->get<sella::variant::Interval>().getUsec()) >= 0) {
00967 return *(this->get<sella::variant::Interval>().getUsec());
00968 }
00969 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value is negative)", getTypeName());
00970
00971 case TypeTime:
00972 if (*(this->get<sella::variant::Time>().getUsec()) >= 0) {
00973 return *(this->get<sella::variant::Time>().getUsec());
00974 }
00975 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value is negative)", getTypeName());
00976
00977 case TypeDate:
00978 if (*(this->get<sella::variant::Date>().getUsec()) >= 0) {
00979 return *(this->get<sella::variant::Date>().getUsec());
00980 }
00981 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value is negative)", getTypeName());
00982
00983 case TypeTimeStamp:
00984 if (*(this->get<sella::variant::TimeStamp>().getUsec()) >= 0) {
00985 return *(this->get<sella::variant::TimeStamp>().getUsec());
00986 }
00987 THROW(TypeCastException, "unable to cast from %s to an unsigned value (value is negative)", getTypeName());
00988
00989 case TypeVector:
00990 case TypeObject:
00991 case TypeBinary:
00992 default:
00993 THROW(TypeCastException, "unable to cast from %s to uint64_t", getTypeName());
00994 }
00995 }
00996
00997 return 0;
00998 }
00999
01000 template <> inline uint32_t Variant::cast<uint32_t>() const throw (TypeCastException) {
01001 return (uint32_t) this->cast<uint64_t>();
01002 }
01003
01004 template <> inline uint16_t Variant::cast<uint16_t>() const throw (TypeCastException) {
01005 return (uint16_t) this->cast<uint64_t>();
01006 }
01007
01008 template <> inline uint8_t Variant::cast<uint8_t>() const throw (TypeCastException) {
01009 return (uint8_t) this->cast<uint64_t>();
01010 }
01011
01012 template <> inline int64_t Variant::cast<int64_t>() const throw (TypeCastException) {
01013 if (!this->value->isNull()) {
01014 switch (this->getType()) {
01015 case TypeBoolean:
01016 return *(this->get<sella::variant::Boolean>().getBoolean()) ? 1 : 0;
01017
01018 case TypeSigned:
01019 return *(this->get<sella::variant::Signed>().getSigned());
01020
01021 case TypeUnsigned:
01022 if (*(this->get<sella::variant::Unsigned>().getUnsigned()) <= static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
01023 return static_cast<int64_t>(*(this->get<sella::variant::Unsigned>().getUnsigned()));
01024 }
01025 THROW(TypeCastException, "unable to cast from %s to a signed value (value too large)", getTypeName());
01026
01027 case TypeDouble:
01028 if (*(this->get<sella::variant::Double>().getDouble()) < static_cast<double>(std::numeric_limits<int64_t>::max())) {
01029 return static_cast<int64_t>(*(this->get<sella::variant::Double>().getDouble()));
01030 }
01031 THROW(TypeCastException, "unable to cast from %s to a signed value (value too large)", getTypeName());
01032
01033 case TypeString:
01034 try {
01035 return std::stoll(*this->get<sella::variant::String>().getString());
01036 } catch (std::invalid_argument &e) {
01037 THROW(TypeCastException, "unable to cast from %s to a signed value (invalid string)", getTypeName());
01038 } catch (std::out_of_range &e) {
01039 THROW(TypeCastException, "unable to cast from %s to a signed value (overflow/underflow)", getTypeName());
01040 }
01041
01042 case TypeInterval:
01043 return *(this->get<sella::variant::Interval>().getUsec());
01044
01045 case TypeTime:
01046 return *(this->get<sella::variant::Time>().getUsec());
01047
01048 case TypeDate:
01049 return *(this->get<sella::variant::Date>().getUsec());
01050
01051 case TypeTimeStamp:
01052 return *(this->get<sella::variant::TimeStamp>().getUsec());
01053
01054 case TypeVector:
01055 case TypeObject:
01056 case TypeBinary:
01057 default:
01058 THROW(TypeCastException, "unable to cast from %s to int64_t", getTypeName());
01059 }
01060 }
01061
01062 return 0;
01063 }
01064
01065 template <> inline int32_t Variant::cast<int32_t>() const throw (TypeCastException) {
01066 return (int32_t) this->cast<int64_t>();
01067 }
01068
01069 template <> inline int16_t Variant::cast<int16_t>() const throw (TypeCastException) {
01070 return (int16_t) this->cast<int64_t>();
01071 }
01072
01073 template <> inline int8_t Variant::cast<int8_t>() const throw (TypeCastException) {
01074 return (int8_t) this->cast<int64_t>();
01075 }
01076
01077 template <> inline double Variant::cast<double>() const throw (TypeCastException) {
01078 if (!this->value->isNull()) {
01079 switch (this->getType()) {
01080 case TypeBoolean:
01081 return *(this->get<sella::variant::Boolean>().getBoolean()) ? 1.0F : 0.0F;
01082
01083 case TypeSigned:
01084 return static_cast<double>(*(this->get<sella::variant::Signed>().getSigned()));
01085
01086 case TypeUnsigned:
01087 return static_cast<double>(*(this->get<sella::variant::Unsigned>().getUnsigned()));
01088
01089 case TypeDouble:
01090 return *(this->get<sella::variant::Double>().getDouble());
01091
01092 case TypeString:
01093 try {
01094 return std::stod(*this->get<sella::variant::String>().getString());
01095 } catch (std::invalid_argument &e) {
01096 THROW(TypeCastException, "unable to cast from %s to a decimal value (invalid string)", getTypeName());
01097 } catch (std::out_of_range &e) {
01098 THROW(TypeCastException, "unable to cast from %s to a decimal value (overflow/underflow)", getTypeName());
01099 }
01100
01101 case TypeInterval:
01102 return static_cast<double>(*(this->get<sella::variant::Interval>().getUsec()));
01103
01104 case TypeTime:
01105 return static_cast<double>(*(this->get<sella::variant::Time>().getUsec()));
01106
01107 case TypeDate:
01108 return static_cast<double>(*(this->get<sella::variant::Date>().getUsec()));
01109
01110 case TypeTimeStamp:
01111 return static_cast<double>(*(this->get<sella::variant::TimeStamp>().getUsec()));
01112
01113 case TypeVector:
01114 case TypeObject:
01115 case TypeBinary:
01116 default:
01117 THROW(TypeCastException, "unable to cast from %s to double", getTypeName());
01118 }
01119 }
01120
01121 return 0;
01122 }
01123
01124 template <> inline float Variant::cast<float>() const throw (TypeCastException) {
01125 return (float) this->cast<double>();
01126 }
01127
01128 #ifdef __LP64__
01129 template <> inline unsigned long long Variant::cast<unsigned long long>() const throw (TypeCastException) {
01130 return (unsigned long long) this->cast<uint64_t>();
01131 }
01132
01133 template <> inline long long Variant::cast<long long>() const throw (TypeCastException) {
01134 return (long long) this->cast<int64_t>();
01135 }
01136 #else
01137 template <> inline unsigned long Variant::cast<unsigned long>() const throw (TypeCastException) {
01138 return (unsigned long) this->cast<uint64_t>();
01139 }
01140
01141 template <> inline long Variant::cast<long>() const throw (TypeCastException) {
01142 return (long) this->cast<int64_t>();
01143 }
01144 #endif
01145 }
01146 }
01147
01148 class sella::variant::Variant_iterator : public boost::iterator_facade<Variant_iterator, Variant, boost::forward_traversal_tag> {
01149 public:
01150 Variant_iterator() : it() { }
01151 Variant_iterator(const Variant_iterator &other) : it(other.it) { }
01152 Variant_iterator(const Variant_iterator &&other) : it(other.it) { }
01153 Variant_iterator(iterator_t it) : it(it) { }
01154
01155 const std::string& key() const {
01156 static const std::string empty;
01157 if (it.type == Variant::IterObject) {
01158 return it.oit->first;
01159 }
01160 return empty;
01161 }
01162
01163 Variant& value() const {
01164 return dereference();
01165 }
01166
01167 private:
01168 friend class boost::iterator_core_access;
01169
01170 void increment() {
01171 if (it.type == Variant::IterObject) {
01172 ++it.oit;
01173 } else if (it.type == Variant::IterVector) {
01174 ++it.vit;
01175 } else {
01176 it.v = NULL;
01177 }
01178 }
01179
01180 bool equal(Variant_iterator const &other) const {
01181 if (it.type != other.it.type) {
01182 return false;
01183 } else if (it.type == Variant::IterObject) {
01184 return it.oit == other.it.oit;
01185 } else if (it.type == Variant::IterVector) {
01186 return it.vit == other.it.vit;
01187 }
01188
01189 return it.v == other.it.v;
01190 }
01191
01192 Variant& dereference() const {
01193 if (it.type == Variant::IterObject) {
01194 return it.oit->second;
01195 } else if (it.type == Variant::IterVector) {
01196 return *it.vit;
01197 }
01198
01199 return *it.v;
01200 }
01201
01202 iterator_t it;
01203 };
01204
01205 #endif
01206
01207
01208
01209