Optimize QUuid::toString() and relevant
[profile/ivi/qtbase.git] / src / corelib / plugin / quuid.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtCore module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QUUID_H
43 #define QUUID_H
44
45 #include <QtCore/qstring.h>
46
47 QT_BEGIN_HEADER
48
49 #if defined(Q_OS_WIN)
50 #ifndef GUID_DEFINED
51 #define GUID_DEFINED
52 typedef struct _GUID
53 {
54     ulong   Data1;
55     ushort  Data2;
56     ushort  Data3;
57     uchar   Data4[8];
58 } GUID, *REFGUID, *LPGUID;
59 #endif
60 #endif
61
62
63 QT_BEGIN_NAMESPACE
64
65 QT_MODULE(Core)
66
67 struct Q_CORE_EXPORT QUuid
68 {
69     enum Variant {
70         VarUnknown        =-1,
71         NCS                = 0, // 0 - -
72         DCE                = 2, // 1 0 -
73         Microsoft        = 6, // 1 1 0
74         Reserved        = 7  // 1 1 1
75     };
76
77     enum Version {
78         VerUnknown        =-1,
79         Time                = 1, // 0 0 0 1
80         EmbeddedPOSIX        = 2, // 0 0 1 0
81         Name                = 3, // 0 0 1 1
82         Random                = 4  // 0 1 0 0
83     };
84
85     QUuid()
86     {
87         data1 = 0;
88         data2 = 0;
89         data3 = 0;
90         for(int i = 0; i < 8; i++)
91             data4[i] = 0;
92     }
93     QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8)
94     {
95         data1 = l;
96         data2 = w1;
97         data3 = w2;
98         data4[0] = b1;
99         data4[1] = b2;
100         data4[2] = b3;
101         data4[3] = b4;
102         data4[4] = b5;
103         data4[5] = b6;
104         data4[6] = b7;
105         data4[7] = b8;
106     }
107 #ifndef QT_NO_QUUID_STRING
108     QUuid(const QString &);
109     QUuid(const char *);
110     QString toString() const;
111     operator QString() const { return toString(); } // ### Qt5 remove
112 #endif
113     bool isNull() const;
114
115     bool operator==(const QUuid &orig) const
116     {
117         uint i;
118         if (data1 != orig.data1 || data2 != orig.data2 ||
119              data3 != orig.data3)
120             return false;
121
122         for(i = 0; i < 8; i++)
123             if (data4[i] != orig.data4[i])
124                 return false;
125
126         return true;
127     }
128
129     bool operator!=(const QUuid &orig) const
130     {
131         return !(*this == orig);
132     }
133
134     bool operator<(const QUuid &other) const;
135     bool operator>(const QUuid &other) const;
136
137 #if defined(Q_OS_WIN)
138     // On Windows we have a type GUID that is used by the platform API, so we
139     // provide convenience operators to cast from and to this type.
140     QUuid(const GUID &guid)
141     {
142         data1 = guid.Data1;
143         data2 = guid.Data2;
144         data3 = guid.Data3;
145         for(int i = 0; i < 8; i++)
146             data4[i] = guid.Data4[i];
147     }
148
149     QUuid &operator=(const GUID &guid)
150     {
151         *this = QUuid(guid);
152         return *this;
153     }
154
155     operator GUID() const
156     {
157         GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } };
158         return guid;
159     }
160
161     bool operator==(const GUID &guid) const
162     {
163         return *this == QUuid(guid);
164     }
165
166     bool operator!=(const GUID &guid) const
167     {
168         return !(*this == guid);
169     }
170 #endif
171     static QUuid createUuid();
172     QUuid::Variant variant() const;
173     QUuid::Version version() const;
174
175     uint    data1;
176     ushort  data2;
177     ushort  data3;
178     uchar   data4[8];
179 };
180
181 #ifndef QT_NO_DATASTREAM
182 Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QUuid &);
183 Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QUuid &);
184 #endif
185
186 QT_END_NAMESPACE
187
188 QT_END_HEADER
189
190 #endif // QUUID_H