• Main Page
  • Related Pages
  • Classes
  • Files
  • Examples
  • File List
  • File Members

tqdbusdata.cpp

Go to the documentation of this file.
00001 /* qdbusdata.cpp DBUS data transport type
00002  *
00003  * Copyright (C) 2007 Kevin Krammer <kevin.krammer@gmx.at>
00004  *
00005  * Licensed under the Academic Free License version 2.1
00006  *
00007  * This program is free software; you can redistribute it and/or modify
00008  * it under the terms of the GNU General Public License as published by
00009  * the Free Software Foundation; either version 2 of the License, or
00010  * (at your option) any later version.
00011  *
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with this program; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
00020  * USA.
00021  *
00022  */
00023 
00024 #include "dbus/dbus.h"
00025 
00026 #include "tqdbusdata.h"
00027 #include "tqdbusdatalist.h"
00028 #include "tqdbusdatamap.h"
00029 #include "tqdbusobjectpath.h"
00030 #include "tqdbusunixfd.h"
00031 #include "tqdbusvariant.h"
00032 
00033 #include <tqshared.h>
00034 #include <tqstring.h>
00035 #include <tqvaluelist.h>
00036 
00037 class TQT_DBusData::Private : public TQShared
00038 {
00039 public:
00040     Private() : TQShared(), type(TQT_DBusData::Invalid), keyType(TQT_DBusData::Invalid) {}
00041 
00042     ~Private()
00043     {
00044         switch (type)
00045         {
00046             case TQT_DBusData::String:
00047                 delete (TQString*)value.pointer;
00048                 break;
00049 
00050             case TQT_DBusData::ObjectPath:
00051                 delete (TQT_DBusObjectPath*)value.pointer;
00052                 break;
00053 
00054             case TQT_DBusData::UnixFd:
00055                 delete (TQT_DBusUnixFd*)value.pointer;
00056                 break;
00057 
00058             case TQT_DBusData::List:
00059                 delete (TQT_DBusDataList*)value.pointer;
00060                 break;
00061 
00062             case TQT_DBusData::Struct:
00063                 delete (TQValueList<TQT_DBusData>*)value.pointer;
00064                 break;
00065 
00066             case TQT_DBusData::Variant:
00067                 delete (TQT_DBusVariant*)value.pointer;
00068                 break;
00069 
00070             case TQT_DBusData::Map:
00071                 switch (keyType)
00072                 {
00073                     case TQT_DBusData::Byte:
00074                         delete (TQT_DBusDataMap<TQ_UINT8>*)value.pointer;
00075                         break;
00076 
00077                     case TQT_DBusData::Int16:
00078                         delete (TQT_DBusDataMap<TQ_INT16>*)value.pointer;
00079                         break;
00080 
00081                     case TQT_DBusData::UInt16:
00082                         delete (TQT_DBusDataMap<TQ_UINT16>*)value.pointer;
00083                         break;
00084 
00085                     case TQT_DBusData::Int32:
00086                         delete (TQT_DBusDataMap<TQ_INT32>*)value.pointer;
00087                         break;
00088 
00089                     case TQT_DBusData::UInt32:
00090                         delete (TQT_DBusDataMap<TQ_UINT32>*)value.pointer;
00091                         break;
00092 
00093                     case TQT_DBusData::Int64:
00094                         delete (TQT_DBusDataMap<TQ_INT64>*)value.pointer;
00095                         break;
00096 
00097                     case TQT_DBusData::UInt64:
00098                         delete (TQT_DBusDataMap<TQ_UINT64>*)value.pointer;
00099                         break;
00100 
00101                     case TQT_DBusData::String:
00102                         delete (TQT_DBusDataMap<TQString>*)value.pointer;
00103                         break;
00104 
00105                     case TQT_DBusData::ObjectPath:
00106                         delete (TQT_DBusDataMap<TQT_DBusObjectPath>*)value.pointer;
00107                         break;
00108 
00109                     case TQT_DBusData::UnixFd:
00110                         delete (TQT_DBusDataMap<TQT_DBusUnixFd>*)value.pointer;
00111                         break;
00112 
00113                     default:
00114                         tqFatal("TQT_DBusData::Private: unhandled map key type %d(%s)",
00115                                keyType, TQT_DBusData::typeName(keyType));
00116                         break;
00117                 }
00118                 break;
00119 
00120             default:
00121                 break;
00122         }
00123     }
00124 
00125 public:
00126     Type type;
00127     Type keyType;
00128 
00129     union
00130     {
00131         bool boolValue;
00132         TQ_UINT8 byteValue;
00133         TQ_INT16 int16Value;
00134         TQ_UINT16 uint16Value;
00135         TQ_INT32 int32Value;
00136         TQ_UINT32 uint32Value;
00137         TQ_INT64 int64Value;
00138         TQ_UINT64 uint64Value;
00139         double doubleValue;
00140         void* pointer;
00141     } value;
00142 };
00143 
00144 // key type definitions for TQT_DBusDataMap
00145 template <>
00146 const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT8>::m_keyType = TQT_DBusData::Byte;
00147 
00148 template <>
00149 const TQT_DBusData::Type TQT_DBusDataMap<TQ_INT16>::m_keyType = TQT_DBusData::Int16;
00150 
00151 template <>
00152 const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT16>::m_keyType = TQT_DBusData::UInt16;
00153 
00154 template <>
00155 const TQT_DBusData::Type TQT_DBusDataMap<TQ_INT32>::m_keyType = TQT_DBusData::Int32;
00156 
00157 template <>
00158 const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT32>::m_keyType = TQT_DBusData::UInt32;
00159 
00160 template <>
00161 const TQT_DBusData::Type TQT_DBusDataMap<TQ_INT64>::m_keyType = TQT_DBusData::Int64;
00162 
00163 template <>
00164 const TQT_DBusData::Type TQT_DBusDataMap<TQ_UINT64>::m_keyType = TQT_DBusData::UInt64;
00165 
00166 template <>
00167 const TQT_DBusData::Type TQT_DBusDataMap<TQString>::m_keyType = TQT_DBusData::String;
00168 
00169 template <>
00170 const TQT_DBusData::Type TQT_DBusDataMap<TQT_DBusObjectPath>::m_keyType = TQT_DBusData::ObjectPath;
00171 
00172 template <>
00173 const TQT_DBusData::Type TQT_DBusDataMap<TQT_DBusUnixFd>::m_keyType = TQT_DBusData::UnixFd;
00174 
00175 
00176 TQT_DBusData::TQT_DBusData() : d(new Private())
00177 {
00178 }
00179 
00180 TQT_DBusData::TQT_DBusData(const TQT_DBusData& other) : d(0)
00181 {
00182     d = other.d;
00183 
00184     d->ref();
00185 }
00186 
00187 TQT_DBusData::~TQT_DBusData()
00188 {
00189     if (d->deref()) delete d;
00190 }
00191 
00192 TQT_DBusData& TQT_DBusData::operator=(const TQT_DBusData& other)
00193 {
00194     if (&other == this) return *this;
00195 
00196     if (d->deref()) delete d;
00197 
00198     d = other.d;
00199 
00200     d->ref();
00201 
00202     return *this;
00203 }
00204 
00205 bool TQT_DBusData::operator==(const TQT_DBusData& other) const
00206 {
00207     if (&other == this) return true;
00208 
00209     if (d == other.d) return true;
00210 
00211     if (d->type == other.d->type)
00212     {
00213         switch (d->type)
00214         {
00215             case TQT_DBusData::Invalid:
00216                 return true;
00217 
00218             case TQT_DBusData::Bool:
00219                 return d->value.boolValue == other.d->value.boolValue;
00220 
00221             case TQT_DBusData::Byte:
00222                 return d->value.byteValue == other.d->value.byteValue;
00223 
00224             case TQT_DBusData::Int16:
00225                 return d->value.int16Value == other.d->value.int16Value;
00226 
00227             case TQT_DBusData::UInt16:
00228                 return d->value.uint16Value == other.d->value.uint16Value;
00229 
00230             case TQT_DBusData::Int32:
00231                 return d->value.int32Value == other.d->value.int32Value;
00232 
00233             case TQT_DBusData::UInt32:
00234                 return d->value.uint32Value == other.d->value.uint64Value;
00235 
00236             case TQT_DBusData::Int64:
00237                 return d->value.int64Value == other.d->value.int64Value;
00238 
00239             case TQT_DBusData::UInt64:
00240                 return d->value.uint64Value == other.d->value.uint64Value;
00241 
00242             case TQT_DBusData::Double:
00243                 // FIXME: should not compare doubles for equality like this
00244                 return d->value.doubleValue == other.d->value.doubleValue;
00245 
00246             case TQT_DBusData::String:
00247                 return toString() == other.toString();
00248 
00249             case TQT_DBusData::ObjectPath:
00250                 return toObjectPath() == other.toObjectPath();
00251 
00252             case TQT_DBusData::UnixFd:
00253                 return toUnixFd() == other.toUnixFd();
00254 
00255             case TQT_DBusData::List:
00256                 return toList() == other.toList();
00257 
00258             case TQT_DBusData::Struct:
00259                 return toStruct() == other.toStruct();
00260 
00261             case TQT_DBusData::Variant:
00262                 return toVariant() == other.toVariant();
00263 
00264             case TQT_DBusData::Map:
00265                 if (d->keyType != other.d->keyType) return false;
00266 
00267                 switch (d->keyType)
00268                 {
00269                     case TQT_DBusData::Byte:
00270                         return toByteKeyMap() == other.toByteKeyMap();
00271 
00272                     case TQT_DBusData::Int16:
00273                         return toInt16KeyMap() == other.toInt16KeyMap();
00274 
00275                     case TQT_DBusData::UInt16:
00276                         return toUInt16KeyMap() == other.toUInt16KeyMap();
00277 
00278                     case TQT_DBusData::Int32:
00279                         return toInt32KeyMap() == other.toInt32KeyMap();
00280 
00281                     case TQT_DBusData::UInt32:
00282                         return toUInt32KeyMap() == other.toUInt32KeyMap();
00283 
00284                     case TQT_DBusData::Int64:
00285                         return toInt64KeyMap() == other.toInt64KeyMap();
00286 
00287                     case TQT_DBusData::UInt64:
00288                         return toUInt64KeyMap() == other.toUInt64KeyMap();
00289 
00290                     case TQT_DBusData::String:
00291                         return toStringKeyMap() == other.toStringKeyMap();
00292 
00293                     case TQT_DBusData::ObjectPath:
00294                         return toObjectPathKeyMap() == other.toObjectPathKeyMap();
00295 
00296                     case TQT_DBusData::UnixFd:
00297                         return toUnixFdKeyMap() == other.toUnixFdKeyMap();
00298 
00299                     default:
00300                         tqFatal("TQT_DBusData operator== unhandled map key type %d(%s)",
00301                                d->keyType, TQT_DBusData::typeName(d->keyType));
00302                         break;
00303                 }
00304 
00305                 break;
00306         }
00307     }
00308 
00309     return false;
00310 }
00311 
00312 bool TQT_DBusData::operator!=(const TQT_DBusData& other) const
00313 {
00314     return !operator==(other);
00315 }
00316 
00317 TQT_DBusData::Type TQT_DBusData::type() const
00318 {
00319     return d->type;
00320 }
00321 
00322 TQT_DBusData::Type TQT_DBusData::keyType() const
00323 {
00324     if (d->type != TQT_DBusData::Map) return TQT_DBusData::Invalid;
00325 
00326     return d->keyType;
00327 }
00328 
00329 const char* TQT_DBusData::typeName(Type type)
00330 {
00331     switch (type)
00332     {
00333         case TQT_DBusData::Invalid:    return "Invalid";
00334         case TQT_DBusData::Bool:       return "Bool";
00335         case TQT_DBusData::Byte:       return "Byte";
00336         case TQT_DBusData::Int16:      return "Int16";
00337         case TQT_DBusData::UInt16:     return "UInt16";
00338         case TQT_DBusData::Int32:      return "Int32";
00339         case TQT_DBusData::UInt32:     return "UInt32";
00340         case TQT_DBusData::Int64:      return "Int64";
00341         case TQT_DBusData::UInt64:     return "UInt64";
00342         case TQT_DBusData::Double:     return "Double";
00343         case TQT_DBusData::String:     return "String";
00344         case TQT_DBusData::ObjectPath: return "ObjectPath";
00345         case TQT_DBusData::UnixFd:     return "UnixFd";
00346         case TQT_DBusData::List:       return "List";
00347         case TQT_DBusData::Struct:     return "Struct";
00348         case TQT_DBusData::Variant:    return "Variant";
00349         case TQT_DBusData::Map:        return "Map";
00350     }
00351 
00352     return 0;
00353 }
00354 
00355 TQT_DBusData TQT_DBusData::fromBool(bool value)
00356 {
00357     TQT_DBusData data;
00358 
00359     data.d->type = TQT_DBusData::Bool;
00360     data.d->value.boolValue = value;
00361 
00362     return data;
00363 }
00364 
00365 bool TQT_DBusData::toBool(bool* ok) const
00366 {
00367     if (d->type != TQT_DBusData::Bool)
00368     {
00369         if (ok != 0) *ok = false;
00370         return false;
00371     }
00372 
00373     if (ok != 0) *ok = true;
00374 
00375     return d->value.boolValue;
00376 }
00377 
00378 TQT_DBusData TQT_DBusData::fromByte(TQ_UINT8 value)
00379 {
00380     TQT_DBusData data;
00381 
00382     data.d->type = TQT_DBusData::Byte;
00383     data.d->value.byteValue = value;
00384 
00385     return data;
00386 }
00387 
00388 TQ_UINT8 TQT_DBusData::toByte(bool* ok) const
00389 {
00390     if (d->type != TQT_DBusData::Byte)
00391     {
00392         if (ok != 0) *ok = false;
00393         return 0;
00394     }
00395 
00396     if (ok != 0) *ok = true;
00397 
00398     return d->value.byteValue;
00399 }
00400 
00401 TQT_DBusData TQT_DBusData::fromInt16(TQ_INT16 value)
00402 {
00403     TQT_DBusData data;
00404 
00405     data.d->type = TQT_DBusData::Int16;
00406     data.d->value.int16Value = value;
00407 
00408     return data;
00409 }
00410 
00411 TQ_INT16 TQT_DBusData::toInt16(bool* ok) const
00412 {
00413     if (d->type != TQT_DBusData::Int16)
00414     {
00415         if (ok != 0) *ok = false;
00416         return 0;
00417     }
00418 
00419     if (ok != 0) *ok = true;
00420 
00421     return d->value.int16Value;
00422 }
00423 
00424 TQT_DBusData TQT_DBusData::fromUInt16(TQ_UINT16 value)
00425 {
00426     TQT_DBusData data;
00427 
00428     data.d->type = TQT_DBusData::UInt16;
00429     data.d->value.uint16Value = value;
00430 
00431     return data;
00432 }
00433 
00434 TQ_UINT16 TQT_DBusData::toUInt16(bool* ok) const
00435 {
00436     if (d->type != TQT_DBusData::UInt16)
00437     {
00438         if (ok != 0) *ok = false;
00439         return 0;
00440     }
00441 
00442     if (ok != 0) *ok = true;
00443 
00444     return d->value.uint16Value;
00445 }
00446 
00447 TQT_DBusData TQT_DBusData::fromInt32(TQ_INT32 value)
00448 {
00449     TQT_DBusData data;
00450 
00451     data.d->type = TQT_DBusData::Int32;
00452     data.d->value.int32Value = value;
00453 
00454     return data;
00455 }
00456 
00457 TQ_INT32 TQT_DBusData::toInt32(bool* ok) const
00458 {
00459     if (d->type != TQT_DBusData::Int32)
00460     {
00461         if (ok != 0) *ok = false;
00462         return 0;
00463     }
00464 
00465     if (ok != 0) *ok = true;
00466 
00467     return d->value.int32Value;
00468 }
00469 
00470 TQT_DBusData TQT_DBusData::fromUInt32(TQ_UINT32 value)
00471 {
00472     TQT_DBusData data;
00473 
00474     data.d->type = TQT_DBusData::UInt32;
00475     data.d->value.uint32Value = value;
00476 
00477     return data;
00478 }
00479 
00480 TQ_UINT32 TQT_DBusData::toUInt32(bool* ok) const
00481 {
00482     if (d->type != TQT_DBusData::UInt32)
00483     {
00484         if (ok != 0) *ok = false;
00485         return 0;
00486     }
00487 
00488     if (ok != 0) *ok = true;
00489 
00490     return d->value.uint32Value;
00491 }
00492 
00493 TQT_DBusData TQT_DBusData::fromInt64(TQ_INT64 value)
00494 {
00495     TQT_DBusData data;
00496 
00497     data.d->type = TQT_DBusData::Int64;
00498     data.d->value.int64Value = value;
00499 
00500     return data;
00501 }
00502 
00503 TQ_INT64 TQT_DBusData::toInt64(bool* ok) const
00504 {
00505     if (d->type != TQT_DBusData::Int64)
00506     {
00507         if (ok != 0) *ok = false;
00508         return 0;
00509     }
00510 
00511     if (ok != 0) *ok = true;
00512 
00513     return d->value.int64Value;
00514 }
00515 
00516 TQT_DBusData TQT_DBusData::fromUInt64(TQ_UINT64 value)
00517 {
00518     TQT_DBusData data;
00519 
00520     data.d->type = TQT_DBusData::UInt64;
00521     data.d->value.uint64Value = value;
00522 
00523     return data;
00524 }
00525 
00526 TQ_UINT64 TQT_DBusData::toUInt64(bool* ok) const
00527 {
00528     if (d->type != TQT_DBusData::UInt64)
00529     {
00530         if (ok != 0) *ok = false;
00531         return 0;
00532     }
00533 
00534     if (ok != 0) *ok = true;
00535 
00536     return d->value.uint64Value;
00537 }
00538 
00539 TQT_DBusData TQT_DBusData::fromDouble(double value)
00540 {
00541     TQT_DBusData data;
00542 
00543     data.d->type = TQT_DBusData::Double;
00544     data.d->value.doubleValue = value;
00545 
00546     return data;
00547 }
00548 
00549 double TQT_DBusData::toDouble(bool* ok) const
00550 {
00551     if (d->type != TQT_DBusData::Double)
00552     {
00553         if (ok != 0) *ok = false;
00554         return 0.0;
00555     }
00556 
00557     if (ok != 0) *ok = true;
00558 
00559     return d->value.doubleValue;
00560 }
00561 
00562 TQT_DBusData TQT_DBusData::fromString(const TQString& value)
00563 {
00564     TQT_DBusData data;
00565 
00566     data.d->type = TQT_DBusData::String;
00567     data.d->value.pointer = new TQString(value);
00568 
00569     return data;
00570 }
00571 
00572 TQString TQT_DBusData::toString(bool* ok) const
00573 {
00574     if (d->type != TQT_DBusData::String)
00575     {
00576         if (ok != 0) *ok = false;
00577         return TQString();
00578     }
00579 
00580     if (ok != 0) *ok = true;
00581 
00582     return *((TQString*)d->value.pointer);
00583 }
00584 
00585 TQT_DBusData TQT_DBusData::fromObjectPath(const TQT_DBusObjectPath& value)
00586 {
00587     TQT_DBusData data;
00588 
00589     if (value.isValid())
00590     {
00591         data.d->type = TQT_DBusData::ObjectPath;
00592         data.d->value.pointer = new TQT_DBusObjectPath(value);
00593     }
00594 
00595     return data;
00596 }
00597 
00598 TQT_DBusObjectPath TQT_DBusData::toObjectPath(bool* ok) const
00599 {
00600     if (d->type != TQT_DBusData::ObjectPath)
00601     {
00602         if (ok != 0) *ok = false;
00603         return TQT_DBusObjectPath();
00604     }
00605 
00606     if (ok != 0) *ok = true;
00607 
00608     return *((TQT_DBusObjectPath*)d->value.pointer);
00609 }
00610 
00611 TQT_DBusData TQT_DBusData::fromUnixFd(const TQT_DBusUnixFd& value)
00612 {
00613     TQT_DBusData data;
00614 
00615     if (value.isValid())
00616     {
00617         data.d->type = TQT_DBusData::UnixFd;
00618         data.d->value.pointer = new TQT_DBusUnixFd(value);
00619     }
00620 
00621     return data;
00622 }
00623 
00624 TQT_DBusUnixFd TQT_DBusData::toUnixFd(bool* ok) const
00625 {
00626     if (d->type != TQT_DBusData::UnixFd)
00627     {
00628         if (ok != 0) *ok = false;
00629         return TQT_DBusUnixFd();
00630     }
00631 
00632     if (ok != 0) *ok = true;
00633 
00634     return *((TQT_DBusUnixFd*)d->value.pointer);
00635 }
00636 
00637 TQT_DBusData TQT_DBusData::fromList(const TQT_DBusDataList& list)
00638 {
00639     TQT_DBusData data;
00640 
00641     if (list.type() == TQT_DBusData::Invalid) return data;
00642 
00643     data.d->type = TQT_DBusData::List;
00644     data.d->value.pointer = new TQT_DBusDataList(list);
00645 
00646     return data;
00647 }
00648 
00649 TQT_DBusDataList TQT_DBusData::toList(bool* ok) const
00650 {
00651     if (d->type != TQT_DBusData::List)
00652     {
00653         if (ok != 0) *ok = false;
00654         return TQT_DBusDataList();
00655     }
00656 
00657     if (ok != 0) *ok = true;
00658 
00659     return *((TQT_DBusDataList*)d->value.pointer);
00660 }
00661 
00662 TQT_DBusData TQT_DBusData::fromTQValueList(const TQValueList<TQT_DBusData>& list)
00663 {
00664     return fromList(TQT_DBusDataList(list));
00665 }
00666 
00667 TQValueList<TQT_DBusData> TQT_DBusData::toTQValueList(bool* ok) const
00668 {
00669     bool internalOk = false;
00670     TQT_DBusDataList list = toList(&internalOk);
00671 
00672     if (!internalOk)
00673     {
00674         if (ok != 0) *ok = false;
00675         return TQValueList<TQT_DBusData>();
00676     }
00677 
00678     return list.toTQValueList();
00679 }
00680 
00681 TQT_DBusData TQT_DBusData::fromStruct(const TQValueList<TQT_DBusData>& memberList)
00682 {
00683     TQT_DBusData data;
00684 
00685     TQValueList<TQT_DBusData>::const_iterator it    = memberList.begin();
00686     TQValueList<TQT_DBusData>::const_iterator endIt = memberList.end();
00687     for (; it != endIt; ++it)
00688     {
00689         if ((*it).d->type == Invalid) return data;
00690     }
00691 
00692     data.d->type = TQT_DBusData::Struct;
00693     data.d->value.pointer = new TQValueList<TQT_DBusData>(memberList);
00694 
00695     return data;
00696 }
00697 
00698 TQValueList<TQT_DBusData> TQT_DBusData::toStruct(bool* ok) const
00699 {
00700     if (d->type != TQT_DBusData::Struct)
00701     {
00702         if (ok != 0) *ok = false;
00703         return TQValueList<TQT_DBusData>();
00704     }
00705 
00706     if (ok != 0) *ok = true;
00707 
00708     return *((TQValueList<TQT_DBusData>*)d->value.pointer);
00709 }
00710 
00711 TQT_DBusData TQT_DBusData::fromVariant(const TQT_DBusVariant& value)
00712 {
00713     TQT_DBusData data;
00714 
00715     data.d->type = TQT_DBusData::Variant;
00716     data.d->value.pointer = new TQT_DBusVariant(value);
00717 
00718     return data;
00719 }
00720 
00721 TQT_DBusVariant TQT_DBusData::toVariant(bool* ok) const
00722 {
00723     if (d->type != TQT_DBusData::Variant)
00724     {
00725         if (ok != 0) *ok = false;
00726         return TQT_DBusVariant();
00727     }
00728 
00729     if (ok != 0) *ok = true;
00730 
00731     return *((TQT_DBusVariant*)d->value.pointer);
00732 }
00733 
00734 TQT_DBusData TQT_DBusData::fromByteKeyMap(const TQT_DBusDataMap<TQ_UINT8>& map)
00735 {
00736     TQT_DBusData data;
00737 
00738     data.d->type = TQT_DBusData::Map;
00739     data.d->keyType = map.keyType();
00740     data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT8>(map);
00741 
00742     return data;
00743 }
00744 
00745 TQT_DBusDataMap<TQ_UINT8> TQT_DBusData::toByteKeyMap(bool* ok) const
00746 {
00747     if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_UINT8>::m_keyType)
00748     {
00749         if (ok != 0) *ok = false;
00750         return TQT_DBusDataMap<TQ_UINT8>();
00751     }
00752 
00753     if (ok != 0) *ok = true;
00754 
00755     return *((TQT_DBusDataMap<TQ_UINT8>*)d->value.pointer);
00756 }
00757 
00758 TQT_DBusData TQT_DBusData::fromInt16KeyMap(const TQT_DBusDataMap<TQ_INT16>& map)
00759 {
00760     TQT_DBusData data;
00761 
00762     data.d->type = TQT_DBusData::Map;
00763     data.d->keyType = map.keyType();
00764     data.d->value.pointer = new TQT_DBusDataMap<TQ_INT16>(map);
00765 
00766     return data;
00767 }
00768 
00769 TQT_DBusDataMap<TQ_INT16> TQT_DBusData::toInt16KeyMap(bool* ok) const
00770 {
00771     if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_INT16>::m_keyType)
00772     {
00773         if (ok != 0) *ok = false;
00774         return TQT_DBusDataMap<TQ_INT16>();
00775     }
00776 
00777     if (ok != 0) *ok = true;
00778 
00779     return *((TQT_DBusDataMap<TQ_INT16>*)d->value.pointer);
00780 }
00781 
00782 TQT_DBusData TQT_DBusData::fromUInt16KeyMap(const TQT_DBusDataMap<TQ_UINT16>& map)
00783 {
00784     TQT_DBusData data;
00785 
00786     data.d->type = TQT_DBusData::Map;
00787     data.d->keyType = map.keyType();
00788     data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT16>(map);
00789 
00790     return data;
00791 }
00792 
00793 TQT_DBusDataMap<TQ_UINT16> TQT_DBusData::toUInt16KeyMap(bool* ok) const
00794 {
00795     if (d->type != TQT_DBusData::Map &&
00796         d->keyType != TQT_DBusDataMap<TQ_UINT16>::m_keyType)
00797     {
00798         if (ok != 0) *ok = false;
00799         return TQT_DBusDataMap<TQ_UINT16>();
00800     }
00801 
00802     if (ok != 0) *ok = true;
00803 
00804     return *((TQT_DBusDataMap<TQ_UINT16>*)d->value.pointer);
00805 }
00806 
00807 TQT_DBusData TQT_DBusData::fromInt32KeyMap(const TQT_DBusDataMap<TQ_INT32>& map)
00808 {
00809     TQT_DBusData data;
00810 
00811     data.d->type = TQT_DBusData::Map;
00812     data.d->keyType = map.keyType();
00813     data.d->value.pointer = new TQT_DBusDataMap<TQ_INT32>(map);
00814 
00815     return data;
00816 }
00817 
00818 TQT_DBusDataMap<TQ_INT32> TQT_DBusData::toInt32KeyMap(bool* ok) const
00819 {
00820     if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_INT32>::m_keyType)
00821     {
00822         if (ok != 0) *ok = false;
00823         return TQT_DBusDataMap<TQ_INT32>();
00824     }
00825 
00826     if (ok != 0) *ok = true;
00827 
00828     return *((TQT_DBusDataMap<TQ_INT32>*)d->value.pointer);
00829 }
00830 
00831 TQT_DBusData TQT_DBusData::fromUInt32KeyMap(const TQT_DBusDataMap<TQ_UINT32>& map)
00832 {
00833     TQT_DBusData data;
00834 
00835     data.d->type = TQT_DBusData::Map;
00836     data.d->keyType = map.keyType();
00837     data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT32>(map);
00838 
00839     return data;
00840 }
00841 
00842 TQT_DBusDataMap<TQ_UINT32> TQT_DBusData::toUInt32KeyMap(bool* ok) const
00843 {
00844     if (d->type != TQT_DBusData::Map &&
00845         d->keyType != TQT_DBusDataMap<TQ_UINT32>::m_keyType)
00846     {
00847         if (ok != 0) *ok = false;
00848         return TQT_DBusDataMap<TQ_UINT32>();
00849     }
00850 
00851     if (ok != 0) *ok = true;
00852 
00853     return *((TQT_DBusDataMap<TQ_UINT32>*)d->value.pointer);
00854 }
00855 
00856 TQT_DBusData TQT_DBusData::fromInt64KeyMap(const TQT_DBusDataMap<TQ_INT64>& map)
00857 {
00858     TQT_DBusData data;
00859 
00860     data.d->type = TQT_DBusData::Map;
00861     data.d->keyType = map.keyType();
00862     data.d->value.pointer = new TQT_DBusDataMap<TQ_INT64>(map);
00863 
00864     return data;
00865 }
00866 
00867 TQT_DBusDataMap<TQ_INT64> TQT_DBusData::toInt64KeyMap(bool* ok) const
00868 {
00869     if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQ_INT64>::m_keyType)
00870     {
00871         if (ok != 0) *ok = false;
00872         return TQT_DBusDataMap<TQ_INT64>();
00873     }
00874 
00875     if (ok != 0) *ok = true;
00876 
00877     return *((TQT_DBusDataMap<TQ_INT64>*)d->value.pointer);
00878 }
00879 
00880 TQT_DBusData TQT_DBusData::fromUInt64KeyMap(const TQT_DBusDataMap<TQ_UINT64>& map)
00881 {
00882     TQT_DBusData data;
00883 
00884     data.d->type = TQT_DBusData::Map;
00885     data.d->keyType = map.keyType();
00886     data.d->value.pointer = new TQT_DBusDataMap<TQ_UINT64>(map);
00887 
00888     return data;
00889 }
00890 
00891 TQT_DBusDataMap<TQ_UINT64> TQT_DBusData::toUInt64KeyMap(bool* ok) const
00892 {
00893     if (d->type != TQT_DBusData::Map &&
00894         d->keyType != TQT_DBusDataMap<TQ_UINT64>::m_keyType)
00895     {
00896         if (ok != 0) *ok = false;
00897         return TQT_DBusDataMap<TQ_UINT64>();
00898     }
00899 
00900     if (ok != 0) *ok = true;
00901 
00902     return *((TQT_DBusDataMap<TQ_UINT64>*)d->value.pointer);
00903 }
00904 
00905 TQT_DBusData TQT_DBusData::fromStringKeyMap(const TQT_DBusDataMap<TQString>& map)
00906 {
00907     TQT_DBusData data;
00908 
00909     data.d->type = TQT_DBusData::Map;
00910     data.d->keyType = map.keyType();
00911     data.d->value.pointer = new TQT_DBusDataMap<TQString>(map);
00912 
00913     return data;
00914 }
00915 
00916 TQT_DBusDataMap<TQString> TQT_DBusData::toStringKeyMap(bool* ok) const
00917 {
00918     if (d->type != TQT_DBusData::Map && d->keyType != TQT_DBusDataMap<TQString>::m_keyType)
00919     {
00920         if (ok != 0) *ok = false;
00921         return TQT_DBusDataMap<TQString>();
00922     }
00923 
00924     if (ok != 0) *ok = true;
00925 
00926     return *((TQT_DBusDataMap<TQString>*)d->value.pointer);
00927 }
00928 
00929 TQT_DBusData TQT_DBusData::fromObjectPathKeyMap(const TQT_DBusDataMap<TQT_DBusObjectPath>& map)
00930 {
00931     TQT_DBusData data;
00932 
00933     data.d->type = TQT_DBusData::Map;
00934     data.d->keyType = map.keyType();
00935     data.d->value.pointer = new TQT_DBusDataMap<TQT_DBusObjectPath>(map);
00936 
00937     return data;
00938 }
00939 
00940 TQT_DBusDataMap<TQT_DBusObjectPath> TQT_DBusData::toObjectPathKeyMap(bool* ok) const
00941 {
00942     if (d->type != TQT_DBusData::Map &&
00943         d->keyType != TQT_DBusDataMap<TQT_DBusObjectPath>::m_keyType)
00944     {
00945         if (ok != 0) *ok = false;
00946         return TQT_DBusDataMap<TQT_DBusObjectPath>();
00947     }
00948 
00949     if (ok != 0) *ok = true;
00950 
00951     return *((TQT_DBusDataMap<TQT_DBusObjectPath>*)d->value.pointer);
00952 }
00953 
00954 TQT_DBusData TQT_DBusData::fromUnixFdKeyMap(const TQT_DBusDataMap<TQT_DBusUnixFd>& map)
00955 {
00956     TQT_DBusData data;
00957 
00958     data.d->type = TQT_DBusData::Map;
00959     data.d->keyType = map.keyType();
00960     data.d->value.pointer = new TQT_DBusDataMap<TQT_DBusUnixFd>(map);
00961 
00962     return data;
00963 }
00964 
00965 TQT_DBusDataMap<TQT_DBusUnixFd> TQT_DBusData::toUnixFdKeyMap(bool* ok) const
00966 {
00967     if (d->type != TQT_DBusData::Map &&
00968         d->keyType != TQT_DBusDataMap<TQT_DBusUnixFd>::m_keyType)
00969     {
00970         if (ok != 0) *ok = false;
00971         return TQT_DBusDataMap<TQT_DBusUnixFd>();
00972     }
00973 
00974     if (ok != 0) *ok = true;
00975 
00976     return *((TQT_DBusDataMap<TQT_DBusUnixFd>*)d->value.pointer);
00977 }
00978 
00979 static const char* qDBusTypeForTQT_DBusType(TQT_DBusData::Type type)
00980 {
00981     switch (type)
00982     {
00983         case TQT_DBusData::Invalid:
00984             return 0;
00985         case TQT_DBusData::Bool:
00986             return DBUS_TYPE_BOOLEAN_AS_STRING;
00987         case TQT_DBusData::Byte:
00988             return DBUS_TYPE_BYTE_AS_STRING;
00989         case TQT_DBusData::Int16:
00990             return DBUS_TYPE_INT16_AS_STRING;
00991         case TQT_DBusData::UInt16:
00992             return DBUS_TYPE_UINT16_AS_STRING;
00993         case TQT_DBusData::Int32:
00994             return DBUS_TYPE_INT32_AS_STRING;
00995         case TQT_DBusData::UInt32:
00996             return DBUS_TYPE_UINT32_AS_STRING;
00997         case TQT_DBusData::Int64:
00998             return DBUS_TYPE_INT64_AS_STRING;
00999         case TQT_DBusData::UInt64:
01000             return DBUS_TYPE_UINT64_AS_STRING;
01001         case TQT_DBusData::Double:
01002             return DBUS_TYPE_DOUBLE_AS_STRING;
01003         case TQT_DBusData::String:
01004             return DBUS_TYPE_STRING_AS_STRING;
01005         case TQT_DBusData::ObjectPath:
01006             return DBUS_TYPE_OBJECT_PATH_AS_STRING;
01007         case TQT_DBusData::UnixFd:
01008             return DBUS_TYPE_UNIX_FD_AS_STRING;
01009         case TQT_DBusData::Variant:
01010             return DBUS_TYPE_VARIANT_AS_STRING;
01011         default:
01012             break;
01013     }
01014     return 0;
01015 }
01016 
01017 template <typename T>
01018 TQCString qDBusSignatureForMapValue(const TQT_DBusDataMap<T>& map)
01019 {
01020     if (map.hasContainerValueType())
01021         return map.containerValueType().buildDBusSignature();
01022     else
01023         return qDBusTypeForTQT_DBusType(map.valueType());
01024 }
01025 
01026 TQCString TQT_DBusData::buildDBusSignature() const
01027 {
01028     TQCString signature;
01029 
01030     switch (d->type)
01031     {
01032         case TQT_DBusData::List:
01033         {
01034             TQT_DBusDataList* list = (TQT_DBusDataList*) d->value.pointer;
01035             signature = DBUS_TYPE_ARRAY_AS_STRING;
01036             if (list->hasContainerItemType())
01037                 signature += list->containerItemType().buildDBusSignature();
01038             else
01039                 signature += qDBusTypeForTQT_DBusType(list->type());
01040             break;
01041         }
01042 
01043         case TQT_DBusData::Struct:
01044         {
01045             signature += DBUS_STRUCT_BEGIN_CHAR;
01046 
01047             TQValueList<TQT_DBusData>* memberList =
01048                 (TQValueList<TQT_DBusData>*) d->value.pointer;
01049 
01050             TQValueList<TQT_DBusData>::const_iterator it    = (*memberList).begin();
01051             TQValueList<TQT_DBusData>::const_iterator endIt = (*memberList).end();
01052             for (; it != endIt; ++it)
01053             {
01054                 signature += (*it).buildDBusSignature();
01055             }
01056             signature += DBUS_STRUCT_END_CHAR;
01057             break;
01058         }
01059 
01060         case TQT_DBusData::Map:
01061             signature += DBUS_TYPE_ARRAY_AS_STRING;
01062             signature += DBUS_DICT_ENTRY_BEGIN_CHAR;
01063 
01064             signature += qDBusTypeForTQT_DBusType(keyType());
01065 
01066             switch (keyType())
01067             {
01068                 case TQT_DBusData::Byte:
01069                     signature += qDBusSignatureForMapValue<TQ_UINT8>(
01070                         *((TQT_DBusDataMap<TQ_UINT8>*) d->value.pointer));
01071                     break;
01072                 case TQT_DBusData::Int16:
01073                     signature += qDBusSignatureForMapValue<TQ_INT16>(
01074                         *((TQT_DBusDataMap<TQ_INT16>*) d->value.pointer));
01075                     break;
01076                 case TQT_DBusData::UInt16:
01077                     signature += qDBusSignatureForMapValue<TQ_UINT16>(
01078                         *((TQT_DBusDataMap<TQ_UINT16>*) d->value.pointer));
01079                     break;
01080                 case TQT_DBusData::Int32:
01081                     signature += qDBusSignatureForMapValue<TQ_INT32>(
01082                         *((TQT_DBusDataMap<TQ_INT32>*) d->value.pointer));
01083                     break;
01084                 case TQT_DBusData::UInt32:
01085                     signature += qDBusSignatureForMapValue<TQ_UINT32>(
01086                         *((TQT_DBusDataMap<TQ_UINT32>*) d->value.pointer));
01087                     break;
01088                 case TQT_DBusData::Int64:
01089                     signature += qDBusSignatureForMapValue<TQ_INT64>(
01090                         *((TQT_DBusDataMap<TQ_INT64>*) d->value.pointer));
01091                     break;
01092                 case TQT_DBusData::UInt64:
01093                     signature += qDBusSignatureForMapValue<TQ_UINT64>(
01094                         *((TQT_DBusDataMap<TQ_UINT64>*) d->value.pointer));
01095                     break;
01096                 case TQT_DBusData::String:
01097                     signature += qDBusSignatureForMapValue<TQString>(
01098                         *((TQT_DBusDataMap<TQString>*) d->value.pointer));
01099                     break;
01100                 case TQT_DBusData::ObjectPath:
01101                     signature += qDBusSignatureForMapValue<TQT_DBusObjectPath>(
01102                         *((TQT_DBusDataMap<TQT_DBusObjectPath>*) d->value.pointer));
01103                     break;
01104                 case TQT_DBusData::UnixFd:
01105                     signature += qDBusSignatureForMapValue<TQT_DBusUnixFd>(
01106                         *((TQT_DBusDataMap<TQT_DBusUnixFd>*) d->value.pointer));
01107                     break;
01108                 default:
01109                     break;
01110             }
01111 
01112             signature += DBUS_DICT_ENTRY_END_CHAR;
01113             break;
01114 
01115         default:
01116             signature = qDBusTypeForTQT_DBusType(d->type);
01117             break;
01118     }
01119 
01120     return signature;
01121 }

Generated on Fri Apr 26 2019 17:49:48 for DBus-1-TQt by  doxygen 1.7.1