From 9a134f5699708c76d4abd12da71c9df03830556a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Mon, 18 Nov 2013 21:21:15 +0100 Subject: Add support for data type UnixFD --- tqdbusdata.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'tqdbusdata.cpp') diff --git a/tqdbusdata.cpp b/tqdbusdata.cpp index 26ca154..5a6cfa9 100644 --- a/tqdbusdata.cpp +++ b/tqdbusdata.cpp @@ -27,6 +27,7 @@ #include "tqdbusdatalist.h" #include "tqdbusdatamap.h" #include "tqdbusobjectpath.h" +#include "tqdbusunixfd.h" #include "tqdbusvariant.h" #include @@ -50,6 +51,10 @@ public: delete (TQT_DBusObjectPath*)value.pointer; break; + case TQT_DBusData::UnixFd: + delete (TQT_DBusUnixFd*)value.pointer; + break; + case TQT_DBusData::List: delete (TQT_DBusDataList*)value.pointer; break; @@ -101,6 +106,10 @@ public: delete (TQT_DBusDataMap*)value.pointer; break; + case TQT_DBusData::UnixFd: + delete (TQT_DBusDataMap*)value.pointer; + break; + default: tqFatal("TQT_DBusData::Private: unhandled map key type %d(%s)", keyType, TQT_DBusData::typeName(keyType)); @@ -208,6 +217,9 @@ bool TQT_DBusData::operator==(const TQT_DBusData& other) const case TQT_DBusData::ObjectPath: return toObjectPath() == other.toObjectPath(); + case TQT_DBusData::UnixFd: + return toUnixFd() == other.toUnixFd(); + case TQT_DBusData::List: return toList() == other.toList(); @@ -257,6 +269,10 @@ bool TQT_DBusData::operator==(const TQT_DBusData& other) const toObjectPathKeyMap() == other.toObjectPathKeyMap(); break; + case TQT_DBusData::UnixFd: + toUnixFdKeyMap() == other.toUnixFdKeyMap(); + break; + default: tqFatal("TQT_DBusData operator== unhandled map key type %d(%s)", d->keyType, TQT_DBusData::typeName(d->keyType)); @@ -303,6 +319,7 @@ const char* TQT_DBusData::typeName(Type type) case TQT_DBusData::Double: return "Double"; case TQT_DBusData::String: return "String"; case TQT_DBusData::ObjectPath: return "ObjectPath"; + case TQT_DBusData::UnixFd: return "UnixFd"; case TQT_DBusData::List: return "List"; case TQT_DBusData::Struct: return "Struct"; case TQT_DBusData::Variant: return "Variant"; @@ -568,6 +585,32 @@ TQT_DBusObjectPath TQT_DBusData::toObjectPath(bool* ok) const return *((TQT_DBusObjectPath*)d->value.pointer); } +TQT_DBusData TQT_DBusData::fromUnixFd(const TQT_DBusUnixFd& value) +{ + TQT_DBusData data; + + if (value.isValid()) + { + data.d->type = TQT_DBusData::UnixFd; + data.d->value.pointer = new TQT_DBusUnixFd(value); + } + + return data; +} + +TQT_DBusUnixFd TQT_DBusData::toUnixFd(bool* ok) const +{ + if (d->type != TQT_DBusData::UnixFd) + { + if (ok != 0) *ok = false; + return TQT_DBusUnixFd(); + } + + if (ok != 0) *ok = true; + + return *((TQT_DBusUnixFd*)d->value.pointer); +} + TQT_DBusData TQT_DBusData::fromList(const TQT_DBusDataList& list) { TQT_DBusData data; @@ -885,6 +928,31 @@ TQT_DBusDataMap TQT_DBusData::toObjectPathKeyMap(bool* ok) c return *((TQT_DBusDataMap*)d->value.pointer); } +TQT_DBusData TQT_DBusData::fromUnixFdKeyMap(const TQT_DBusDataMap& map) +{ + TQT_DBusData data; + + data.d->type = TQT_DBusData::Map; + data.d->keyType = map.keyType(); + data.d->value.pointer = new TQT_DBusDataMap(map); + + return data; +} + +TQT_DBusDataMap TQT_DBusData::toUnixFdKeyMap(bool* ok) const +{ + if (d->type != TQT_DBusData::Map && + d->keyType != TQT_DBusDataMap::m_keyType) + { + if (ok != 0) *ok = false; + return TQT_DBusDataMap(); + } + + if (ok != 0) *ok = true; + + return *((TQT_DBusDataMap*)d->value.pointer); +} + static const char* qDBusTypeForTQT_DBusType(TQT_DBusData::Type type) { switch (type) @@ -913,6 +981,8 @@ static const char* qDBusTypeForTQT_DBusType(TQT_DBusData::Type type) return DBUS_TYPE_STRING_AS_STRING; case TQT_DBusData::ObjectPath: return DBUS_TYPE_OBJECT_PATH_AS_STRING; + case TQT_DBusData::UnixFd: + return DBUS_TYPE_UNIX_FD_AS_STRING; case TQT_DBusData::Variant: return DBUS_TYPE_VARIANT_AS_STRING; default: @@ -1008,6 +1078,10 @@ TQCString TQT_DBusData::buildDBusSignature() const signature += qDBusSignatureForMapValue( *((TQT_DBusDataMap*) d->value.pointer)); break; + case TQT_DBusData::UnixFd: + signature += qDBusSignatureForMapValue( + *((TQT_DBusDataMap*) d->value.pointer)); + break; default: break; } @@ -1052,3 +1126,6 @@ const TQT_DBusData::Type TQT_DBusDataMap::m_keyType = TQT_DBusData::St template <> const TQT_DBusData::Type TQT_DBusDataMap::m_keyType = TQT_DBusData::ObjectPath; + +template <> +const TQT_DBusData::Type TQT_DBusDataMap::m_keyType = TQT_DBusData::UnixFd; -- cgit v1.2.1