lib
variant.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "variant.h"
00021 #include "list.h"
00022
00023 #include <klocale.h>
00024 #include <kdebug.h>
00025
00026 using namespace Kross::Api;
00027
00028 Variant::Variant(const QVariant& value, const QString& name)
00029 : Value<Variant, QVariant>(value, name)
00030 {
00031 }
00032
00033 Variant::~Variant()
00034 {
00035 }
00036
00037 const QString Variant::getClassName() const
00038 {
00039 return "Kross::Api::Variant";
00040 }
00041
00042 const QString Variant::toString()
00043 {
00044 return getValue().toString();
00045 }
00046
00047 const QString Variant::getVariantType(Object::Ptr object)
00048 {
00049 switch( toVariant(object).type() ) {
00050
00051 case QVariant::CString:
00052 case QVariant::String:
00053 return "Kross::Api::Variant::String";
00054
00055 case QVariant::Map:
00056 return "Kross::Api::Variant::Dict";
00057
00058 case QVariant::StringList:
00059 case QVariant::List:
00060 return "Kross::Api::Variant::List";
00061
00062 case QVariant::Double:
00063
00064 case QVariant::UInt:
00065
00066 case QVariant::LongLong:
00067 case QVariant::ULongLong:
00068 case QVariant::Int:
00069 return "Kross::Api::Variant::Integer";
00070
00071 case QVariant::Bool:
00072 return "Kross::Api::Variant::Bool";
00073
00074 default:
00075 return "Kross::Api::Variant";
00076 }
00077 }
00078
00079 const QVariant& Variant::toVariant(Object::Ptr object)
00080 {
00081 return Object::fromObject<Variant>( object.data() )->getValue();
00082 }
00083
00084 const QString Variant::toString(Object::Ptr object)
00085 {
00086 const QVariant& variant = toVariant(object);
00087 if(! variant.canCast(QVariant::String))
00088 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::String expected, but got %1.")).arg(variant.typeName()).latin1()) );
00089 return variant.toString();
00090 }
00091
00092 int Variant::toInt(Object::Ptr object)
00093 {
00094 const QVariant& variant = toVariant(object);
00095 if(! variant.canCast(QVariant::Int))
00096 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::Int expected, but got %1.")).arg(variant.typeName()).latin1()) );
00097 return variant.toInt();
00098 }
00099
00100 uint Variant::toUInt(Object::Ptr object)
00101 {
00102 const QVariant& variant = toVariant(object);
00103 if(! variant.canCast(QVariant::UInt))
00104 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::UInt expected, but got %1.")).arg(variant.typeName()).latin1()) );
00105 return variant.toUInt();
00106 }
00107
00108 double Variant::toDouble(Object::Ptr object)
00109 {
00110 const QVariant& variant = toVariant(object);
00111 if(! variant.canCast(QVariant::Double))
00112 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::Double expected, but got %1.")).arg(variant.typeName()).latin1()) );
00113 return variant.toDouble();
00114 }
00115
00116 Q_LLONG Variant::toLLONG(Object::Ptr object)
00117 {
00118 const QVariant& variant = toVariant(object);
00119 if(! variant.canCast(QVariant::LongLong))
00120 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::LLONG expected, but got %1.")).arg(variant.typeName()).latin1()) );
00121 return variant.toLongLong();
00122 }
00123
00124 Q_ULLONG Variant::toULLONG(Object::Ptr object)
00125 {
00126 const QVariant& variant = toVariant(object);
00127 if(! variant.canCast(QVariant::ULongLong))
00128 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::ULLONG expected, but got %1.")).arg(variant.typeName()).latin1()) );
00129 return variant.toULongLong();
00130 }
00131
00132 bool Variant::toBool(Object::Ptr object)
00133 {
00134 const QVariant& variant = toVariant(object);
00135 if(! variant.canCast(QVariant::Bool))
00136 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::Bool expected, but got %1.")).arg(variant.typeName()).latin1()) );
00137 return variant.toBool();
00138 }
00139
00140 QValueList<QVariant> Variant::toList(Object::Ptr object)
00141 {
00142 if(object->getClassName() == "Kross::Api::List") {
00143 QValueList<QVariant> l;
00144 QValueList<Object::Ptr> list = Object::fromObject<List>( object.data() )->getValue();
00145 for(QValueList<Object::Ptr>::Iterator it = list.begin(); it != list.end(); ++it)
00146 l.append( toVariant(*it) );
00147 return l;
00148 }
00149 const QVariant& variant = toVariant(object);
00150 if(! variant.canCast(QVariant::List))
00151 throw Exception::Ptr( new Exception(QString(i18n("Kross::Api::Variant::List expected, but got '%1'.")).arg(variant.typeName()).latin1()) );
00152 return variant.toList();
00153 }
|