~ubuntu-branches/ubuntu/wily/qtbase-opensource-src/wily

« back to all changes in this revision

Viewing changes to src/corelib/arch/qatomic_bootstrap.h

  • Committer: Package Import Robot
  • Author(s): Timo Jyrinki
  • Date: 2013-02-05 12:46:17 UTC
  • Revision ID: package-import@ubuntu.com-20130205124617-c8jouts182j002fx
Tags: upstream-5.0.1+dfsg
ImportĀ upstreamĀ versionĀ 5.0.1+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
 
4
** Copyright (C) 2011 Thiago Macieira <thiago@kde.org>
 
5
** Contact: http://www.qt-project.org/legal
 
6
**
 
7
** This file is part of the QtCore module of the Qt Toolkit.
 
8
**
 
9
** $QT_BEGIN_LICENSE:LGPL$
 
10
** Commercial License Usage
 
11
** Licensees holding valid commercial Qt licenses may use this file in
 
12
** accordance with the commercial license agreement provided with the
 
13
** Software or, alternatively, in accordance with the terms contained in
 
14
** a written agreement between you and Digia.  For licensing terms and
 
15
** conditions see http://qt.digia.com/licensing.  For further information
 
16
** use the contact form at http://qt.digia.com/contact-us.
 
17
**
 
18
** GNU Lesser General Public License Usage
 
19
** Alternatively, this file may be used under the terms of the GNU Lesser
 
20
** General Public License version 2.1 as published by the Free Software
 
21
** Foundation and appearing in the file LICENSE.LGPL included in the
 
22
** packaging of this file.  Please review the following information to
 
23
** ensure the GNU Lesser General Public License version 2.1 requirements
 
24
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 
25
**
 
26
** In addition, as a special exception, Digia gives you certain additional
 
27
** rights.  These rights are described in the Digia Qt LGPL Exception
 
28
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 
29
**
 
30
** GNU General Public License Usage
 
31
** Alternatively, this file may be used under the terms of the GNU
 
32
** General Public License version 3.0 as published by the Free Software
 
33
** Foundation and appearing in the file LICENSE.GPL included in the
 
34
** packaging of this file.  Please review the following information to
 
35
** ensure the GNU General Public License version 3.0 requirements will be
 
36
** met: http://www.gnu.org/copyleft/gpl.html.
 
37
**
 
38
**
 
39
** $QT_END_LICENSE$
 
40
**
 
41
****************************************************************************/
 
42
 
 
43
#ifndef QATOMIC_BOOTSTRAP_H
 
44
#define QATOMIC_BOOTSTRAP_H
 
45
 
 
46
#include <QtCore/qgenericatomic.h>
 
47
 
 
48
QT_BEGIN_HEADER
 
49
 
 
50
QT_BEGIN_NAMESPACE
 
51
 
 
52
#if 0
 
53
// silence syncqt warnings
 
54
QT_END_NAMESPACE
 
55
QT_END_HEADER
 
56
 
 
57
#pragma qt_sync_stop_processing
 
58
#endif
 
59
 
 
60
template<> struct QAtomicIntegerTraits<int> { enum { IsInteger = 1 }; };
 
61
template <typename T> struct QAtomicOps: QGenericAtomicOps<QAtomicOps<T> >
 
62
{
 
63
    typedef T Type;
 
64
 
 
65
    static bool ref(T &_q_value) Q_DECL_NOTHROW
 
66
    {
 
67
        return ++_q_value != 0;
 
68
    }
 
69
    static bool deref(T &_q_value) Q_DECL_NOTHROW
 
70
    {
 
71
        return --_q_value != 0;
 
72
    }
 
73
 
 
74
    static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW
 
75
    {
 
76
        if (_q_value == expectedValue) {
 
77
            _q_value = newValue;
 
78
            return true;
 
79
        }
 
80
        return false;
 
81
    }
 
82
 
 
83
    static T fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW
 
84
    {
 
85
        T tmp = _q_value;
 
86
        _q_value = newValue;
 
87
        return tmp;
 
88
    }
 
89
 
 
90
    static
 
91
    T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT valueToAdd) Q_DECL_NOTHROW
 
92
    {
 
93
        T returnValue = _q_value;
 
94
        _q_value += valueToAdd;
 
95
        return returnValue;
 
96
    }
 
97
};
 
98
 
 
99
QT_END_NAMESPACE
 
100
 
 
101
QT_END_HEADER
 
102
 
 
103
#endif // QATOMIC_BOOTSTRAP_H