| 120 | } |
| 121 | |
| 122 | static void |
| 123 | writeValue(trace::Writer &writer, const QVariant &var, unsigned &id) |
| 124 | { |
| 125 | int arrayType = QMetaType::type("ApiArray"); |
| 126 | int bitmaskType = QMetaType::type("ApiBitmask"); |
| 127 | int structType = QMetaType::type("ApiStruct"); |
| 128 | int pointerType = QMetaType::type("ApiPointer"); |
| 129 | int enumType = QMetaType::type("ApiEnum"); |
| 130 | int type = var.userType(); |
| 131 | |
| 132 | switch(type) { |
| 133 | case QVariant::Bool: |
| 134 | writer.writeBool(var.toBool()); |
| 135 | break; |
| 136 | case QVariant::ByteArray: { |
| 137 | QByteArray ba = var.toByteArray(); |
| 138 | writer.writeBlob((const void*)ba.constData(), ba.size()); |
| 139 | } |
| 140 | break; |
| 141 | case QVariant::Double: |
| 142 | writer.writeDouble(var.toDouble()); |
| 143 | break; |
| 144 | case QMetaType::Float: |
| 145 | writer.writeFloat(var.toFloat()); |
| 146 | break; |
| 147 | case QVariant::Int: |
| 148 | writer.writeSInt(var.toInt()); |
| 149 | break; |
| 150 | case QVariant::LongLong: |
| 151 | writer.writeSInt(var.toLongLong()); |
| 152 | break; |
| 153 | case QVariant::String: { |
| 154 | QString str = var.toString(); |
| 155 | writer.writeString(str.toLocal8Bit().constData(), str.length()); |
| 156 | } |
| 157 | break; |
| 158 | case QVariant::UInt: |
| 159 | writer.writeUInt(var.toInt()); |
| 160 | break; |
| 161 | case QVariant::ULongLong: |
| 162 | writer.writeUInt(var.toLongLong()); |
| 163 | break; |
| 164 | default: |
| 165 | if (type == arrayType) { |
| 166 | ApiArray array = var.value<ApiArray>(); |
| 167 | QVector<QVariant> vals = array.values(); |
| 168 | writer.beginArray(vals.count()); |
| 169 | foreach(QVariant el, vals) { |
| 170 | writer.beginElement(); |
| 171 | writeValue(writer, el, ++id); |
| 172 | writer.endElement(); |
| 173 | } |
| 174 | writer.endArray(); |
| 175 | } else if (type == bitmaskType) { |
| 176 | ApiBitmask bm = var.value<ApiBitmask>(); |
| 177 | trace::BitmaskSig *sig = createBitmaskSig(bm, ++id); |
| 178 | writer.writeBitmask(sig, bm.value()); |
| 179 | deleteBitmaskSig(sig); |
no test coverage detected