QVariant QDBusDemarshaller::toVariantInternal() { switch (q_dbus_message_iter_get_arg_type(&iterator)) { case DBUS_TYPE_BYTE: return qVariantFromValue(toByte()); case DBUS_TYPE_INT16: return qVariantFromValue(toShort()); case DBUS_TYPE_UINT16: return qVariantFromValue(toUShort()); case DBUS_TYPE_INT32: return toInt(); case DBUS_TYPE_UINT32: return toUInt(); case DBUS_TYPE_DOUBLE: return toDouble(); case DBUS_TYPE_BOOLEAN: return toBool(); case DBUS_TYPE_INT64: return toLongLong(); case DBUS_TYPE_UINT64: return toULongLong(); case DBUS_TYPE_STRING: return toString(); case DBUS_TYPE_OBJECT_PATH: return qVariantFromValue(toObjectPath()); case DBUS_TYPE_SIGNATURE: return qVariantFromValue(toSignature()); case DBUS_TYPE_VARIANT: return qVariantFromValue(toVariant()); case DBUS_TYPE_ARRAY: switch (q_dbus_message_iter_get_element_type(&iterator)) { case DBUS_TYPE_BYTE: // QByteArray return toByteArray(); case DBUS_TYPE_STRING: return toStringList(); case DBUS_TYPE_DICT_ENTRY: return qVariantFromValue(duplicate()); default: return qVariantFromValue(duplicate()); } case DBUS_TYPE_STRUCT: return qVariantFromValue(duplicate()); default: qWarning("QDBusDemarshaller: Found unknown D-Bus type %d '%c'", q_dbus_message_iter_get_arg_type(&iterator), q_dbus_message_iter_get_arg_type(&iterator)); return QVariant(); break; }; }
bool QDBusData::operator==(const QDBusData& other) const { if (&other == this) return true; if (d == other.d) return true; if (d->type == other.d->type) { switch (d->type) { case QDBusData::Invalid: return true; case QDBusData::Bool: return d->value.boolValue == other.d->value.boolValue; case QDBusData::Byte: return d->value.byteValue == other.d->value.byteValue; case QDBusData::Int16: return d->value.int16Value == other.d->value.int16Value; case QDBusData::UInt16: return d->value.uint16Value == other.d->value.uint16Value; case QDBusData::Int32: return d->value.int32Value == other.d->value.int32Value; case QDBusData::UInt32: return d->value.uint32Value == other.d->value.uint32Value; case QDBusData::Int64: return d->value.int64Value == other.d->value.int64Value; case QDBusData::UInt64: return d->value.uint64Value == other.d->value.uint64Value; case QDBusData::Double: // FIXME: should not compare doubles for equality like this return d->value.doubleValue == other.d->value.doubleValue; case QDBusData::String: return toString() == other.toString(); case QDBusData::ObjectPath: return toObjectPath() == other.toObjectPath(); case QDBusData::List: return toList() == other.toList(); case QDBusData::Struct: return toStruct() == other.toStruct(); case QDBusData::Variant: return toVariant() == other.toVariant(); case QDBusData::Map: if (d->keyType != other.d->keyType) return false; switch (d->keyType) { case QDBusData::Byte: toByteKeyMap() == other.toByteKeyMap(); break; case QDBusData::Int16: toInt16KeyMap() == other.toInt16KeyMap(); break; case QDBusData::UInt16: toUInt16KeyMap() == other.toUInt16KeyMap(); break; case QDBusData::Int32: toInt32KeyMap() == other.toInt32KeyMap(); break; case QDBusData::UInt32: toUInt32KeyMap() == other.toUInt32KeyMap(); break; case QDBusData::Int64: toInt64KeyMap() == other.toInt64KeyMap(); break; case QDBusData::UInt64: toUInt64KeyMap() == other.toUInt64KeyMap(); break; case QDBusData::String: toStringKeyMap() == other.toStringKeyMap(); break; case QDBusData::ObjectPath: toObjectPathKeyMap() == other.toObjectPathKeyMap(); break; default: qFatal("QDBusData operator== unhandled map key type %d(%s)", d->keyType, QDBusData::typeName(d->keyType)); break; } break; } } return false; }
QVariant QDBusDemarshaller::toVariantInternal() { switch (q_dbus_message_iter_get_arg_type(&iterator)) { case DBUS_TYPE_BYTE: return QVariant::fromValue(toByte()); case DBUS_TYPE_INT16: return QVariant::fromValue(toShort()); case DBUS_TYPE_UINT16: return QVariant::fromValue(toUShort()); case DBUS_TYPE_INT32: return toInt(); case DBUS_TYPE_UINT32: return toUInt(); case DBUS_TYPE_DOUBLE: return toDouble(); case DBUS_TYPE_BOOLEAN: return toBool(); case DBUS_TYPE_INT64: return toLongLong(); case DBUS_TYPE_UINT64: return toULongLong(); case DBUS_TYPE_STRING: return toString(); case DBUS_TYPE_OBJECT_PATH: return QVariant::fromValue(toObjectPath()); case DBUS_TYPE_SIGNATURE: return QVariant::fromValue(toSignature()); case DBUS_TYPE_VARIANT: return QVariant::fromValue(toVariant()); case DBUS_TYPE_ARRAY: switch (q_dbus_message_iter_get_element_type(&iterator)) { case DBUS_TYPE_BYTE: // QByteArray return toByteArray(); case DBUS_TYPE_STRING: return toStringList(); case DBUS_TYPE_DICT_ENTRY: return QVariant::fromValue(duplicate()); default: return QVariant::fromValue(duplicate()); } case DBUS_TYPE_STRUCT: return QVariant::fromValue(duplicate()); case DBUS_TYPE_UNIX_FD: if (capabilities & QDBusConnection::UnixFileDescriptorPassing) return qVariantFromValue(toUnixFileDescriptor()); // fall through default: // qWarning("QDBusDemarshaller: Found unknown D-Bus type %d '%c'", // q_dbus_message_iter_get_arg_type(&iterator), // q_dbus_message_iter_get_arg_type(&iterator)); char *ptr = 0; ptr += q_dbus_message_iter_get_arg_type(&iterator); q_dbus_message_iter_next(&iterator); // I hope you never dereference this pointer! return QVariant::fromValue<void *>(ptr); break; }; }