File: Global.h

package info (click to toggle)
keepassx 2.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 5,396 kB
  • ctags: 2,957
  • sloc: cpp: 26,071; xml: 652; ansic: 600; python: 62; makefile: 10; sh: 7
file content (135 lines) | stat: -rw-r--r-- 4,182 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 *  Copyright (C) 2012 Felix Geyer <debfx@fobos.de>
 *  Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies)
 *  Copyright (C) 2012 Intel Corporation
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 or (at your option)
 *  version 3 of the License.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef KEEPASSX_GLOBAL_H
#define KEEPASSX_GLOBAL_H

// mostly copied from qcompilerdetection.h which is part of Qt 5

#include <QtGlobal>

#ifdef Q_CC_CLANG
#  if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
#    if __has_feature(cxx_strong_enums)
#      define COMPILER_CLASS_ENUM
#    endif
#    if __has_feature(cxx_constexpr)
#      define COMPILER_CONSTEXPR
#    endif
#    if __has_feature(cxx_decltype) /* && __has_feature(cxx_decltype_incomplete_return_types) */
#      define COMPILER_DECLTYPE
#    endif
#    if __has_feature(cxx_override_control)
#      define COMPILER_EXPLICIT_OVERRIDES
#    endif
#    if __has_feature(cxx_nullptr)
#      define COMPILER_NULLPTR
#    endif
#    if __has_feature(cxx_static_assert)
#      define COMPILER_STATIC_ASSERT
#    endif
#  endif
#endif // Q_CC_CLANG

#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG)
#  if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403
#      define COMPILER_DECLTYPE
#      define COMPILER_STATIC_ASSERT
#    endif
#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404
#      define COMPILER_CLASS_ENUM
#    endif
#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
#      define COMPILER_CONSTEXPR
#      define COMPILER_NULLPTR
#    endif
#    if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407
#      define COMPILER_EXPLICIT_OVERRIDES
#    endif
#  endif
#endif

/*
 * C++11 keywords and expressions
 */
#if !defined(Q_NULLPTR)
#  ifdef COMPILER_NULLPTR
#    define Q_NULLPTR nullptr
#  else
#    define Q_NULLPTR 0
#  endif
#endif

#if !defined(Q_DECL_CONSTEXPR)
#  ifdef COMPILER_CONSTEXPR
#    define Q_DECL_CONSTEXPR constexpr
#  else
#    define Q_DECL_CONSTEXPR
#  endif
#endif

#if !defined(Q_DECL_OVERRIDE) && !defined(Q_DECL_FINAL) && !defined(Q_DECL_FINAL_CLASS)
#  ifdef COMPILER_EXPLICIT_OVERRIDES
#    define Q_DECL_OVERRIDE override
#    define Q_DECL_FINAL final
#    ifdef  COMPILER_DECLTYPE
#      define Q_DECL_FINAL_CLASS final
#    else
#      define Q_DECL_FINAL_CLASS
#    endif
#  else
#    define Q_DECL_OVERRIDE
#    define Q_DECL_FINAL
#    define Q_DECL_FINAL_CLASS
#  endif
#endif

#if !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X)
#ifdef COMPILER_STATIC_ASSERT
#define Q_STATIC_ASSERT(Condition) static_assert(static_cast<bool>(Condition), #Condition)
#define Q_STATIC_ASSERT_X(Condition, Message) static_assert(static_cast<bool>(Condition), Message)
#else
// Intentionally undefined
template <bool Test> class QStaticAssertFailure;
template <> class QStaticAssertFailure<true> {};

#define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B)
#define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B
#define Q_STATIC_ASSERT(Condition) \
    enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) = sizeof(QStaticAssertFailure<!!(Condition)>)}
#define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition)
#endif // COMPILER_STATIC_ASSERT
#endif // !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X)

#if defined(Q_OS_WIN)
#  if defined(KEEPASSX_BUILDING_CORE)
#    define KEEPASSX_EXPORT Q_DECL_EXPORT
#  else
#    define KEEPASSX_EXPORT Q_DECL_IMPORT
#  endif
#else
#  define KEEPASSX_EXPORT Q_DECL_EXPORT
#endif

#ifndef QUINT32_MAX
#define QUINT32_MAX 4294967295U
#endif

#endif // KEEPASSX_GLOBAL_H