static void qDBusObjectPathKeyMapToIterator(DBusMessageIter* it, const QDBusData& var) { DBusMessageIter sub; QCString sig; QDBusDataMap<QDBusObjectPath> map = var.toObjectPathKeyMap(); sig += DBUS_DICT_ENTRY_BEGIN_CHAR; sig += qDBusTypeForQDBusType(map.keyType()); if (map.hasContainerValueType()) sig += map.containerValueType().buildDBusSignature(); else sig += qDBusTypeForQDBusType(map.valueType()); sig += DBUS_DICT_ENTRY_END_CHAR; dbus_message_iter_open_container(it, DBUS_TYPE_ARRAY, sig.data(), &sub); QDBusDataMap<QDBusObjectPath>::ConstIterator mit = map.begin(); for (; mit != map.end(); ++mit) { DBusMessageIter itemIterator; dbus_message_iter_open_container(&sub, DBUS_TYPE_DICT_ENTRY, 0, &itemIterator); qAppendToMessage(&itemIterator, mit.key()); qDBusDataToIterator(&itemIterator, mit.data()); dbus_message_iter_close_container(&sub, &itemIterator); } dbus_message_iter_close_container(it, &sub); }
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; }