quuid.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:5k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QUUID_H
  38. #define QUUID_H
  39. #include <QtCore/qstring.h>
  40. QT_BEGIN_HEADER
  41. #if defined(Q_OS_WIN)
  42. #ifndef GUID_DEFINED
  43. #define GUID_DEFINED
  44. typedef struct _GUID
  45. {
  46.     ulong   Data1;
  47.     ushort  Data2;
  48.     ushort  Data3;
  49.     uchar   Data4[8];
  50. } GUID, *REFGUID, *LPGUID;
  51. #endif
  52. #endif
  53. QT_BEGIN_NAMESPACE
  54. QT_MODULE(Core)
  55. struct Q_CORE_EXPORT QUuid
  56. {
  57.     enum Variant {
  58.         VarUnknown        =-1,
  59.         NCS                = 0, // 0 - -
  60.         DCE                = 2, // 1 0 -
  61.         Microsoft        = 6, // 1 1 0
  62.         Reserved        = 7  // 1 1 1
  63.     };
  64.     enum Version {
  65.         VerUnknown        =-1,
  66.         Time                = 1, // 0 0 0 1
  67.         EmbeddedPOSIX        = 2, // 0 0 1 0
  68.         Name                = 3, // 0 0 1 1
  69.         Random                = 4  // 0 1 0 0
  70.     };
  71.     QUuid()
  72.     {
  73.         data1 = 0;
  74.         data2 = 0;
  75.         data3 = 0;
  76.         for(int i = 0; i < 8; i++)
  77.             data4[i] = 0;
  78.     }
  79.     QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8)
  80.     {
  81.         data1 = l;
  82.         data2 = w1;
  83.         data3 = w2;
  84.         data4[0] = b1;
  85.         data4[1] = b2;
  86.         data4[2] = b3;
  87.         data4[3] = b4;
  88.         data4[4] = b5;
  89.         data4[5] = b6;
  90.         data4[6] = b7;
  91.         data4[7] = b8;
  92.     }
  93. #ifndef QT_NO_QUUID_STRING
  94.     QUuid(const QString &);
  95.     QUuid(const char *);
  96.     QString toString() const;
  97.     operator QString() const { return toString(); }
  98. #endif
  99.     bool isNull() const;
  100.     bool operator==(const QUuid &orig) const
  101.     {
  102.         uint i;
  103.         if (data1 != orig.data1 || data2 != orig.data2 ||
  104.              data3 != orig.data3)
  105.             return false;
  106.         for(i = 0; i < 8; i++)
  107.             if (data4[i] != orig.data4[i])
  108.                 return false;
  109.         return true;
  110.     }
  111.     bool operator!=(const QUuid &orig) const
  112.     {
  113.         return !(*this == orig);
  114.     }
  115.     bool operator<(const QUuid &other) const;
  116.     bool operator>(const QUuid &other) const;
  117. #if defined(Q_OS_WIN)
  118.     // On Windows we have a type GUID that is used by the platform API, so we
  119.     // provide convenience operators to cast from and to this type.
  120.     QUuid(const GUID &guid)
  121.     {
  122.         data1 = guid.Data1;
  123.         data2 = guid.Data2;
  124.         data3 = guid.Data3;
  125.         for(int i = 0; i < 8; i++)
  126.             data4[i] = guid.Data4[i];
  127.     }
  128.     QUuid &operator=(const GUID &guid)
  129.     {
  130.         *this = QUuid(guid);
  131.         return *this;
  132.     }
  133.     operator GUID() const
  134.     {
  135.         GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } };
  136.         return guid;
  137.     }
  138.     bool operator==(const GUID &guid) const
  139.     {
  140.         return *this == QUuid(guid);
  141.     }
  142.     bool operator!=(const GUID &guid) const
  143.     {
  144.         return !(*this == guid);
  145.     }
  146. #endif
  147.     static QUuid createUuid();
  148.     QUuid::Variant variant() const;
  149.     QUuid::Version version() const;
  150.     uint    data1;
  151.     ushort  data2;
  152.     ushort  data3;
  153.     uchar   data4[8];
  154. };
  155. #ifndef QT_NO_DATASTREAM
  156. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QUuid &);
  157. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QUuid &);
  158. #endif
  159. QT_END_NAMESPACE
  160. QT_END_HEADER
  161. #endif // QUUID_H