You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1122 lines
29 KiB
1122 lines
29 KiB
/* qdbusdata.cpp DBUS data transport type
|
|
*
|
|
* Copyright (C) 2007 Kevin Krammer <kevin.krammer@gmx.at>
|
|
*
|
|
* Licensed under the Academic Free License version 2.1
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
|
* USA.
|
|
*
|
|
*/
|
|
|
|
#include "dbus/dbus.h"
|
|
|
|
#include "tqdbusdata.h"
|
|
#include "tqdbusdatalist.h"
|
|
#include "tqdbusdatamap.h"
|
|
#include "tqdbusobjectpath.h"
|
|
#include "tqdbusunixfd.h"
|
|
#include "tqdbusvariant.h"
|
|
|
|
#include <tqshared.h>
|
|
#include <tqstring.h>
|
|
#include <tqvaluelist.h>
|
|
|
|
class TQT_DBusData::Private : public TQShared
|
|
{
|
|
public:
|
|
Private() : TQShared(), type(TQT_DBusData::Invalid), keyType(TQT_DBusData::Invalid) {}
|
|
|
|
~Private()
|
|
{
|
|
switch (type)
|
|
{
|
|
case TQT_DBusData::String:
|
|
delete (TQString*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::ObjectPath:
|
|
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;
|
|
|
|
case TQT_DBusData::Struct:
|
|
delete (TQValueList<TQT_DBusData>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::Variant:
|
|
delete (TQT_DBusVariant*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::Map:
|
|
switch (keyType)
|
|
{
|
|
case TQT_DBusData::Byte:
|
|
delete (TQT_DBusDataMap<TQ_UINT8>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::Int16:
|
|
delete (TQT_DBusDataMap<TQ_INT16>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::UInt16:
|
|
delete (TQT_DBusDataMap<TQ_UINT16>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::Int32:
|
|
delete (TQT_DBusDataMap<TQ_INT32>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::UInt32:
|
|
delete (TQT_DBusDataMap<TQ_UINT32>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::Int64:
|
|
delete (TQT_DBusDataMap<TQ_INT64>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::UInt64:
|
|
delete (TQT_DBusDataMap<TQ_UINT64>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::String:
|
|
delete (TQT_DBusDataMap<TQString>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::ObjectPath:
|
|
delete (TQT_DBusDataMap<TQT_DBusObjectPath>*)value.pointer;
|
|
break;
|
|
|
|
case TQT_DBusData::UnixFd:
|
|
delete (TQT_DBusDataMap<TQT_DBusUnixFd>*)value.pointer;
|
|
break;
|
|
|
|
default:
|
|
tqFatal("TQT_DBusData::Private: unhandled map key type %d(%s)",
|
|
keyType, TQT_DBusData::typeName(keyType));
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public:
|
|
Type type;
|
|
Type keyType;
|
|
|
|
union
|
|
{
|
|
bool boolValue;
|
|
TQ_UINT8 byteValue;
|
|
TQ_INT16 int16Value;
|
|
TQ_UINT16 uint16Value;
|
|
TQ_INT32 int32Value;
|
|
TQ_UINT32 uint32Value;
|
|
TQ_INT64 int64Value;
|
|
TQ_UINT64 uint64Value;
|
|
double doubleValue;
|
|
void* pointer;
|
|
} value;
|
|
};
|
|
|
|
// key type definitions for TQT_DBusDataMap
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT8>::m_keyType = TQT_DBusData::Byte;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_INT16>::m_keyType = TQT_DBusData::Int16;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT16>::m_keyType = TQT_DBusData::UInt16;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_INT32>::m_keyType = TQT_DBusData::Int32;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT32>::m_keyType = TQT_DBusData::UInt32;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_INT64>::m_keyType = TQT_DBusData::Int64;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT64>::m_keyType = TQT_DBusData::UInt64;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQString>::m_keyType = TQT_DBusData::String;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQT_DBusObjectPath>::m_keyType = TQT_DBusData::ObjectPath;
|
|
|
|
template <>
|
|
const TQT_DBusData::Type TQT_DBusDataMap<TQT_DBusUnixFd>::m_keyType = TQT_DBusData::UnixFd;
|
|
|
|
|
|
TQT_DBusData::TQT_DBusData() : d(new Private())
|
|
{
|
|
}
|
|
|
|
TQT_DBusData::TQT_DBusData(const TQT_DBusData& other) : d(0)
|
|
{
|
|
d = other.d;
|
|
|
|
d->ref();
|
|
}
|
|
|
|
TQT_DBusData::~TQT_DBusData()
|
|
{
|
|
if (d->deref()) delete d;
|
|
}
|
|
|
|
TQT_DBusData& TQT_DBusData::operator=(const TQT_DBusData& other)
|
|
{
|
|
if (&other == this) return *this;
|
|
|
|
if (d->deref()) delete d;
|
|
|
|
d = other.d;
|
|
|
|
d->ref();
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool TQT_DBusData::operator==(const TQT_DBusData& other) const
|
|
{
|
|
if (&other == this) return true;
|
|
|
|
if (d == other.d) return true;
|
|
|
|
if (d->type == other.d->type)
|
|
{
|
|
switch (d->type)
|
|
{
|
|
case TQT_DBusData::Invalid:
|
|
return true;
|
|
|
|
case TQT_DBusData::Bool:
|
|
return d->value.boolValue == other.d->value.boolValue;
|
|
|
|
case TQT_DBusData::Byte:
|
|
return d->value.byteValue == other.d->value.byteValue;
|
|
|
|
case TQT_DBusData::Int16:
|
|
return d->value.int16Value == other.d->value.int16Value;
|
|
|
|
case TQT_DBusData::UInt16:
|
|
return d->value.uint16Value == other.d->value.uint16Value;
|
|
|
|
case TQT_DBusData::Int32:
|
|
return d->value.int32Value == other.d->value.int32Value;
|
|
|
|
case TQT_DBusData::UInt32:
|
|
return d->value.uint32Value == other.d->value.uint64Value;
|
|
|
|
case TQT_DBusData::Int64:
|
|
return d->value.int64Value == other.d->value.int64Value;
|
|
|
|
case TQT_DBusData::UInt64:
|
|
return d->value.uint64Value == other.d->value.uint64Value;
|
|
|
|
case TQT_DBusData::Double:
|
|
// FIXME: should not compare doubles for equality like this
|
|
return d->value.doubleValue == other.d->value.doubleValue;
|
|
|
|
case TQT_DBusData::String:
|
|
return toString() == other.toString();
|
|
|
|
case TQT_DBusData::ObjectPath:
|
|
return toObjectPath() == other.toObjectPath();
|
|
|
|
case TQT_DBusData::UnixFd:
|
|
return toUnixFd() == other.toUnixFd();
|
|
|
|
case TQT_DBusData::List:
|
|
return toList() == other.toList();
|
|
|
|
case TQT_DBusData::Struct:
|
|
return toStruct() == other.toStruct();
|
|
|
|
case TQT_DBusData::Variant:
|
|
return toVariant() == other.toVariant();
|
|
|
|
case TQT_DBusData::Map:
|
|
if (d->keyType != other.d->keyType) return false;
|
|
|
|
switch (d->keyType)
|
|
{
|
|
case TQT_DBusData::Byte:
|
|
return toByteKeyMap() == other.toByteKeyMap();
|
|
|
|
case TQT_DBusData::Int16:
|
|
return toInt16KeyMap() == other.toInt16KeyMap();
|
|
|
|
case TQT_DBusData::UInt16:
|
|
return toUInt16KeyMap() == other.toUInt16KeyMap();
|
|
|
|
case TQT_DBusData::Int32:
|
|
return toInt32KeyMap() == other.toInt32KeyMap();
|
|
|
|
case TQT_DBusData::UInt32:
|
|
return toUInt32KeyMap() == other.toUInt32KeyMap();
|
|
|
|
case TQT_DBusData::Int64:
|
|
return toInt64KeyMap() == other.toInt64KeyMap();
|
|
|
|
case TQT_DBusData::UInt64:
|
|
return toUInt64KeyMap() == other.toUInt64KeyMap();
|
|
|
|
case TQT_DBusData::String:
|
|
return toStringKeyMap() == other.toStringKeyMap();
|
|
|
|
case TQT_DBusData::ObjectPath:
|
|
return toObjectPathKeyMap() == other.toObjectPathKeyMap();
|
|
|
|
case TQT_DBusData::UnixFd:
|
|
return toUnixFdKeyMap() == other.toUnixFdKeyMap();
|
|
|
|
default:
|
|
tqFatal("TQT_DBusData operator== unhandled map key type %d(%s)",
|
|
d->keyType, TQT_DBusData::typeName(d->keyType));
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
bool TQT_DBusData::operator!=(const TQT_DBusData& other) const
|
|
{
|
|
return !operator==(other);
|
|
}
|
|
|
|
TQT_DBusData::Type TQT_DBusData::type() const
|
|
{
|
|
return d->type;
|
|
}
|
|
|
|
TQT_DBusData::Type TQT_DBusData::keyType() const
|
|
{
|
|
if (d->type != TQT_DBusData::Map) return TQT_DBusData::Invalid;
|
|
|
|
return d->keyType;
|
|
}
|
|
|
|
const char* TQT_DBusData::typeName(Type type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case TQT_DBusData::Invalid: return "Invalid";
|
|
case TQT_DBusData::Bool: return "Bool";
|
|
case TQT_DBusData::Byte: return "Byte";
|
|
case TQT_DBusData::Int16: return "Int16";
|
|
case TQT_DBusData::UInt16: return "UInt16";
|
|
case TQT_DBusData::Int32: return "Int32";
|
|
case TQT_DBusData::UInt32: return "UInt32";
|
|
case TQT_DBusData::Int64: return "Int64";
|
|
case TQT_DBusData::UInt64: return "UInt64";
|
|
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";
|
|
case TQT_DBusData::Map: return "Map";
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromBool(bool value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Bool;
|
|
data.d->value.boolValue = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
bool TQT_DBusData::toBool(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Bool)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return false;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.boolValue;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromByte(TQ_UINT8 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Byte;
|
|
data.d->value.byteValue = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_UINT8 TQT_DBusData::toByte(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Byte)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.byteValue;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromInt16(TQ_INT16 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Int16;
|
|
data.d->value.int16Value = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_INT16 TQT_DBusData::toInt16(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Int16)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.int16Value;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUInt16(TQ_UINT16 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::UInt16;
|
|
data.d->value.uint16Value = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_UINT16 TQT_DBusData::toUInt16(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::UInt16)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.uint16Value;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromInt32(TQ_INT32 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Int32;
|
|
data.d->value.int32Value = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_INT32 TQT_DBusData::toInt32(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Int32)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.int32Value;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUInt32(TQ_UINT32 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::UInt32;
|
|
data.d->value.uint32Value = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_UINT32 TQT_DBusData::toUInt32(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::UInt32)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.uint32Value;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromInt64(TQ_INT64 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Int64;
|
|
data.d->value.int64Value = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_INT64 TQT_DBusData::toInt64(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Int64)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.int64Value;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUInt64(TQ_UINT64 value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::UInt64;
|
|
data.d->value.uint64Value = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
TQ_UINT64 TQT_DBusData::toUInt64(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::UInt64)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.uint64Value;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromDouble(double value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Double;
|
|
data.d->value.doubleValue = value;
|
|
|
|
return data;
|
|
}
|
|
|
|
double TQT_DBusData::toDouble(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Double)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return 0.0;
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return d->value.doubleValue;
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromString(const TQString& value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::String;
|
|
data.d->value.pointer = new TQString(value);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQString TQT_DBusData::toString(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::String)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQString();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQString*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromObjectPath(const TQT_DBusObjectPath& value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
if (value.isValid())
|
|
{
|
|
data.d->type = TQT_DBusData::ObjectPath;
|
|
data.d->value.pointer = new TQT_DBusObjectPath(value);
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusObjectPath TQT_DBusData::toObjectPath(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::ObjectPath)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusObjectPath();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
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;
|
|
|
|
if (list.type() == TQT_DBusData::Invalid) return data;
|
|
|
|
data.d->type = TQT_DBusData::List;
|
|
data.d->value.pointer = new TQT_DBusDataList(list);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataList TQT_DBusData::toList(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::List)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataList();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataList*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromTQValueList(const TQValueList<TQT_DBusData>& list)
|
|
{
|
|
return fromList(TQT_DBusDataList(list));
|
|
}
|
|
|
|
TQValueList<TQT_DBusData> TQT_DBusData::toTQValueList(bool* ok) const
|
|
{
|
|
bool internalOk = false;
|
|
TQT_DBusDataList list = toList(&internalOk);
|
|
|
|
if (!internalOk)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQValueList<TQT_DBusData>();
|
|
}
|
|
|
|
return list.toTQValueList();
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromStruct(const TQValueList<TQT_DBusData>& memberList)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
TQValueList<TQT_DBusData>::const_iterator it = memberList.begin();
|
|
TQValueList<TQT_DBusData>::const_iterator endIt = memberList.end();
|
|
for (; it != endIt; ++it)
|
|
{
|
|
if ((*it).d->type == Invalid) return data;
|
|
}
|
|
|
|
data.d->type = TQT_DBusData::Struct;
|
|
data.d->value.pointer = new TQValueList<TQT_DBusData>(memberList);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQValueList<TQT_DBusData> TQT_DBusData::toStruct(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Struct)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQValueList<TQT_DBusData>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQValueList<TQT_DBusData>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromVariant(const TQT_DBusVariant& value)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Variant;
|
|
data.d->value.pointer = new TQT_DBusVariant(value);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusVariant TQT_DBusData::toVariant(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Variant)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusVariant();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusVariant*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromByteKeyMap(const TQT_DBusDataMap<TQ_UINT8>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT8>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_UINT8> TQT_DBusData::toByteKeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_UINT8>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_UINT8>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_UINT8>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromInt16KeyMap(const TQT_DBusDataMap<TQ_INT16>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_INT16>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_INT16> TQT_DBusData::toInt16KeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_INT16>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_INT16>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_INT16>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUInt16KeyMap(const TQT_DBusDataMap<TQ_UINT16>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT16>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_UINT16> TQT_DBusData::toUInt16KeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map &&
|
|
d->keyType != TQT_DBusDataMap<TQ_UINT16>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_UINT16>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_UINT16>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromInt32KeyMap(const TQT_DBusDataMap<TQ_INT32>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_INT32>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_INT32> TQT_DBusData::toInt32KeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_INT32>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_INT32>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_INT32>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUInt32KeyMap(const TQT_DBusDataMap<TQ_UINT32>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT32>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_UINT32> TQT_DBusData::toUInt32KeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map &&
|
|
d->keyType != TQT_DBusDataMap<TQ_UINT32>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_UINT32>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_UINT32>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromInt64KeyMap(const TQT_DBusDataMap<TQ_INT64>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_INT64>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_INT64> TQT_DBusData::toInt64KeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_INT64>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_INT64>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_INT64>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUInt64KeyMap(const TQT_DBusDataMap<TQ_UINT64>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT64>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQ_UINT64> TQT_DBusData::toUInt64KeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map &&
|
|
d->keyType != TQT_DBusDataMap<TQ_UINT64>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQ_UINT64>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQ_UINT64>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromStringKeyMap(const TQT_DBusDataMap<TQString>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQString>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQString> TQT_DBusData::toStringKeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQString>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQString>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQString>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromObjectPathKeyMap(const TQT_DBusDataMap<TQT_DBusObjectPath>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQT_DBusObjectPath>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQT_DBusObjectPath> TQT_DBusData::toObjectPathKeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map &&
|
|
d->keyType != TQT_DBusDataMap<TQT_DBusObjectPath>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQT_DBusObjectPath>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQT_DBusObjectPath>*)d->value.pointer);
|
|
}
|
|
|
|
TQT_DBusData TQT_DBusData::fromUnixFdKeyMap(const TQT_DBusDataMap<TQT_DBusUnixFd>& map)
|
|
{
|
|
TQT_DBusData data;
|
|
|
|
data.d->type = TQT_DBusData::Map;
|
|
data.d->keyType = map.keyType();
|
|
data.d->value.pointer = new TQT_DBusDataMap<TQT_DBusUnixFd>(map);
|
|
|
|
return data;
|
|
}
|
|
|
|
TQT_DBusDataMap<TQT_DBusUnixFd> TQT_DBusData::toUnixFdKeyMap(bool* ok) const
|
|
{
|
|
if (d->type != TQT_DBusData::Map &&
|
|
d->keyType != TQT_DBusDataMap<TQT_DBusUnixFd>::m_keyType)
|
|
{
|
|
if (ok != 0) *ok = false;
|
|
return TQT_DBusDataMap<TQT_DBusUnixFd>();
|
|
}
|
|
|
|
if (ok != 0) *ok = true;
|
|
|
|
return *((TQT_DBusDataMap<TQT_DBusUnixFd>*)d->value.pointer);
|
|
}
|
|
|
|
static const char* qDBusTypeForTQT_DBusType(TQT_DBusData::Type type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case TQT_DBusData::Invalid:
|
|
return 0;
|
|
case TQT_DBusData::Bool:
|
|
return DBUS_TYPE_BOOLEAN_AS_STRING;
|
|
case TQT_DBusData::Byte:
|
|
return DBUS_TYPE_BYTE_AS_STRING;
|
|
case TQT_DBusData::Int16:
|
|
return DBUS_TYPE_INT16_AS_STRING;
|
|
case TQT_DBusData::UInt16:
|
|
return DBUS_TYPE_UINT16_AS_STRING;
|
|
case TQT_DBusData::Int32:
|
|
return DBUS_TYPE_INT32_AS_STRING;
|
|
case TQT_DBusData::UInt32:
|
|
return DBUS_TYPE_UINT32_AS_STRING;
|
|
case TQT_DBusData::Int64:
|
|
return DBUS_TYPE_INT64_AS_STRING;
|
|
case TQT_DBusData::UInt64:
|
|
return DBUS_TYPE_UINT64_AS_STRING;
|
|
case TQT_DBusData::Double:
|
|
return DBUS_TYPE_DOUBLE_AS_STRING;
|
|
case TQT_DBusData::String:
|
|
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:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
template <typename T>
|
|
TQCString qDBusSignatureForMapValue(const TQT_DBusDataMap<T>& map)
|
|
{
|
|
if (map.hasContainerValueType())
|
|
return map.containerValueType().buildDBusSignature();
|
|
else
|
|
return qDBusTypeForTQT_DBusType(map.valueType());
|
|
}
|
|
|
|
TQCString TQT_DBusData::buildDBusSignature() const
|
|
{
|
|
TQCString signature;
|
|
|
|
switch (d->type)
|
|
{
|
|
case TQT_DBusData::List:
|
|
{
|
|
TQT_DBusDataList* list = (TQT_DBusDataList*) d->value.pointer;
|
|
signature = DBUS_TYPE_ARRAY_AS_STRING;
|
|
if (list->hasContainerItemType())
|
|
signature += list->containerItemType().buildDBusSignature();
|
|
else
|
|
signature += qDBusTypeForTQT_DBusType(list->type());
|
|
break;
|
|
}
|
|
|
|
case TQT_DBusData::Struct:
|
|
{
|
|
signature += DBUS_STRUCT_BEGIN_CHAR;
|
|
|
|
TQValueList<TQT_DBusData>* memberList =
|
|
(TQValueList<TQT_DBusData>*) d->value.pointer;
|
|
|
|
TQValueList<TQT_DBusData>::const_iterator it = (*memberList).begin();
|
|
TQValueList<TQT_DBusData>::const_iterator endIt = (*memberList).end();
|
|
for (; it != endIt; ++it)
|
|
{
|
|
signature += (*it).buildDBusSignature();
|
|
}
|
|
signature += DBUS_STRUCT_END_CHAR;
|
|
break;
|
|
}
|
|
|
|
case TQT_DBusData::Map:
|
|
signature += DBUS_TYPE_ARRAY_AS_STRING;
|
|
signature += DBUS_DICT_ENTRY_BEGIN_CHAR;
|
|
|
|
signature += qDBusTypeForTQT_DBusType(keyType());
|
|
|
|
switch (keyType())
|
|
{
|
|
case TQT_DBusData::Byte:
|
|
signature += qDBusSignatureForMapValue<TQ_UINT8>(
|
|
*((TQT_DBusDataMap<TQ_UINT8>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::Int16:
|
|
signature += qDBusSignatureForMapValue<TQ_INT16>(
|
|
*((TQT_DBusDataMap<TQ_INT16>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::UInt16:
|
|
signature += qDBusSignatureForMapValue<TQ_UINT16>(
|
|
*((TQT_DBusDataMap<TQ_UINT16>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::Int32:
|
|
signature += qDBusSignatureForMapValue<TQ_INT32>(
|
|
*((TQT_DBusDataMap<TQ_INT32>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::UInt32:
|
|
signature += qDBusSignatureForMapValue<TQ_UINT32>(
|
|
*((TQT_DBusDataMap<TQ_UINT32>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::Int64:
|
|
signature += qDBusSignatureForMapValue<TQ_INT64>(
|
|
*((TQT_DBusDataMap<TQ_INT64>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::UInt64:
|
|
signature += qDBusSignatureForMapValue<TQ_UINT64>(
|
|
*((TQT_DBusDataMap<TQ_UINT64>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::String:
|
|
signature += qDBusSignatureForMapValue<TQString>(
|
|
*((TQT_DBusDataMap<TQString>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::ObjectPath:
|
|
signature += qDBusSignatureForMapValue<TQT_DBusObjectPath>(
|
|
*((TQT_DBusDataMap<TQT_DBusObjectPath>*) d->value.pointer));
|
|
break;
|
|
case TQT_DBusData::UnixFd:
|
|
signature += qDBusSignatureForMapValue<TQT_DBusUnixFd>(
|
|
*((TQT_DBusDataMap<TQT_DBusUnixFd>*) d->value.pointer));
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
signature += DBUS_DICT_ENTRY_END_CHAR;
|
|
break;
|
|
|
|
default:
|
|
signature = qDBusTypeForTQT_DBusType(d->type);
|
|
break;
|
|
}
|
|
|
|
return signature;
|
|
}
|