1/****************************************************************************
2**
3** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt3D module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#include <Qt3DCore/qnodeid.h>
41
42QT_BEGIN_NAMESPACE
43
44namespace Qt3DCore {
45
46/*!
47 * \class Qt3DCore::QNodeId
48 * \inheaderfile Qt3DCore/QNodeId
49 * \inmodule Qt3DCore
50 * \brief Uniquely identifies a QNode.
51 */
52
53/*!
54 * \typedef Qt3DCore::QNodeIdVector
55 * \relates Qt3DCore::QNodeId
56 *
57 * A vector of \l {QNodeId}s.
58 */
59
60/*!
61 * \fn bool Qt3DCore::QNodeId::isNull() const
62 * \return \TODO
63 */
64
65/*!
66 * \fn bool Qt3DCore::QNodeId::operator ==(QNodeId other) const
67 * \return \c true if \c this == \a other.
68 */
69
70/*!
71 * \fn bool Qt3DCore::QNodeId::operator !=(QNodeId other) const
72 * \return \c true if \c this != \a other.
73 */
74
75/*!
76 * \fn bool Qt3DCore::QNodeId::operator <(QNodeId other) const
77 * \return \c true if \c this < \a other.
78 */
79
80/*!
81 * \fn bool Qt3DCore::QNodeId::operator >(QNodeId other) const
82 * \return \c true if \c this > \a other.
83 */
84
85/*!
86 * \fn quint64 Qt3DCore::QNodeId::id() const
87 * \return \TODO
88 */
89
90/*!
91 * \fn Qt3DCore::QNodeId::operator bool() const
92 * Returns \TODO
93 */
94
95/*!
96 * \fn uint Qt3DCore::qHash(QNodeId id, uint seed = 0)
97 * \relates Qt3DCore::QNodeId
98 * \return hash of node with \a id and optional \a seed.
99 */
100
101/*!
102 * \return node id.
103 */
104QNodeId QNodeId::createId() Q_DECL_NOTHROW
105{
106 typedef
107#if defined(Q_ATOMIC_INT64_IS_SUPPORTED)
108 quint64
109#else
110 quint32
111#endif
112 UIntType;
113 static QBasicAtomicInteger<UIntType> next = Q_BASIC_ATOMIC_INITIALIZER(0);
114 return QNodeId(next.fetchAndAddRelaxed(1) + 1);
115}
116
117#ifndef QT_NO_DEBUG_STREAM
118/*!
119 * << with \a d and \a id.
120 * \return QDebug.
121 */
122QDebug operator<<(QDebug d, QNodeId id)
123{
124 d << id.id();
125 return d;
126}
127#endif
128
129}
130
131QT_END_NAMESPACE
132