Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef UTIL_VAR_H
- #define UTIL_VAR_H
- #include "stdinc.h"
- class Var : public QVariant
- {
- public:
- Var();
- Var(QString s);
- Var(const char* s);
- Var(QVariant s);
- Var(QString key1,QVariant var1);
- Var(QString key1,QVariant var1,QString key2,QVariant var2);
- Var(QString key1,QVariant var1,QString key2,QVariant var2,QString key3,QVariant var3);
- Var(QString key1,QVariant var1,QString key2,QVariant var2,QString key3,QVariant var3,QString key4,QVariant var4);
- void clear();
- void setProperty(QString name, Var value);
- void setProperty(int index, Var value);
- void append(Var value);
- static QString outputString(Var value);
- static QString sanitizeString( QString str );
- bool empty();
- Var operator [] (QString index);
- };
- #endif // UTIL_VAR_H
- #include "util_var.h"
- Var::Var()
- {
- *this="";
- }
- Var::Var(QString s) :QVariant(s){
- }
- Var::Var(const char* s) :QVariant(s){
- }
- Var::Var(QVariant s) :QVariant(s){
- }
- // быстрые конструкторы для создания хеш-массивов
- Var::Var(QString key1,QVariant var1):QVariant(QVariantMap())
- {
- convert(QVariant::Map);
- setProperty(key1, var1);
- }
- Var::Var(QString key1,QVariant var1,QString key2,QVariant var2):QVariant(QVariantMap())
- {
- convert(QVariant::Map);
- setProperty(key1, var1);
- setProperty(key2, var2);
- }
- Var::Var(QString key1,QVariant var1,QString key2,QVariant var2,QString key3,QVariant var3):QVariant(QVariantMap())
- {
- convert(QVariant::Map);
- setProperty(key1, var1);
- setProperty(key2, var2);
- setProperty(key3, var3);
- }
- Var::Var(QString key1,QVariant var1,QString key2,QVariant var2,QString key3,QVariant var3,QString key4,QVariant var4):QVariant(QVariantMap())
- {
- convert(QVariant::Map);
- setProperty(key1, var1);
- setProperty(key2, var2);
- setProperty(key3, var3);
- setProperty(key4, var4);
- }
- // создаем еще один элемент в хеше (ну или ассоциативном массиве. хеш короче звучит)
- void Var::setProperty(QString name, Var value)
- {
- convert(QVariant::Map);
- QVariantMap vm=this->toMap();
- vm[name] =value;
- this->setValue(vm);
- }
- void Var::clear()
- {
- this->setValue(QString(""));
- }
- // аналогично, но превращаем нашу переменную в обычный массив!
- void Var::setProperty(int index, Var value)
- {
- QVariantList l;
- if (this->type()==QVariant::List){
- l=this->toList();
- }
- l.insert(index,value);
- this->setValue(l);
- }
- void Var::append(Var value)
- {
- QVariantList l;
- if (this->type()==QVariant::List){
- l=this->toList();
- }
- l.append(value);
- this->setValue(l);
- }
- // для формирования JSON нужно почистить
- QString Var::sanitizeString( QString str )
- {
- str.replace( QLatin1String( "\\" ), QLatin1String( "\\\\" ) );
- str.replace( QLatin1String( "\"" ), QLatin1String( "\\\"" ) );
- str.replace( QLatin1String( "\b" ), QLatin1String( "\\b" ) );
- str.replace( QLatin1String( "\f" ), QLatin1String( "\\f" ) );
- str.replace( QLatin1String( "\n" ), QLatin1String( "\\n" ) );
- str.replace( QLatin1String( "\r" ), QLatin1String( "\\r" ) );
- str.replace( QLatin1String( "\t" ), QLatin1String( "\\t" ) );
- return QString( QLatin1String( "\"%1\"" ) ).arg( str );
- }
- // вывод в JSON
- QString Var::outputString(Var value)
- {
- if (value.type()==QVariant::Map){
- QString rt="{";
- QMapIterator<QString, QVariant> i(value.toMap());
- bool first=true;
- while (i.hasNext()) {
- i.next();
- if (!first) rt+=",";
- Var value1= i.value();
- rt+= sanitizeString(i.key())+": " +outputString(value1);
- first=false;
- }
- rt+="}";
- return rt;
- }else if(value.type()==QVariant::List){
- QString rt="[";
- for (int i=0;i<value.toList().size();i++) {
- if (i!=0) rt+=",";
- rt+= outputString(value.toList()[i]);
- }
- rt+="]";
- return rt;
- }else{
- return sanitizeString(value.toString()).toUtf8();
- }
- }
- bool Var::empty()
- {
- switch (this->type()){
- case QVariant::Map: return this->toMap().empty();
- case QVariant::List: return this->toList().empty();
- default:
- return !this->toBool();
- }
- }
- // для быстрого доступа
- Var Var::operator [] (QString index)
- {
- if (this->type()==QVariant::Map){
- return this->toMap()[index];
- }
- return "";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement