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

系统编程

开发平台:

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 QGLOBAL_H
  38. #define QGLOBAL_H
  39. #include <stddef.h>
  40. #define QT_VERSION_STR "4.4.3"
  41. /*
  42.    QT_VERSION is (major << 16) + (minor << 8) + patch.
  43. */
  44. #define QT_VERSION 0x040403
  45. /*
  46.    can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
  47. */
  48. #define QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
  49. #define QT_PACKAGEDATE_STR "2008-09-27"
  50. #define QT_PACKAGE_TAG "gc9953de622c6a0f655322e0d9f5bd6dc2803b470"
  51. #if !defined(QT_BUILD_MOC)
  52. #include <QtCore/qconfig.h>
  53. #endif
  54. #ifdef __cplusplus
  55. #ifndef QT_NAMESPACE /* user namespace */
  56. # define QT_PREPEND_NAMESPACE(name) ::name
  57. # define QT_USE_NAMESPACE
  58. # define QT_BEGIN_NAMESPACE
  59. # define QT_END_NAMESPACE
  60. # define QT_BEGIN_INCLUDE_NAMESPACE
  61. # define QT_END_INCLUDE_NAMESPACE
  62. # define QT_BEGIN_MOC_NAMESPACE
  63. # define QT_END_MOC_NAMESPACE
  64. # define QT_FORWARD_DECLARE_CLASS(name) class name;
  65. # define QT_MANGLE_NAMESPACE(name) name
  66. #else /* user namespace */
  67. # define QT_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name
  68. # define QT_USE_NAMESPACE using namespace ::QT_NAMESPACE;
  69. # define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {
  70. # define QT_END_NAMESPACE }
  71. # define QT_BEGIN_INCLUDE_NAMESPACE }
  72. # define QT_END_INCLUDE_NAMESPACE namespace QT_NAMESPACE {
  73. # define QT_BEGIN_MOC_NAMESPACE QT_USE_NAMESPACE
  74. # define QT_END_MOC_NAMESPACE
  75. # define QT_FORWARD_DECLARE_CLASS(name) 
  76.     QT_BEGIN_NAMESPACE class name; QT_END_NAMESPACE 
  77.     using QT_PREPEND_NAMESPACE(name);
  78. # define QT_MANGLE_NAMESPACE0(x) x
  79. # define QT_MANGLE_NAMESPACE1(a, b) a##_##b
  80. # define QT_MANGLE_NAMESPACE2(a, b) QT_MANGLE_NAMESPACE1(a,b)
  81. # define QT_MANGLE_NAMESPACE(name) QT_MANGLE_NAMESPACE2( 
  82.         QT_MANGLE_NAMESPACE0(name), QT_MANGLE_NAMESPACE0(QT_NAMESPACE))
  83. namespace QT_NAMESPACE {}
  84. # ifndef QT_BOOTSTRAPPED
  85. # ifndef QT_NO_USING_NAMESPACE
  86.    /*
  87.     This expands to a "using QT_NAMESPACE" also in _header files_.
  88.     It is the only way the feature can be used without too much
  89.     pain, but if people _really_ do not want it they can add
  90.     DEFINES += QT_NO_USING_NAMESPACE to theur .pro files.
  91.     */
  92.    QT_USE_NAMESPACE
  93. # endif
  94. # endif
  95. #endif /* user namespace */
  96. #else /* __cplusplus */
  97. # define QT_BEGIN_NAMESPACE
  98. # define QT_END_NAMESPACE
  99. # define QT_USE_NAMESPACE
  100. # define QT_BEGIN_INCLUDE_NAMESPACE
  101. # define QT_END_INCLUDE_NAMESPACE
  102. #endif /* __cplusplus */
  103. #if defined(Q_OS_MAC) && !defined(Q_CC_INTEL)
  104. #define QT_BEGIN_HEADER extern "C++" {
  105. #define QT_END_HEADER }
  106. #define QT_BEGIN_INCLUDE_HEADER }
  107. #define QT_END_INCLUDE_HEADER extern "C++" {
  108. #else
  109. #define QT_BEGIN_HEADER
  110. #define QT_END_HEADER
  111. #define QT_BEGIN_INCLUDE_HEADER
  112. #define QT_END_INCLUDE_HEADER extern "C++"
  113. #endif
  114. /*
  115.    The operating system, must be one of: (Q_OS_x)
  116.      DARWIN   - Darwin OS (synonym for Q_OS_MAC)
  117.      MSDOS    - MS-DOS and Windows
  118.      OS2      - OS/2
  119.      OS2EMX   - XFree86 on OS/2 (not PM)
  120.      WIN32    - Win32 (Windows 95/98/ME and Windows NT/2000/XP)
  121.      WINCE    - WinCE (Windows CE 5.0)
  122.      CYGWIN   - Cygwin
  123.      SOLARIS  - Sun Solaris
  124.      HPUX     - HP-UX
  125.      ULTRIX   - DEC Ultrix
  126.      LINUX    - Linux
  127.      FREEBSD  - FreeBSD
  128.      NETBSD   - NetBSD
  129.      OPENBSD  - OpenBSD
  130.      BSDI     - BSD/OS
  131.      IRIX     - SGI Irix
  132.      OSF      - HP Tru64 UNIX
  133.      SCO      - SCO OpenServer 5
  134.      UNIXWARE - UnixWare 7, Open UNIX 8
  135.      AIX      - AIX
  136.      HURD     - GNU Hurd
  137.      DGUX     - DG/UX
  138.      RELIANT  - Reliant UNIX
  139.      DYNIX    - DYNIX/ptx
  140.      QNX      - QNX
  141.      QNX6     - QNX RTP 6.1
  142.      LYNX     - LynxOS
  143.      BSD4     - Any BSD 4.4 system
  144.      UNIX     - Any UNIX BSD/SYSV system
  145. */
  146. #if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
  147. #  define Q_OS_DARWIN
  148. #  define Q_OS_BSD4
  149. #  ifdef __LP64__
  150. #    define Q_OS_DARWIN64
  151. #  else
  152. #    define Q_OS_DARWIN32
  153. #  endif
  154. #elif defined(__CYGWIN__)
  155. #  define Q_OS_CYGWIN
  156. #elif defined(MSDOS) || defined(_MSDOS)
  157. #  define Q_OS_MSDOS
  158. #elif defined(__OS2__)
  159. #  if defined(__EMX__)
  160. #    define Q_OS_OS2EMX
  161. #  else
  162. #    define Q_OS_OS2
  163. #  endif
  164. #elif !defined(SAG_COM) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))
  165. #  define Q_OS_WIN32
  166. #  define Q_OS_WIN64
  167. #elif !defined(SAG_COM) && (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
  168. #  if defined(WINCE) || defined(_WIN32_WCE)
  169. #    define Q_OS_WINCE
  170. #  else
  171. #    define Q_OS_WIN32
  172. #  endif
  173. #elif defined(__MWERKS__) && defined(__INTEL__)
  174. #  define Q_OS_WIN32
  175. #elif defined(__sun) || defined(sun)
  176. #  define Q_OS_SOLARIS
  177. #elif defined(hpux) || defined(__hpux)
  178. #  define Q_OS_HPUX
  179. #elif defined(__ultrix) || defined(ultrix)
  180. #  define Q_OS_ULTRIX
  181. #elif defined(sinix)
  182. #  define Q_OS_RELIANT
  183. #elif defined(__linux__) || defined(__linux)
  184. #  define Q_OS_LINUX
  185. #elif defined(__FreeBSD__) || defined(__DragonFly__)
  186. #  define Q_OS_FREEBSD
  187. #  define Q_OS_BSD4
  188. #elif defined(__NetBSD__)
  189. #  define Q_OS_NETBSD
  190. #  define Q_OS_BSD4
  191. #elif defined(__OpenBSD__)
  192. #  define Q_OS_OPENBSD
  193. #  define Q_OS_BSD4
  194. #elif defined(__bsdi__)
  195. #  define Q_OS_BSDI
  196. #  define Q_OS_BSD4
  197. #elif defined(__sgi)
  198. #  define Q_OS_IRIX
  199. #elif defined(__osf__)
  200. #  define Q_OS_OSF
  201. #elif defined(_AIX)
  202. #  define Q_OS_AIX
  203. #elif defined(__Lynx__)
  204. #  define Q_OS_LYNX
  205. #elif defined(__GNU__)
  206. #  define Q_OS_HURD
  207. #elif defined(__DGUX__)
  208. #  define Q_OS_DGUX
  209. #elif defined(__QNXNTO__)
  210. #  define Q_OS_QNX6
  211. #elif defined(__QNX__)
  212. #  define Q_OS_QNX
  213. #elif defined(_SEQUENT_)
  214. #  define Q_OS_DYNIX
  215. #elif defined(_SCO_DS) /* SCO OpenServer 5 + GCC */
  216. #  define Q_OS_SCO
  217. #elif defined(__USLC__) /* all SCO platforms + UDK or OUDK */
  218. #  define Q_OS_UNIXWARE
  219. #elif defined(__svr4__) && defined(i386) /* Open UNIX 8 + GCC */
  220. #  define Q_OS_UNIXWARE
  221. #elif defined(__INTEGRITY)
  222. #  define Q_OS_INTEGRITY
  223. #elif defined(__MAKEDEPEND__)
  224. #else
  225. #  error "Qt has not been ported to this OS - talk to qt-bugs@trolltech.com"
  226. #endif
  227. #if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) || defined(Q_OS_WINCE)
  228. #  define Q_OS_WIN
  229. #endif
  230. #if defined(Q_OS_DARWIN)
  231. #  define Q_OS_MAC /* Q_OS_MAC is mostly for compatibility, but also more clear */
  232. #  define Q_OS_MACX /* Q_OS_MACX is only for compatibility.*/
  233. #  if defined(Q_OS_DARWIN64)
  234. #     define Q_OS_MAC64
  235. #  elif defined(Q_OS_DARWIN32)
  236. #     define Q_OS_MAC32
  237. #  endif
  238. #endif
  239. #if defined(Q_OS_MSDOS) || defined(Q_OS_OS2) || defined(Q_OS_WIN)
  240. #  undef Q_OS_UNIX
  241. #elif !defined(Q_OS_UNIX)
  242. #  define Q_OS_UNIX
  243. #endif
  244. #if defined(Q_OS_DARWIN) && !defined(QT_LARGEFILE_SUPPORT)
  245. #  define QT_LARGEFILE_SUPPORT 64
  246. #endif
  247. #ifdef Q_OS_DARWIN
  248. #  ifdef MAC_OS_X_VERSION_MIN_REQUIRED
  249. #    undef MAC_OS_X_VERSION_MIN_REQUIRED
  250. #  endif
  251. #  define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_3
  252. #  include <AvailabilityMacros.h>
  253. #  if !defined(MAC_OS_X_VERSION_10_3)
  254. #     define MAC_OS_X_VERSION_10_3 MAC_OS_X_VERSION_10_2 + 1
  255. #  endif
  256. #  if !defined(MAC_OS_X_VERSION_10_4)
  257. #       define MAC_OS_X_VERSION_10_4 MAC_OS_X_VERSION_10_3 + 1
  258. #  endif
  259. #  if !defined(MAC_OS_X_VERSION_10_5)
  260. #       define MAC_OS_X_VERSION_10_5 MAC_OS_X_VERSION_10_4 + 1
  261. #  endif
  262. #  if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5)
  263. #    error "This version of Mac OS X is unsupported"
  264. #  endif
  265. #endif
  266. /*
  267.    The compiler, must be one of: (Q_CC_x)
  268.      SYM      - Digital Mars C/C++ (used to be Symantec C++)
  269.      MWERKS   - Metrowerks CodeWarrior
  270.      MSVC     - Microsoft Visual C/C++, Intel C++ for Windows
  271.      BOR      - Borland/Turbo C++
  272.      WAT      - Watcom C++
  273.      GNU      - GNU C++
  274.      COMEAU   - Comeau C++
  275.      EDG      - Edison Design Group C++
  276.      OC       - CenterLine C++
  277.      SUN      - Forte Developer, or Sun Studio C++
  278.      MIPS     - MIPSpro C++
  279.      DEC      - DEC C++
  280.      HPACC    - HP aC++
  281.      USLC     - SCO OUDK and UDK
  282.      CDS      - Reliant C++
  283.      KAI      - KAI C++
  284.      INTEL    - Intel C++ for Linux, Intel C++ for Windows
  285.      HIGHC    - MetaWare High C/C++
  286.      PGI      - Portland Group C++
  287.      GHS      - Green Hills Optimizing C++ Compilers
  288.    Should be sorted most to least authoritative.
  289. */
  290. #if defined(__ghs)
  291. #  define Q_OUTOFLINE_TEMPLATE inline
  292. #endif
  293. /* Symantec C++ is now Digital Mars */
  294. #if defined(__DMC__) || defined(__SC__)
  295. #  define Q_CC_SYM
  296. /* "explicit" semantics implemented in 8.1e but keyword recognized since 7.5 */
  297. #  if defined(__SC__) && __SC__ < 0x750
  298. #    define Q_NO_EXPLICIT_KEYWORD
  299. #  endif
  300. #  define Q_NO_USING_KEYWORD
  301. #elif defined(__MWERKS__)
  302. #  define Q_CC_MWERKS
  303. /* "explicit" recognized since 4.0d1 */
  304. #elif defined(_MSC_VER)
  305. #  define Q_CC_MSVC
  306. /* proper support of bool for _MSC_VER >= 1100 */
  307. #  define Q_CANNOT_DELETE_CONSTANT
  308. #  define Q_OUTOFLINE_TEMPLATE inline
  309. #  define QT_NO_PARTIAL_TEMPLATE_SPECIALIZATION
  310. /* Visual C++.Net issues for _MSC_VER >= 1300 */
  311. #  if _MSC_VER >= 1300
  312. #    define Q_CC_MSVC_NET
  313. #    if _MSC_VER < 1310 || (defined(Q_OS_WIN64) && defined(_M_IA64))
  314. #      define Q_TYPENAME
  315. #    else
  316. #      undef QT_NO_PARTIAL_TEMPLATE_SPECIALIZATION
  317. #    endif
  318. #  else
  319. #    define Q_NO_USING_KEYWORD
  320. #    define QT_NO_MEMBER_TEMPLATES
  321. #  endif
  322. #  if _MSC_VER < 1310
  323. #     define QT_NO_QOBJECT_CHECK
  324. #     define Q_TYPENAME
  325. #     define QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
  326. #  endif
  327. /* Intel C++ disguising as Visual C++: the `using' keyword avoids warnings */
  328. #  if defined(__INTEL_COMPILER)
  329. #    define Q_CC_INTEL
  330. #  endif
  331. /* x64 does not support mmx intrinsics on windows */
  332. #  if (defined(Q_OS_WIN64) && defined(_M_X64))
  333. #    undef QT_HAVE_SSE
  334. #    undef QT_HAVE_SSE2
  335. #    undef QT_HAVE_MMX
  336. #    undef QT_HAVE_3DNOW
  337. #  endif
  338. #elif defined(__BORLANDC__) || defined(__TURBOC__)
  339. #  define Q_CC_BOR
  340. #  define Q_INLINE_TEMPLATE
  341. #  if __BORLANDC__ < 0x502
  342. #    define Q_NO_BOOL_TYPE
  343. #    define Q_NO_EXPLICIT_KEYWORD
  344. #  endif
  345. #  define Q_NO_USING_KEYWORD
  346. #elif defined(__WATCOMC__)
  347. #  define Q_CC_WAT
  348. #  if defined(Q_OS_QNX4)
  349. /* compiler flags */
  350. #    define Q_TYPENAME
  351. #    define Q_NO_BOOL_TYPE
  352. #    define Q_CANNOT_DELETE_CONSTANT
  353. #    define mutable
  354. /* ??? */
  355. #    define Q_BROKEN_TEMPLATE_SPECIALIZATION
  356. /* no template classes in QVariant */
  357. #    define QT_NO_TEMPLATE_VARIANT
  358. /* Wcc does not fill in functions needed by valuelists, maps, and
  359.    valuestacks implicitly */
  360. #    define Q_FULL_TEMPLATE_INSTANTIATION
  361. /* can we just compare the structures? */
  362. #    define Q_FULL_TEMPLATE_INSTANTIATION_MEMCMP
  363. /* these are not useful to our customers */
  364. #    define QT_NO_QWS_MULTIPROCESS
  365. #    define QT_NO_QWS_CURSOR
  366. #  endif
  367. #elif defined(__GNUC__)
  368. #  define Q_CC_GNU
  369. #  define Q_C_CALLBACKS
  370. #  if defined(__MINGW32__)
  371. #    define Q_CC_MINGW
  372. #  endif
  373. #  if defined(__INTEL_COMPILER)
  374. /* Intel C++ also masquerades as GCC 3.2.0 */
  375. #    define Q_CC_INTEL
  376. #  endif
  377. #  ifdef __APPLE__
  378. #    define Q_NO_DEPRECATED_CONSTRUCTORS
  379. #  endif
  380. #  if __GNUC__ == 2 && __GNUC_MINOR__ <= 7
  381. #    define Q_FULL_TEMPLATE_INSTANTIATION
  382. #  endif
  383. /* GCC 2.95 knows "using" but does not support it correctly */
  384. #  if __GNUC__ == 2 && __GNUC_MINOR__ <= 95
  385. #    define Q_NO_USING_KEYWORD
  386. #    define QT_NO_STL_WCHAR
  387. #  endif
  388. /* GCC 3.1 and GCC 3.2 wrongly define _SB_CTYPE_MACROS on HP-UX */
  389. #  if defined(Q_OS_HPUX) && __GNUC__ == 3 && __GNUC_MINOR__ >= 1
  390. #    define Q_WRONG_SB_CTYPE_MACROS
  391. #  endif
  392. /* Apple's GCC 3.1 chokes on our streaming qDebug() */
  393. #  if defined(Q_OS_DARWIN) && __GNUC__ == 3 && (__GNUC_MINOR__ >= 1 && __GNUC_MINOR__ < 3)
  394. #    define Q_BROKEN_DEBUG_STREAM
  395. #  endif
  396. #  if (defined(Q_CC_GNU) || defined(Q_CC_INTEL)) && !defined(QT_MOC_CPP)
  397. #    define Q_PACKED __attribute__ ((__packed__))
  398. #    define Q_NO_PACKED_REFERENCE
  399. #  endif
  400. /* IBM compiler versions are a bit messy. There are actually two products:
  401.    the C product, and the C++ product. The C++ compiler is always packaged
  402.    with the latest version of the C compiler. Version numbers do not always
  403.    match. This little table (I'm not sure it's accurate) should be helpful:
  404.    C++ product                C product
  405.    C Set 3.1                  C Compiler 3.0
  406.    ...                        ...
  407.    C++ Compiler 3.6.6         C Compiler 4.3
  408.    ...                        ...
  409.    Visual Age C++ 4.0         ...
  410.    ...                        ...
  411.    Visual Age C++ 5.0         C Compiler 5.0
  412.    ...                        ...
  413.    Visual Age C++ 6.0         C Compiler 6.0
  414.    Now:
  415.    __xlC__    is the version of the C compiler in hexadecimal notation
  416.               is only an approximation of the C++ compiler version
  417.    __IBMCPP__ is the version of the C++ compiler in decimal notation
  418.               but it is not defined on older compilers like C Set 3.1 */
  419. #elif defined(__xlC__)
  420. #  define Q_CC_XLC
  421. #  define Q_FULL_TEMPLATE_INSTANTIATION
  422. #  if __xlC__ < 0x400
  423. #    define Q_NO_BOOL_TYPE
  424. #    define Q_NO_EXPLICIT_KEYWORD
  425. #    define Q_NO_USING_KEYWORD
  426. #    define Q_TYPENAME
  427. #    define Q_OUTOFLINE_TEMPLATE inline
  428. #    define Q_BROKEN_TEMPLATE_SPECIALIZATION
  429. #    define Q_CANNOT_DELETE_CONSTANT
  430. #  endif
  431. /* Older versions of DEC C++ do not define __EDG__ or __EDG - observed
  432.    on DEC C++ V5.5-004. New versions do define  __EDG__ - observed on
  433.    Compaq C++ V6.3-002.
  434.    This compiler is different enough from other EDG compilers to handle
  435.    it separately anyway. */
  436. #elif defined(__DECCXX) || defined(__DECC)
  437. #  define Q_CC_DEC
  438. /* Compaq C++ V6 compilers are EDG-based but I'm not sure about older
  439.    DEC C++ V5 compilers. */
  440. #  if defined(__EDG__)
  441. #    define Q_CC_EDG
  442. #  endif
  443. /* Compaq have disabled EDG's _BOOL macro and use _BOOL_EXISTS instead
  444.    - observed on Compaq C++ V6.3-002.
  445.    In any case versions prior to Compaq C++ V6.0-005 do not have bool. */
  446. #  if !defined(_BOOL_EXISTS)
  447. #    define Q_NO_BOOL_TYPE
  448. #  endif
  449. /* Spurious (?) error messages observed on Compaq C++ V6.5-014. */
  450. #  define Q_NO_USING_KEYWORD
  451. /* Apply to all versions prior to Compaq C++ V6.0-000 - observed on
  452.    DEC C++ V5.5-004. */
  453. #  if __DECCXX_VER < 60060000
  454. #    define Q_TYPENAME
  455. #    define Q_BROKEN_TEMPLATE_SPECIALIZATION
  456. #    define Q_CANNOT_DELETE_CONSTANT
  457. #  endif
  458. /* avoid undefined symbol problems with out-of-line template members */
  459. #  define Q_OUTOFLINE_TEMPLATE inline
  460. /* The Portland Group C++ compiler is based on EDG and does define __EDG__
  461.    but the C compiler does not */
  462. #elif defined(__PGI)
  463. #  define Q_CC_PGI
  464. #  if defined(__EDG__)
  465. #    define Q_CC_EDG
  466. #  endif
  467. /* Compilers with EDG front end are similar. To detect them we test:
  468.    __EDG documented by SGI, observed on MIPSpro 7.3.1.1 and KAI C++ 4.0b
  469.    __EDG__ documented in EDG online docs, observed on Compaq C++ V6.3-002
  470.    and PGI C++ 5.2-4 */
  471. #elif defined(__EDG) || defined(__EDG__)
  472. #  define Q_CC_EDG
  473. /* From the EDG documentation (does not seem to apply to Compaq C++):
  474.    _BOOL
  475.         Defined in C++ mode when bool is a keyword. The name of this
  476.         predefined macro is specified by a configuration flag. _BOOL
  477.         is the default.
  478.    __BOOL_DEFINED
  479.         Defined in Microsoft C++ mode when bool is a keyword. */
  480. #  if !defined(_BOOL) && !defined(__BOOL_DEFINED)
  481. #    define Q_NO_BOOL_TYPE
  482. #  endif
  483. /* The Comeau compiler is based on EDG and does define __EDG__ */
  484. #  if defined(__COMO__)
  485. #    define Q_CC_COMEAU
  486. #    define Q_C_CALLBACKS
  487. /* The `using' keyword was introduced to avoid KAI C++ warnings
  488.    but it's now causing KAI C++ errors instead. The standard is
  489.    unclear about the use of this keyword, and in practice every
  490.    compiler is using its own set of rules. Forget it. */
  491. #  elif defined(__KCC)
  492. #    define Q_CC_KAI
  493. #    define Q_NO_USING_KEYWORD
  494. /* Using the `using' keyword avoids Intel C++ for Linux warnings */
  495. #  elif defined(__INTEL_COMPILER)
  496. #    define Q_CC_INTEL
  497. /* Uses CFront, make sure to read the manual how to tweak templates. */
  498. #  elif defined(__ghs)
  499. #    define Q_CC_GHS
  500. /* The UnixWare 7 UDK compiler is based on EDG and does define __EDG__ */
  501. #  elif defined(__USLC__) && defined(__SCO_VERSION__)
  502. #    define Q_CC_USLC
  503. /* The latest UDK 7.1.1b does not need this, but previous versions do */
  504. #    if !defined(__SCO_VERSION__) || (__SCO_VERSION__ < 302200010)
  505. #      define Q_OUTOFLINE_TEMPLATE inline
  506. #    endif
  507. #    define Q_NO_USING_KEYWORD /* ### check "using" status */
  508. /* Never tested! */
  509. #  elif defined(CENTERLINE_CLPP) || defined(OBJECTCENTER)
  510. #    define Q_CC_OC
  511. #    define Q_NO_USING_KEYWORD
  512. /* CDS++ defines __EDG__ although this is not documented in the Reliant
  513.    documentation. It also follows conventions like _BOOL and this documented */
  514. #  elif defined(sinix)
  515. #    define Q_CC_CDS
  516. #    define Q_NO_USING_KEYWORD
  517. /* The MIPSpro compiler defines __EDG */
  518. #  elif defined(__sgi)
  519. #    define Q_CC_MIPS
  520. #    define Q_NO_USING_KEYWORD /* ### check "using" status */
  521. #    if defined(_COMPILER_VERSION) && (_COMPILER_VERSION >= 740)
  522. #      define Q_OUTOFLINE_TEMPLATE inline
  523. #      pragma set woff 3624,3625,3649 /* turn off some harmless warnings */
  524. #    endif
  525. #  endif
  526. /* Never tested! */
  527. #elif defined(__HIGHC__)
  528. #  define Q_CC_HIGHC
  529. #elif defined(__SUNPRO_CC) || defined(__SUNPRO_C)
  530. #  define Q_CC_SUN
  531. /* 5.0 compiler or better
  532.     'bool' is enabled by default but can be disabled using -features=nobool
  533.     in which case _BOOL is not defined
  534.         this is the default in 4.2 compatibility mode triggered by -compat=4 */
  535. #  if __SUNPRO_CC >= 0x500
  536. #    if __SUNPRO_CC < 0x570
  537. #      define QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
  538. #    endif
  539. #    if !defined(_BOOL)
  540. #      define Q_NO_BOOL_TYPE
  541. #    endif
  542. #    if defined(__SUNPRO_CC_COMPAT) && (__SUNPRO_CC_COMPAT <= 4)
  543. #      define Q_NO_USING_KEYWORD
  544. #    endif
  545. #    define Q_C_CALLBACKS
  546. /* 4.2 compiler or older */
  547. #  else
  548. #    define Q_NO_BOOL_TYPE
  549. #    define Q_NO_EXPLICIT_KEYWORD
  550. #    define Q_NO_USING_KEYWORD
  551. #  endif
  552. /* CDS++ does not seem to define __EDG__ or __EDG according to Reliant
  553.    documentation but nevertheless uses EDG conventions like _BOOL */
  554. #elif defined(sinix)
  555. #  define Q_CC_EDG
  556. #  define Q_CC_CDS
  557. #  if !defined(_BOOL)
  558. #    define Q_NO_BOOL_TYPE
  559. #  endif
  560. #  define Q_BROKEN_TEMPLATE_SPECIALIZATION
  561. #elif defined(Q_OS_HPUX)
  562. /* __HP_aCC was not defined in first aCC releases */
  563. #  if defined(__HP_aCC) || __cplusplus >= 199707L
  564. #    define Q_CC_HPACC
  565. #    ifdef QT_ARCH_PARISC
  566. #      define QT_NO_TEMPLATE_TEMPLATE_PARAMETERS
  567. #    endif
  568. #  else
  569. #    define Q_CC_HP
  570. #    define Q_NO_BOOL_TYPE
  571. #    define Q_FULL_TEMPLATE_INSTANTIATION
  572. #    define Q_BROKEN_TEMPLATE_SPECIALIZATION
  573. #    define Q_NO_EXPLICIT_KEYWORD
  574. #  endif
  575. #  define Q_NO_USING_KEYWORD /* ### check "using" status */
  576. #else
  577. #  error "Qt has not been tested with this compiler - talk to qt-bugs@trolltech.com"
  578. #endif
  579. #ifndef Q_PACKED
  580. #  define Q_PACKED
  581. #  undef Q_NO_PACKED_REFERENCE
  582. #endif
  583. #ifndef Q_CONSTRUCTOR_FUNCTION
  584. # define Q_CONSTRUCTOR_FUNCTION0(AFUNC) 
  585.    static const int AFUNC ## __init_variable__ = AFUNC();
  586. # define Q_CONSTRUCTOR_FUNCTION(AFUNC) Q_CONSTRUCTOR_FUNCTION0(AFUNC)
  587. #endif
  588. #ifndef Q_DESTRUCTOR_FUNCTION
  589. # define Q_DESTRUCTOR_FUNCTION0(AFUNC) 
  590.     class AFUNC ## __dest_class__ { 
  591.     public: 
  592.        inline AFUNC ## __dest_class__() { } 
  593.        inline ~ AFUNC ## __dest_class__() { AFUNC(); } 
  594.     } AFUNC ## __dest_instance__;
  595. # define Q_DESTRUCTOR_FUNCTION(AFUNC) Q_DESTRUCTOR_FUNCTION0(AFUNC)
  596. #endif
  597. #ifndef Q_REQUIRED_RESULT
  598. #  if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
  599. #    define Q_REQUIRED_RESULT __attribute__ ((warn_unused_result))
  600. #  else
  601. #    define Q_REQUIRED_RESULT
  602. #  endif
  603. #endif
  604. #ifndef Q_COMPILER_MANGLES_RETURN_TYPE
  605. #  if defined(Q_CC_MSVC)
  606. #    define Q_COMPILER_MANGLES_RETURN_TYPE
  607. #  endif
  608. #endif
  609. /*
  610.    The window system, must be one of: (Q_WS_x)
  611.      MACX     - Mac OS X
  612.      MAC9     - Mac OS 9
  613.      QWS      - Qt for Embedded Linux
  614.      WIN32    - Windows
  615.      X11      - X Window System
  616.      PM       - unsupported
  617.      WIN16    - unsupported
  618. */
  619. #if defined(Q_OS_MSDOS)
  620. #  define Q_WS_WIN16
  621. #  error "Qt requires Win32 and does not work with Windows 3.x"
  622. #elif defined(_WIN32_X11_)
  623. #  define Q_WS_X11
  624. #elif defined(Q_OS_WIN32)
  625. #  define Q_WS_WIN32
  626. #  if defined(Q_OS_WIN64)
  627. #    define Q_WS_WIN64
  628. #  endif
  629. #elif defined(Q_OS_WINCE)
  630. #  define Q_WS_WIN32
  631. #elif defined(Q_OS_OS2)
  632. #  define Q_WS_PM
  633. #  error "Qt does not work with OS/2 Presentation Manager or Workplace Shell"
  634. #elif defined(Q_OS_UNIX)
  635. #  if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS)
  636. #    define Q_WS_MAC
  637. #    define Q_WS_MACX
  638. #    if defined(Q_OS_MAC64)
  639. #      define Q_WS_MAC64
  640. #    elif defined(Q_OS_MAC32)
  641. #      define Q_WS_MAC32
  642. #    endif
  643. #  elif !defined(Q_WS_QWS)
  644. #    define Q_WS_X11
  645. #  endif
  646. #endif
  647. #if defined(Q_WS_WIN16) || defined(Q_WS_WIN32)
  648. #  define Q_WS_WIN
  649. #endif
  650. QT_BEGIN_HEADER
  651. QT_BEGIN_NAMESPACE
  652. /*
  653.    Size-dependent types (architechture-dependent byte order)
  654.    Make sure to update QMetaType when changing these typedefs
  655. */
  656. typedef signed char qint8;         /* 8 bit signed */
  657. typedef unsigned char quint8;      /* 8 bit unsigned */
  658. typedef short qint16;              /* 16 bit signed */
  659. typedef unsigned short quint16;    /* 16 bit unsigned */
  660. typedef int qint32;                /* 32 bit signed */
  661. typedef unsigned int quint32;      /* 32 bit unsigned */
  662. #if defined(Q_OS_WIN) && !defined(Q_CC_GNU)
  663. #  define Q_INT64_C(c) c ## i64    /* signed 64 bit constant */
  664. #  define Q_UINT64_C(c) c ## ui64   /* unsigned 64 bit constant */
  665. typedef __int64 qint64;            /* 64 bit signed */
  666. typedef unsigned __int64 quint64;  /* 64 bit unsigned */
  667. #else
  668. #  define Q_INT64_C(c) static_cast<long long>(c ## LL)     /* signed 64 bit constant */
  669. #  define Q_UINT64_C(c) static_cast<unsigned long long>(c ## ULL) /* unsigned 64 bit constant */
  670. typedef long long qint64;           /* 64 bit signed */
  671. typedef unsigned long long quint64; /* 64 bit unsigned */
  672. #endif
  673. typedef qint64 qlonglong;
  674. typedef quint64 qulonglong;
  675. #ifndef QT_POINTER_SIZE
  676. #  if defined(Q_OS_WIN64)
  677. #   define QT_POINTER_SIZE 8
  678. #  elif defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
  679. #   define QT_POINTER_SIZE 4
  680. #  endif
  681. #endif
  682. #define Q_INIT_RESOURCE(name) 
  683.     do { extern int QT_MANGLE_NAMESPACE(qInitResources_ ## name) ();       
  684.         QT_MANGLE_NAMESPACE(qInitResources_ ## name) (); } while (0)
  685. #define Q_CLEANUP_RESOURCE(name) 
  686.     do { extern int QT_MANGLE_NAMESPACE(qCleanupResources_ ## name) ();    
  687.         QT_MANGLE_NAMESPACE(qCleanupResources_ ## name) (); } while (0)
  688. #if defined(__cplusplus)
  689. /*
  690.   quintptr and qptrdiff is guaranteed to be the same size as a pointer, i.e.
  691.       sizeof(void *) == sizeof(quintptr)
  692.       && sizeof(void *) == sizeof(qptrdiff)
  693. */
  694. template <int> class QUintForSize    { private: typedef void    Type; };
  695. template <>    class QUintForSize<4> { public:  typedef quint32 Type; };
  696. template <>    class QUintForSize<8> { public:  typedef quint64 Type; };
  697. template <typename T> class QUintForType : public QUintForSize<sizeof(T)> { };
  698. typedef QUintForType<void *>::Type quintptr;
  699. template <int> class QIntForSize    { private: typedef void   Type; };
  700. template <>    class QIntForSize<4> { public:  typedef qint32 Type; };
  701. template <>    class QIntForSize<8> { public:  typedef qint64 Type; };
  702. template <typename T> class QIntForType : public QIntForSize<sizeof(T)> { };
  703. typedef QIntForType<void *>::Type qptrdiff;
  704. /*
  705.    Useful type definitions for Qt
  706. */
  707. QT_BEGIN_INCLUDE_NAMESPACE
  708. typedef unsigned char uchar;
  709. typedef unsigned short ushort;
  710. typedef unsigned int uint;
  711. typedef unsigned long ulong;
  712. QT_END_INCLUDE_NAMESPACE
  713. #if defined(Q_NO_BOOL_TYPE)
  714. #error "Compiler doesn't support the bool type"
  715. #endif
  716. /*
  717.    Constant bool values
  718. */
  719. #ifndef QT_LSB /* the LSB defines TRUE and FALSE for us */
  720. #  ifndef TRUE
  721. #   define TRUE true
  722. #   define FALSE false
  723. #  endif
  724. #endif
  725. /*
  726.    Proper for-scoping in VC++6 and MIPSpro CC
  727. */
  728. #ifndef QT_NO_KEYWORDS
  729. #  if (defined(Q_CC_MSVC) && !defined(Q_CC_MSVC_NET) && !defined(Q_CC_INTEL)) || defined(Q_CC_MIPS) || (defined(Q_CC_HPACC) && defined(__ia64))
  730. #    define for if(0){}else for
  731. #  endif
  732. #endif
  733. /*
  734.    Workaround for static const members on MSVC++.
  735. */
  736. #if defined(Q_CC_MSVC)
  737. #  define QT_STATIC_CONST static
  738. #  define QT_STATIC_CONST_IMPL
  739. #else
  740. #  define QT_STATIC_CONST static const
  741. #  define QT_STATIC_CONST_IMPL const
  742. #endif
  743. /*
  744.    Warnings and errors when using deprecated methods
  745. */
  746. #if defined(Q_MOC_RUN)
  747. #  define Q_DECL_DEPRECATED Q_DECL_DEPRECATED
  748. #elif defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && (__GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 >= 2))
  749. #  define Q_DECL_DEPRECATED __attribute__ ((__deprecated__))
  750. #elif defined(Q_CC_MSVC) && (_MSC_VER >= 1300)
  751. #  define Q_DECL_DEPRECATED __declspec(deprecated)
  752. #  if defined (Q_CC_INTEL)
  753. #    define Q_DECL_VARIABLE_DEPRECATED
  754. #  else
  755. #  endif
  756. #else
  757. #  define Q_DECL_DEPRECATED
  758. #endif
  759. #ifndef Q_DECL_VARIABLE_DEPRECATED
  760. #  define Q_DECL_VARIABLE_DEPRECATED Q_DECL_DEPRECATED
  761. #endif
  762. #ifndef Q_DECL_CONSTRUCTOR_DEPRECATED
  763. #  if defined(Q_MOC_RUN)
  764. #    define Q_DECL_CONSTRUCTOR_DEPRECATED Q_DECL_CONSTRUCTOR_DEPRECATED
  765. #  elif defined(Q_NO_DEPRECATED_CONSTRUCTORS)
  766. #    define Q_DECL_CONSTRUCTOR_DEPRECATED
  767. #  else
  768. #    define Q_DECL_CONSTRUCTOR_DEPRECATED Q_DECL_DEPRECATED
  769. #  endif
  770. #endif
  771. #if defined(QT_NO_DEPRECATED)
  772. /* disable Qt3 support as well */
  773. #  undef QT3_SUPPORT_WARNINGS
  774. #  undef QT3_SUPPORT
  775. #  undef QT_DEPRECATED
  776. #  undef QT_DEPRECATED_VARIABLE
  777. #  undef QT_DEPRECATED_CONSTRUCTOR
  778. #elif defined(QT_DEPRECATED_WARNINGS)
  779. /* enable Qt3 support warnings as well */
  780. #  undef QT3_SUPPORT_WARNINGS
  781. #  define QT3_SUPPORT_WARNINGS
  782. #  undef QT_DEPRECATED
  783. #  define QT_DEPRECATED Q_DECL_DEPRECATED
  784. #  undef QT_DEPRECATED_VARIABLE
  785. #  define QT_DEPRECATED_VARIABLE Q_DECL_VARIABLE_DEPRECATED
  786. #  undef QT_DEPRECATED_CONSTRUCTOR
  787. #  define QT_DEPRECATED_CONSTRUCTOR explicit Q_DECL_CONSTRUCTOR_DEPRECATED
  788. #else
  789. #  undef QT_DEPRECATED
  790. #  define QT_DEPRECATED
  791. #  undef QT_DEPRECATED_VARIABLE
  792. #  define QT_DEPRECATED_VARIABLE
  793. #  undef QT_DEPRECATED_CONSTRUCTOR
  794. #  define QT_DEPRECATED_CONSTRUCTOR
  795. #endif
  796. #if defined(QT3_SUPPORT_WARNINGS)
  797. #  if !defined(QT_COMPAT_WARNINGS) /* also enable compat */
  798. #    define QT_COMPAT_WARNINGS
  799. #  endif
  800. #  undef QT3_SUPPORT
  801. #  define QT3_SUPPORT Q_DECL_DEPRECATED
  802. #  undef QT3_SUPPORT_VARIABLE
  803. #  define QT3_SUPPORT_VARIABLE Q_DECL_VARIABLE_DEPRECATED
  804. #  undef QT3_SUPPORT_CONSTRUCTOR
  805. #  define QT3_SUPPORT_CONSTRUCTOR explicit Q_DECL_CONSTRUCTOR_DEPRECATED
  806. #elif defined(QT3_SUPPORT) /* define back to nothing */
  807. #  if !defined(QT_COMPAT) /* also enable qt3 support */
  808. #    define QT_COMPAT
  809. #  endif
  810. #  undef QT3_SUPPORT
  811. #  define QT3_SUPPORT
  812. #  undef QT3_SUPPORT_VARIABLE
  813. #  define QT3_SUPPORT_VARIABLE
  814. #  undef QT3_SUPPORT_CONSTRUCTOR
  815. #  define QT3_SUPPORT_CONSTRUCTOR explicit
  816. #endif
  817. /* moc compats (signals/slots) */
  818. #ifndef QT_MOC_COMPAT
  819. #  if defined(QT3_SUPPORT)
  820. #    define QT_MOC_COMPAT QT3_SUPPORT
  821. #  else
  822. #    define QT_MOC_COMPAT
  823. #  endif
  824. #else
  825. #  undef QT_MOC_COMPAT
  826. #  define QT_MOC_COMPAT
  827. #endif
  828. #ifdef QT_ASCII_CAST_WARNINGS
  829. #  define QT_ASCII_CAST_WARN Q_DECL_DEPRECATED
  830. #  if defined(Q_CC_GNU) && __GNUC__ < 4
  831.      /* gcc < 4 doesn't like Q_DECL_DEPRECATED in front of constructors */
  832. #    define QT_ASCII_CAST_WARN_CONSTRUCTOR
  833. #  else
  834. #    define QT_ASCII_CAST_WARN_CONSTRUCTOR Q_DECL_CONSTRUCTOR_DEPRECATED
  835. #  endif
  836. #else
  837. #  define QT_ASCII_CAST_WARN
  838. #  define QT_ASCII_CAST_WARN_CONSTRUCTOR
  839. #endif
  840. #ifdef __i386__
  841. #  if defined(Q_CC_GNU)
  842. #if !defined(Q_CC_INTEL) && ((100*(__GNUC__ - 0) + 10*(__GNUC_MINOR__ - 0) + __GNUC_PATCHLEVEL__) >= 332)
  843. #    define QT_FASTCALL __attribute__((regparm(3)))
  844. #else
  845. #    define QT_FASTCALL
  846. #endif
  847. #  elif defined(Q_CC_MSVC)
  848. #    define QT_FASTCALL __fastcall
  849. #  else
  850. #     define QT_FASTCALL
  851. #  endif
  852. #else
  853. #  define QT_FASTCALL
  854. #endif
  855. typedef int QNoImplicitBoolCast;
  856. #if defined(QT_ARCH_ARM) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_OS_WINCE)))
  857. #define QT_NO_FPU
  858. #endif
  859. #if defined(QT_COORD_TYPE)
  860. typedef QT_COORD_TYPE qreal;
  861. #elif defined(QT_NO_FPU) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE)
  862. typedef float qreal;
  863. #else
  864. typedef double qreal;
  865. #endif
  866. /*
  867.    Utility macros and inline functions
  868. */
  869. template <typename T>
  870. inline T qAbs(const T &t) { return t >= 0 ? t : -t; }
  871. inline int qRound(qreal d)
  872. { return d >= 0.0 ? int(d + 0.5) : int(d - int(d-1) + 0.5) + int(d-1); }
  873. inline qint64 qRound64(qreal d)
  874. { return d >= 0.0 ? qint64(d + 0.5) : qint64(d - qint64(d-1) + 0.5) + qint64(d-1); }
  875. template <typename T>
  876. inline const T &qMin(const T &a, const T &b) { if (a < b) return a; return b; }
  877. template <typename T>
  878. inline const T &qMax(const T &a, const T &b) { if (a < b) return b; return a; }
  879. template <typename T>
  880. inline const T &qBound(const T &min, const T &val, const T &max)
  881. { return qMax(min, qMin(max, val)); }
  882. #ifdef QT3_SUPPORT
  883. typedef qint8 Q_INT8;
  884. typedef quint8 Q_UINT8;
  885. typedef qint16 Q_INT16;
  886. typedef quint16 Q_UINT16;
  887. typedef qint32 Q_INT32;
  888. typedef quint32 Q_UINT32;
  889. typedef qint64 Q_INT64;
  890. typedef quint64 Q_UINT64;
  891. typedef qint64 Q_LLONG;
  892. typedef quint64 Q_ULLONG;
  893. #if defined(Q_OS_WIN64)
  894. typedef __int64 Q_LONG;             /* word up to 64 bit signed */
  895. typedef unsigned __int64 Q_ULONG;   /* word up to 64 bit unsigned */
  896. #else
  897. typedef long Q_LONG;                /* word up to 64 bit signed */
  898. typedef unsigned long Q_ULONG;      /* word up to 64 bit unsigned */
  899. #endif
  900. #  define QABS(a) qAbs(a)
  901. #  define QMAX(a, b) qMax((a), (b))
  902. #  define QMIN(a, b) qMin((a), (b))
  903. #endif
  904. /*
  905.    Data stream functions are provided by many classes (defined in qdatastream.h)
  906. */
  907. class QDataStream;
  908. #ifndef QT_BUILD_KEY
  909. #define QT_BUILD_KEY "unspecified"
  910. #endif
  911. #if defined(Q_WS_MAC)
  912. #  ifndef QMAC_QMENUBAR_NO_EVENT
  913. #    define QMAC_QMENUBAR_NO_EVENT
  914. #  endif
  915. #endif
  916. #if !defined(Q_WS_QWS) && !defined(QT_NO_COP)
  917. #  define QT_NO_COP
  918. #endif
  919. # include <QtCore/qfeatures.h>
  920. #ifndef Q_DECL_EXPORT
  921. #  ifdef Q_OS_WIN
  922. #    define Q_DECL_EXPORT __declspec(dllexport)
  923. #  elif defined(QT_VISIBILITY_AVAILABLE)
  924. #    define Q_DECL_EXPORT __attribute__((visibility("default")))
  925. #  endif
  926. #  ifndef Q_DECL_EXPORT
  927. #    define Q_DECL_EXPORT
  928. #  endif
  929. #endif
  930. #ifndef Q_DECL_IMPORT
  931. #  if defined(Q_OS_WIN)
  932. #    define Q_DECL_IMPORT __declspec(dllimport)
  933. #  else
  934. #    define Q_DECL_IMPORT
  935. #  endif
  936. #endif
  937. /*
  938.    Create Qt DLL if QT_DLL is defined (Windows only)
  939. */
  940. #if defined(Q_OS_WIN)
  941. #  if defined(QT_NODLL)
  942. #    undef QT_MAKEDLL
  943. #    undef QT_DLL
  944. #  elif defined(QT_MAKEDLL)        /* create a Qt DLL library */
  945. #    if defined(QT_DLL)
  946. #      undef QT_DLL
  947. #    endif
  948. #    if defined(QT_BUILD_CORE_LIB)
  949. #      define Q_CORE_EXPORT Q_DECL_EXPORT
  950. #    else
  951. #      define Q_CORE_EXPORT Q_DECL_IMPORT
  952. #    endif
  953. #    if defined(QT_BUILD_GUI_LIB)
  954. #      define Q_GUI_EXPORT Q_DECL_EXPORT
  955. #    else
  956. #      define Q_GUI_EXPORT Q_DECL_IMPORT
  957. #    endif
  958. #    if defined(QT_BUILD_SQL_LIB)
  959. #      define Q_SQL_EXPORT Q_DECL_EXPORT
  960. #    else
  961. #      define Q_SQL_EXPORT Q_DECL_IMPORT
  962. #    endif
  963. #    if defined(QT_BUILD_NETWORK_LIB)
  964. #      define Q_NETWORK_EXPORT Q_DECL_EXPORT
  965. #    else
  966. #      define Q_NETWORK_EXPORT Q_DECL_IMPORT
  967. #    endif
  968. #    if defined(QT_BUILD_SVG_LIB)
  969. #      define Q_SVG_EXPORT Q_DECL_EXPORT
  970. #    else
  971. #      define Q_SVG_EXPORT Q_DECL_IMPORT
  972. #    endif
  973. #    if defined(QT_BUILD_OPENGL_LIB)
  974. #      define Q_OPENGL_EXPORT Q_DECL_EXPORT
  975. #    else
  976. #      define Q_OPENGL_EXPORT Q_DECL_IMPORT
  977. #    endif
  978. #    if defined(QT_BUILD_XML_LIB)
  979. #      define Q_XML_EXPORT Q_DECL_EXPORT
  980. #    else
  981. #      define Q_XML_EXPORT Q_DECL_IMPORT
  982. #    endif
  983. #    if defined(QT_BUILD_XMLPATTERNS_LIB)
  984. #      define Q_XMLPATTERNS_EXPORT Q_DECL_EXPORT
  985. #    else
  986. #      define Q_XMLPATTERNS_EXPORT Q_DECL_IMPORT
  987. #    endif
  988. #    if defined(QT_BUILD_SCRIPT_LIB)
  989. #      define Q_SCRIPT_EXPORT Q_DECL_EXPORT
  990. #    else
  991. #      define Q_SCRIPT_EXPORT Q_DECL_IMPORT
  992. #    endif
  993. #    if defined(QT_BUILD_CANVAS_LIB)
  994. #      define Q_CANVAS_EXPORT Q_DECL_EXPORT
  995. #    else
  996. #      define Q_CANVAS_EXPORT Q_DECL_IMPORT
  997. #    endif
  998. #    if defined(QT_BUILD_COMPAT_LIB)
  999. #      define Q_COMPAT_EXPORT Q_DECL_EXPORT
  1000. #    else
  1001. #      define Q_COMPAT_EXPORT Q_DECL_IMPORT
  1002. #    endif
  1003. #    define Q_TEMPLATEDLL
  1004. #  elif defined(QT_DLL) /* use a Qt DLL library */
  1005. #    define Q_CORE_EXPORT Q_DECL_IMPORT
  1006. #    define Q_GUI_EXPORT Q_DECL_IMPORT
  1007. #    define Q_SQL_EXPORT Q_DECL_IMPORT
  1008. #    define Q_NETWORK_EXPORT Q_DECL_IMPORT
  1009. #    define Q_SVG_EXPORT Q_DECL_IMPORT
  1010. #    define Q_CANVAS_EXPORT Q_DECL_IMPORT
  1011. #    define Q_OPENGL_EXPORT Q_DECL_IMPORT
  1012. #    define Q_XML_EXPORT Q_DECL_IMPORT
  1013. #    define Q_XMLPATTERNS_EXPORT Q_DECL_IMPORT
  1014. #    define Q_SCRIPT_EXPORT Q_DECL_IMPORT
  1015. #    define Q_COMPAT_EXPORT Q_DECL_IMPORT
  1016. #    define Q_TEMPLATEDLL
  1017. #  endif
  1018. #  define Q_NO_DECLARED_NOT_DEFINED
  1019. #else
  1020. #  if defined(Q_OS_LINUX) && defined(Q_CC_BOR)
  1021. #    define Q_TEMPLATEDLL
  1022. #    define Q_NO_DECLARED_NOT_DEFINED
  1023. #  endif
  1024. #  undef QT_MAKEDLL /* ignore these for other platforms */
  1025. #  undef QT_DLL
  1026. #endif
  1027. #if !defined(Q_CORE_EXPORT)
  1028. #  if defined(QT_SHARED)
  1029. #    define Q_CORE_EXPORT Q_DECL_EXPORT
  1030. #    define Q_GUI_EXPORT Q_DECL_EXPORT
  1031. #    define Q_SQL_EXPORT Q_DECL_EXPORT
  1032. #    define Q_NETWORK_EXPORT Q_DECL_EXPORT
  1033. #    define Q_SVG_EXPORT Q_DECL_EXPORT
  1034. #    define Q_OPENGL_EXPORT Q_DECL_EXPORT
  1035. #    define Q_XML_EXPORT Q_DECL_EXPORT
  1036. #    define Q_XMLPATTERNS_EXPORT Q_DECL_EXPORT
  1037. #    define Q_SCRIPT_EXPORT Q_DECL_EXPORT
  1038. #    define Q_COMPAT_EXPORT Q_DECL_EXPORT
  1039. #  else
  1040. #    define Q_CORE_EXPORT
  1041. #    define Q_GUI_EXPORT
  1042. #    define Q_SQL_EXPORT
  1043. #    define Q_NETWORK_EXPORT
  1044. #    define Q_SVG_EXPORT
  1045. #    define Q_OPENGL_EXPORT
  1046. #    define Q_XML_EXPORT
  1047. #    define Q_XMLPATTERNS_EXPORT
  1048. #    define Q_SCRIPT_EXPORT
  1049. #    define Q_COMPAT_EXPORT
  1050. #  endif
  1051. #endif
  1052. // Functions marked as Q_GUI_EXPORT_INLINE were exported and inlined by mistake.
  1053. // Compilers like MinGW complain that the import attribute is ignored.
  1054. #if defined(Q_CC_MINGW)
  1055. #    if defined(QT_BUILD_CORE_LIB)
  1056. #      define Q_CORE_EXPORT_INLINE Q_CORE_EXPORT inline
  1057. #    else
  1058. #      define Q_CORE_EXPORT_INLINE inline
  1059. #    endif
  1060. #    if defined(QT_BUILD_GUI_LIB)
  1061. #      define Q_GUI_EXPORT_INLINE Q_GUI_EXPORT inline
  1062. #    else
  1063. #      define Q_GUI_EXPORT_INLINE inline
  1064. #    endif
  1065. #else
  1066. #    define Q_CORE_EXPORT_INLINE Q_CORE_EXPORT inline
  1067. #    define Q_GUI_EXPORT_INLINE Q_GUI_EXPORT inline
  1068. #endif
  1069. /*
  1070.    No, this is not an evil backdoor. QT_BUILD_INTERNAL just exports more symbols
  1071.    for Trolltech's internal unit tests. If you want slower loading times and more
  1072.    symbols that can vanish from version to version, feel free to define QT_BUILD_INTERNAL.
  1073. */
  1074. #if defined(QT_BUILD_INTERNAL) && defined(Q_OS_WIN) && defined(QT_MAKEDLL)
  1075. #    define Q_AUTOTEST_EXPORT Q_DECL_EXPORT
  1076. #elif defined(QT_BUILD_INTERNAL) && defined(Q_OS_WIN) && defined(QT_DLL)
  1077. #    define Q_AUTOTEST_EXPORT Q_DECL_IMPORT
  1078. #elif defined(QT_BUILD_INTERNAL) && !defined(Q_OS_WIN) && defined(QT_SHARED)
  1079. #    define Q_AUTOTEST_EXPORT Q_DECL_EXPORT
  1080. #else
  1081. #    define Q_AUTOTEST_EXPORT
  1082. #endif
  1083. /*
  1084.    System information
  1085. */
  1086. class QString;
  1087. class Q_CORE_EXPORT QSysInfo {
  1088. public:
  1089.     enum Sizes {
  1090.         WordSize = (sizeof(void *)<<3)
  1091.     };
  1092. #if defined(QT_BUILD_QMAKE)
  1093.     enum Endian {
  1094.         BigEndian,
  1095.         LittleEndian
  1096.     };
  1097.     /* needed to bootstrap qmake */
  1098.     static const int ByteOrder;
  1099. #elif defined(Q_BYTE_ORDER)
  1100.     enum Endian {
  1101.         BigEndian,
  1102.         LittleEndian
  1103. #  ifdef qdoc
  1104.         , ByteOrder = <platform-dependent>
  1105. #  elif Q_BYTE_ORDER == Q_BIG_ENDIAN
  1106.         , ByteOrder = BigEndian
  1107. #  elif Q_BYTE_ORDER == Q_LITTLE_ENDIAN
  1108.         , ByteOrder = LittleEndian
  1109. #  else
  1110. #    error "Undefined byte order"
  1111. #  endif
  1112.     };
  1113. #else
  1114. #  error "Qt not configured correctly, please run configure"
  1115. #endif
  1116. #if defined(Q_WS_WIN) || defined(Q_OS_CYGWIN)
  1117.     enum WinVersion {
  1118.         WV_32s      = 0x0001,
  1119.         WV_95       = 0x0002,
  1120.         WV_98       = 0x0003,
  1121.         WV_Me       = 0x0004,
  1122.         WV_DOS_based= 0x000f,
  1123.         WV_NT       = 0x0010,
  1124.         WV_2000     = 0x0020,
  1125.         WV_XP       = 0x0030,
  1126.         WV_2003     = 0x0040,
  1127.         WV_VISTA    = 0x0080,
  1128.         WV_NT_based = 0x00f0,
  1129.         WV_CE       = 0x0100,
  1130.         WV_CENET    = 0x0200,
  1131.         WV_CE_5     = 0x0300,
  1132.         WV_CE_6     = 0x0400,
  1133.         WV_CE_based = 0x0f00
  1134.     };
  1135.     static const WinVersion WindowsVersion;
  1136.     static WinVersion windowsVersion();
  1137. #endif
  1138. #ifdef Q_OS_MAC
  1139.     enum MacVersion {
  1140.         MV_Unknown = 0x0000,
  1141.         /* version */
  1142.         MV_9 = 0x0001,
  1143.         MV_10_0 = 0x0002,
  1144.         MV_10_1 = 0x0003,
  1145.         MV_10_2 = 0x0004,
  1146.         MV_10_3 = 0x0005,
  1147.         MV_10_4 = 0x0006,
  1148.         MV_10_5 = 0x0007,
  1149.         /* codenames */
  1150.         MV_CHEETAH = MV_10_0,
  1151.         MV_PUMA = MV_10_1,
  1152.         MV_JAGUAR = MV_10_2,
  1153.         MV_PANTHER = MV_10_3,
  1154.         MV_TIGER = MV_10_4,
  1155.         MV_LEOPARD = MV_10_5
  1156.     };
  1157.     static const MacVersion MacintoshVersion;
  1158. #endif
  1159. };
  1160. Q_CORE_EXPORT const char *qVersion();
  1161. Q_CORE_EXPORT bool qSharedBuild();
  1162. #if defined(Q_OS_MAC)
  1163. inline int qMacVersion() { return QSysInfo::MacintoshVersion; }
  1164. #endif
  1165. #ifdef QT3_SUPPORT
  1166. inline QT3_SUPPORT bool qSysInfo(int *wordSize, bool *bigEndian)
  1167. {
  1168.     *wordSize = QSysInfo::WordSize;
  1169.     *bigEndian = (QSysInfo::ByteOrder == QSysInfo::BigEndian);
  1170.     return true;
  1171. }
  1172. #endif
  1173. #if defined(Q_WS_WIN) || defined(Q_OS_CYGWIN)
  1174. #if defined(QT3_SUPPORT)
  1175. inline QT3_SUPPORT bool qt_winUnicode() { return !(QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based); }
  1176. inline QT3_SUPPORT int qWinVersion() { return QSysInfo::WindowsVersion; }
  1177. #endif
  1178. #ifdef Q_OS_WINCE
  1179. #define QT_WA(uni, ansi) uni
  1180. #define QT_WA_INLINE(uni, ansi) (uni)
  1181. #elif defined(UNICODE)
  1182. #define QT_WA(uni, ansi) if (QSysInfo::WindowsVersion) 
  1183.                             if (!(QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based)) { uni } else { ansi } 
  1184.                          else  
  1185.                             if (!(QSysInfo::windowsVersion() & QSysInfo::WV_DOS_based)) { uni } else { ansi }
  1186. #define QT_WA_INLINE(uni, ansi) ((QSysInfo::WindowsVersion) ? (!(QSysInfo::WindowsVersion & QSysInfo::WV_DOS_based) ? uni : ansi) : 
  1187. (!(QSysInfo::windowsVersion() & QSysInfo::WV_DOS_based) ? uni : ansi))
  1188. #else
  1189. #define QT_WA(uni, ansi) ansi
  1190. #define QT_WA_INLINE(uni, ansi) ansi
  1191. #endif
  1192. #endif /* Q_WS_WIN */
  1193. #ifndef Q_OUTOFLINE_TEMPLATE
  1194. #  define Q_OUTOFLINE_TEMPLATE
  1195. #endif
  1196. #ifndef Q_INLINE_TEMPLATE
  1197. #  define Q_INLINE_TEMPLATE inline
  1198. #endif
  1199. #ifndef Q_TYPENAME
  1200. #  define Q_TYPENAME typename
  1201. #endif
  1202. /*
  1203.    Avoid "unused parameter" warnings
  1204. */
  1205. #if defined(Q_CC_INTEL) && !defined(Q_OS_WIN)
  1206. template <typename T>
  1207. inline void qUnused(T &x) { (void)x; }
  1208. #  define Q_UNUSED(x) qUnused(x);
  1209. #else
  1210. #  define Q_UNUSED(x) (void)x;
  1211. #endif
  1212. /*
  1213.    Debugging and error handling
  1214. */
  1215. #if !defined(QT_NO_DEBUG) && !defined(QT_DEBUG)
  1216. #  define QT_DEBUG
  1217. #endif
  1218. #ifndef qPrintable
  1219. #  define qPrintable(string) (string).toLocal8Bit().constData()
  1220. #endif
  1221. Q_CORE_EXPORT void qDebug(const char *, ...) /* print debug message */
  1222. #if defined(Q_CC_GNU) && !defined(__INSURE__)
  1223.     __attribute__ ((format (printf, 1, 2)))
  1224. #endif
  1225. ;
  1226. Q_CORE_EXPORT void qWarning(const char *, ...) /* print warning message */
  1227. #if defined(Q_CC_GNU) && !defined(__INSURE__)
  1228.     __attribute__ ((format (printf, 1, 2)))
  1229. #endif
  1230. ;
  1231. class QString;
  1232. Q_CORE_EXPORT QString qt_error_string(int errorCode = -1);
  1233. Q_CORE_EXPORT void qCritical(const char *, ...) /* print critical message */
  1234. #if defined(Q_CC_GNU) && !defined(__INSURE__)
  1235.     __attribute__ ((format (printf, 1, 2)))
  1236. #endif
  1237. ;
  1238. Q_CORE_EXPORT void qFatal(const char *, ...) /* print fatal message and exit */
  1239. #if defined(Q_CC_GNU) && !defined(__INSURE__)
  1240.     __attribute__ ((format (printf, 1, 2)))
  1241. #endif
  1242. ;
  1243. #ifdef QT3_SUPPORT
  1244. Q_CORE_EXPORT QT3_SUPPORT void qSystemWarning(const char *msg, int code = -1);
  1245. #endif /* QT3_SUPPORT */
  1246. Q_CORE_EXPORT void qErrnoWarning(int code, const char *msg, ...);
  1247. Q_CORE_EXPORT void qErrnoWarning(const char *msg, ...);
  1248. #if (defined(QT_NO_DEBUG_OUTPUT) || defined(QT_NO_TEXTSTREAM)) && !defined(QT_NO_DEBUG_STREAM)
  1249. #define QT_NO_DEBUG_STREAM
  1250. #endif
  1251. /*
  1252.   Forward declarations only.
  1253.   In order to use the qDebug() stream, you must #include<QDebug>
  1254. */
  1255. class QDebug;
  1256. class QNoDebug;
  1257. #ifndef QT_NO_DEBUG_STREAM
  1258. Q_CORE_EXPORT_INLINE QDebug qDebug();
  1259. Q_CORE_EXPORT_INLINE QDebug qWarning();
  1260. Q_CORE_EXPORT_INLINE QDebug qCritical();
  1261. #else
  1262. inline QNoDebug qDebug();
  1263. #endif
  1264. #define QT_NO_QDEBUG_MACRO if(1); else qDebug
  1265. #ifdef QT_NO_DEBUG_OUTPUT
  1266. #  define qDebug QT_NO_QDEBUG_MACRO
  1267. #endif
  1268. #define QT_NO_QWARNING_MACRO if(1); else qWarning
  1269. #ifdef QT_NO_WARNING_OUTPUT
  1270. #  define qWarning QT_NO_QWARNING_MACRO
  1271. #endif
  1272. inline void qt_noop() {}
  1273. Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line);
  1274. #if !defined(Q_ASSERT)
  1275. #  ifndef QT_NO_DEBUG
  1276. #    define Q_ASSERT(cond) ((!(cond)) ? qt_assert(#cond,__FILE__,__LINE__) : qt_noop())
  1277. #  else
  1278. #    define Q_ASSERT(cond) qt_noop()
  1279. #  endif
  1280. #endif
  1281. #if defined(QT_NO_DEBUG) && !defined(QT_PAINT_DEBUG)
  1282. #define QT_NO_PAINT_DEBUG
  1283. #endif
  1284. Q_CORE_EXPORT void qt_assert_x(const char *where, const char *what, const char *file, int line);
  1285. #if !defined(Q_ASSERT_X)
  1286. #  ifndef QT_NO_DEBUG
  1287. #    define Q_ASSERT_X(cond, where, what) ((!(cond)) ? qt_assert_x(where, what,__FILE__,__LINE__) : qt_noop())
  1288. #  else
  1289. #    define Q_ASSERT_X(cond, where, what) qt_noop()
  1290. #  endif
  1291. #endif
  1292. Q_CORE_EXPORT void qt_check_pointer(const char *, int);
  1293. #ifndef QT_NO_DEBUG
  1294. #  define Q_CHECK_PTR(p) do {if(!(p))qt_check_pointer(__FILE__,__LINE__);} while (0)
  1295. #else
  1296. #  define Q_CHECK_PTR(p)
  1297. #endif
  1298. #if (defined(Q_CC_GNU) && !defined(Q_OS_SOLARIS)) || defined(Q_CC_HPACC)
  1299. #  define Q_FUNC_INFO __PRETTY_FUNCTION__
  1300. #elif defined(_MSC_VER)
  1301.     /* MSVC 2002 doesn't have __FUNCSIG__ nor can it handle QT_STRINGIFY. */
  1302. #  if _MSC_VER <= 1300
  1303. #      define Q_FUNC_INFO __FILE__ "(line number unavailable)"
  1304. #  else
  1305. #      define Q_FUNC_INFO __FUNCSIG__
  1306. #  endif
  1307. #else
  1308. #   if defined(Q_OS_SOLARIS) || defined(Q_CC_XLC)
  1309. #      define Q_FUNC_INFO __FILE__ "(line number unavailable)"
  1310. #   else
  1311.         /* These two macros makes it possible to turn the builtin line expander into a
  1312.          * string literal. */
  1313. #       define QT_STRINGIFY2(x) #x
  1314. #       define QT_STRINGIFY(x) QT_STRINGIFY2(x)
  1315. #       define Q_FUNC_INFO __FILE__ ":" QT_STRINGIFY(__LINE__)
  1316. #   endif
  1317.     /* The MIPSpro compiler postpones macro expansion, and therefore macros must be in scope
  1318.      * when being used. */
  1319. #   if !defined(Q_CC_MIPS)
  1320. #       undef QT_STRINGIFY2
  1321. #       undef QT_STRINGIFY
  1322. #   endif
  1323. #endif
  1324. enum QtMsgType { QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg = QtCriticalMsg };
  1325. Q_CORE_EXPORT void qt_message_output(QtMsgType, const char *buf);
  1326. typedef void (*QtMsgHandler)(QtMsgType, const char *);
  1327. Q_CORE_EXPORT QtMsgHandler qInstallMsgHandler(QtMsgHandler);
  1328. #ifdef QT3_SUPPORT
  1329. inline QT3_SUPPORT void qSuppressObsoleteWarnings(bool = true) {}
  1330. inline QT3_SUPPORT void qObsolete(const char *, const char * = 0, const char * = 0) {}
  1331. #endif
  1332. #if defined(QT_NO_THREAD)
  1333. template <typename T>
  1334. class QGlobalStatic
  1335. {
  1336. public:
  1337.     T *pointer;
  1338.     inline QGlobalStatic(T *p) : pointer(p) { }
  1339.     inline ~QGlobalStatic() { pointer = 0; }
  1340. };
  1341. #define Q_GLOBAL_STATIC(TYPE, NAME)                              
  1342.     static TYPE *NAME()                                          
  1343.     {                                                            
  1344.         static TYPE this_##NAME;                                 
  1345.         static QGlobalStatic<TYPE > global_##NAME(&this_##NAME); 
  1346.         return global_##NAME.pointer;                            
  1347.     }
  1348. #define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS)              
  1349.     static TYPE *NAME()                                          
  1350.     {                                                            
  1351.         static TYPE this_##NAME ARGS;                            
  1352.         static QGlobalStatic<TYPE > global_##NAME(&this_##NAME); 
  1353.         return global_##NAME.pointer;                            
  1354.     }
  1355. #define Q_GLOBAL_STATIC_WITH_INITIALIZER(TYPE, NAME, INITIALIZER) 
  1356.     static TYPE *NAME()                                           
  1357.     {                                                             
  1358.         static TYPE this_##NAME;                                  
  1359.         static QGlobalStatic<TYPE > global_##NAME(0);             
  1360.         if (!global_##NAME.pointer) {                             
  1361.             TYPE *x = global_##NAME.pointer = &this_##NAME;       
  1362.             INITIALIZER;                                          
  1363.         }                                                         
  1364.         return global_##NAME.pointer;                             
  1365.     }
  1366. #else
  1367. // forward declaration, since qatomic.h needs qglobal.h
  1368. template <typename T> class QBasicAtomicPointer;
  1369. // POD for Q_GLOBAL_STATIC
  1370. template <typename T>
  1371. class QGlobalStatic
  1372. {
  1373. public:
  1374.     QBasicAtomicPointer<T> pointer;
  1375.     bool destroyed;
  1376. };
  1377. // Created as a function-local static to delete a QGlobalStatic<T>
  1378. template <typename T>
  1379. class QGlobalStaticDeleter
  1380. {
  1381. public:
  1382.     QGlobalStatic<T> &globalStatic;
  1383.     QGlobalStaticDeleter(QGlobalStatic<T> &_globalStatic)
  1384.         : globalStatic(_globalStatic)
  1385.     { }
  1386.     inline ~QGlobalStaticDeleter()
  1387.     {
  1388.         delete globalStatic.pointer;
  1389.         globalStatic.pointer = 0;
  1390.         globalStatic.destroyed = true;
  1391.     }
  1392. };
  1393. #define Q_GLOBAL_STATIC_INIT(TYPE, NAME)                              
  1394.     static QGlobalStatic<TYPE > this_##NAME = { Q_BASIC_ATOMIC_INITIALIZER(0), false }
  1395. #define Q_GLOBAL_STATIC(TYPE, NAME)                                     
  1396.     Q_GLOBAL_STATIC_INIT(TYPE, NAME);                                   
  1397.     static TYPE *NAME()                                                 
  1398.     {                                                                   
  1399.         if (!this_##NAME.pointer && !this_##NAME.destroyed) {           
  1400.             TYPE *x = new TYPE;                                         
  1401.             if (!this_##NAME.pointer.testAndSetOrdered(0, x))           
  1402.                 delete x;                                               
  1403.             else                                                        
  1404.                 static QGlobalStaticDeleter<TYPE > cleanup(this_##NAME); 
  1405.         }                                                               
  1406.         return this_##NAME.pointer;                                     
  1407.     }
  1408. #define Q_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS)                     
  1409.     Q_GLOBAL_STATIC_INIT(TYPE, NAME);                                   
  1410.     static TYPE *NAME()                                                 
  1411.     {                                                                   
  1412.         if (!this_##NAME.pointer && !this_##NAME.destroyed) {           
  1413.             TYPE *x = new TYPE ARGS;                                    
  1414.             if (!this_##NAME.pointer.testAndSetOrdered(0, x))           
  1415.                 delete x;                                               
  1416.             else                                                        
  1417.                 static QGlobalStaticDeleter<TYPE > cleanup(this_##NAME); 
  1418.         }                                                               
  1419.         return this_##NAME.pointer;                                     
  1420.     }
  1421. #define Q_GLOBAL_STATIC_WITH_INITIALIZER(TYPE, NAME, INITIALIZER)       
  1422.     Q_GLOBAL_STATIC_INIT(TYPE, NAME);                                   
  1423.     static TYPE *NAME()                                                 
  1424.     {                                                                   
  1425.         if (!this_##NAME.pointer && !this_##NAME.destroyed) {           
  1426.             TYPE *x = new TYPE;                                         
  1427.             INITIALIZER;                                                
  1428.             if (!this_##NAME.pointer.testAndSetOrdered(0, x))           
  1429.                 delete x;                                               
  1430.             else                                                        
  1431.                 static QGlobalStaticDeleter<TYPE > cleanup(this_##NAME); 
  1432.         }                                                               
  1433.         return this_##NAME.pointer;                                     
  1434.     }
  1435. #endif
  1436. class QBool
  1437. {
  1438.     bool b;
  1439. public:
  1440.     inline explicit QBool(bool B) : b(B) {}
  1441.     inline operator const void *() const
  1442.     { return b ? static_cast<const void *>(this) : static_cast<const void *>(0); }
  1443. };
  1444. inline bool operator==(QBool b1, bool b2) { return !b1 == !b2; }
  1445. inline bool operator==(bool b1, QBool b2) { return !b1 == !b2; }
  1446. inline bool operator==(QBool b1, QBool b2) { return !b1 == !b2; }
  1447. inline bool operator!=(QBool b1, bool b2) { return !b1 != !b2; }
  1448. inline bool operator!=(bool b1, QBool b2) { return !b1 != !b2; }
  1449. inline bool operator!=(QBool b1, QBool b2) { return !b1 != !b2; }
  1450. static inline bool qFuzzyCompare(double p1, double p2)
  1451. {
  1452.     return (qAbs(p1 - p2) <= 0.000000000001 * qMin(qAbs(p1), qAbs(p2)));
  1453. }
  1454. static inline bool qFuzzyCompare(float p1, float p2)
  1455. {
  1456.     return (qAbs(p1 - p2) <= 0.00001f * qMin(qAbs(p1), qAbs(p2)));
  1457. }
  1458. /*
  1459.    This function tests a double for a null value. It doesn't
  1460.    check whether the actual value is 0 or close to 0, but whether
  1461.    it is binary 0.
  1462. */
  1463. static inline bool qIsNull(double d)
  1464. {
  1465.     union U {
  1466.         double d;
  1467.         quint64 u;
  1468.     };
  1469.     U val;
  1470.     val.d = d;
  1471.     return val.u == quint64(0);
  1472. }
  1473. /*
  1474.    This function tests a float for a null value. It doesn't
  1475.    check whether the actual value is 0 or close to 0, but whether
  1476.    it is binary 0.
  1477. */
  1478. static inline bool qIsNull(float f)
  1479. {
  1480.     union U {
  1481.         float f;
  1482.         quint32 u;
  1483.     };
  1484.     U val;
  1485.     val.f = f;
  1486.     return val.u == 0u;
  1487. }
  1488. /*
  1489.    Compilers which follow outdated template instantiation rules
  1490.    require a class to have a comparison operator to exist when
  1491.    a QList of this type is instantiated. It's not actually
  1492.    used in the list, though. Hence the dummy implementation.
  1493.    Just in case other code relies on it we better trigger a warning
  1494.    mandating a real implementation.
  1495. */
  1496. #ifdef Q_FULL_TEMPLATE_INSTANTIATION
  1497. #  define Q_DUMMY_COMPARISON_OPERATOR(C) 
  1498.     bool operator==(const C&) const { 
  1499.         qWarning(#C"::operator==(const "#C"&) was called"); 
  1500.         return false; 
  1501.     }
  1502. #else
  1503. #  define Q_DUMMY_COMPARISON_OPERATOR(C)
  1504. #endif
  1505. /*
  1506.    QTypeInfo     - type trait functionality
  1507.    qIsDetached   - data sharing functionality
  1508. */
  1509. #ifndef QT_NO_PARTIAL_TEMPLATE_SPECIALIZATION
  1510. /*
  1511.   The catch-all template.
  1512. */
  1513. template <typename T> inline bool qIsDetached(T &) { return true; }
  1514. template <typename T>
  1515. class QTypeInfo
  1516. {
  1517. public:
  1518.     enum {
  1519.         isPointer = false,
  1520.         isComplex = true,
  1521.         isStatic = true,
  1522.         isLarge = (sizeof(T)>sizeof(void*)),
  1523.         isDummy = false
  1524.     };
  1525. };
  1526. template <typename T>
  1527. class QTypeInfo<T*>
  1528. {
  1529. public:
  1530.     enum {
  1531.         isPointer = true,
  1532.         isComplex = false,
  1533.         isStatic = false,
  1534.         isLarge = false,
  1535.         isDummy = false
  1536.     };
  1537. };
  1538. #else
  1539. template <typename T> char QTypeInfoHelper(T*(*)());
  1540. void* QTypeInfoHelper(...);
  1541. template <typename T> inline bool qIsDetached(T &) { return true; }
  1542. template <typename T>
  1543. class QTypeInfo
  1544. {
  1545. public:
  1546.     enum {
  1547.         isPointer = (1 == sizeof(QTypeInfoHelper((T(*)())0))),
  1548.         isComplex = !isPointer,
  1549.         isStatic = !isPointer,
  1550.         isLarge = (sizeof(T)>sizeof(void*)),
  1551.         isDummy = false
  1552.     };
  1553. };
  1554. #endif /* QT_NO_PARTIAL_TEMPLATE_SPECIALIZATION */
  1555. /*
  1556.    Specialize a specific type with:
  1557.      Q_DECLARE_TYPEINFO(type, flags);
  1558.    where 'type' is the name of the type to specialize and 'flags' is
  1559.    logically-OR'ed combination of the flags below.
  1560. */
  1561. enum { /* TYPEINFO flags */
  1562.     Q_COMPLEX_TYPE = 0,
  1563.     Q_PRIMITIVE_TYPE = 0x1,
  1564.     Q_STATIC_TYPE = 0,
  1565.     Q_MOVABLE_TYPE = 0x2,
  1566.     Q_DUMMY_TYPE = 0x4
  1567. };
  1568. #define Q_DECLARE_TYPEINFO(TYPE, FLAGS) 
  1569. template <> 
  1570. class QTypeInfo<TYPE> 
  1571. public: 
  1572.     enum { 
  1573.         isComplex = (((FLAGS) & Q_PRIMITIVE_TYPE) == 0), 
  1574.         isStatic = (((FLAGS) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), 
  1575.         isLarge = (sizeof(TYPE)>sizeof(void*)), 
  1576.         isPointer = false, 
  1577.         isDummy = (((FLAGS) & Q_DUMMY_TYPE) != 0) 
  1578.     }; 
  1579.     static inline const char *name() { return #TYPE; } 
  1580. }
  1581. /*
  1582.    Specialize a shared type with:
  1583.      Q_DECLARE_SHARED(type);
  1584.    where 'type' is the name of the type to specialize.  NOTE: shared
  1585.    types must declare a 'bool isDetached(void) const;' member for this
  1586.    to work.
  1587. */
  1588. #if defined Q_CC_MSVC && _MSC_VER < 1300
  1589. template <typename T>
  1590. inline void qSwap_helper(T &value1, T &value2, T*)
  1591. {
  1592.     T t = value1;
  1593.     value1 = value2;
  1594.     value2 = t;
  1595. }
  1596. #define Q_DECLARE_SHARED(TYPE)                                          
  1597. template <> inline bool qIsDetached<TYPE>(TYPE &t) { return t.isDetached(); } 
  1598. template <> inline void qSwap_helper<TYPE>(TYPE &value1, TYPE &value2, TYPE*) 
  1599.     const TYPE::DataPtr t = value1.data_ptr(); 
  1600.     value1.data_ptr() = value2.data_ptr(); 
  1601.     value2.data_ptr() = t; 
  1602. }
  1603. #else
  1604. #define Q_DECLARE_SHARED(TYPE)                                          
  1605. template <> inline bool qIsDetached<TYPE>(TYPE &t) { return t.isDetached(); } 
  1606. template <typename T> inline void qSwap(T &, T &); 
  1607. template <> inline void qSwap<TYPE>(TYPE &value1, TYPE &value2) 
  1608.     const TYPE::DataPtr t = value1.data_ptr(); 
  1609.     value1.data_ptr() = value2.data_ptr(); 
  1610.     value2.data_ptr() = t; 
  1611. }
  1612. #endif
  1613. /*
  1614.    QTypeInfo primitive specializations
  1615. */
  1616. Q_DECLARE_TYPEINFO(bool, Q_PRIMITIVE_TYPE);
  1617. Q_DECLARE_TYPEINFO(char, Q_PRIMITIVE_TYPE);
  1618. Q_DECLARE_TYPEINFO(signed char, Q_PRIMITIVE_TYPE);
  1619. Q_DECLARE_TYPEINFO(uchar, Q_PRIMITIVE_TYPE);
  1620. Q_DECLARE_TYPEINFO(short, Q_PRIMITIVE_TYPE);
  1621. Q_DECLARE_TYPEINFO(ushort, Q_PRIMITIVE_TYPE);
  1622. Q_DECLARE_TYPEINFO(int, Q_PRIMITIVE_TYPE);
  1623. Q_DECLARE_TYPEINFO(uint, Q_PRIMITIVE_TYPE);
  1624. Q_DECLARE_TYPEINFO(long, Q_PRIMITIVE_TYPE);
  1625. Q_DECLARE_TYPEINFO(ulong, Q_PRIMITIVE_TYPE);
  1626. Q_DECLARE_TYPEINFO(qint64, Q_PRIMITIVE_TYPE);
  1627. Q_DECLARE_TYPEINFO(quint64, Q_PRIMITIVE_TYPE);
  1628. Q_DECLARE_TYPEINFO(float, Q_PRIMITIVE_TYPE);
  1629. Q_DECLARE_TYPEINFO(double, Q_PRIMITIVE_TYPE);
  1630. #ifndef Q_OS_DARWIN
  1631. Q_DECLARE_TYPEINFO(long double, Q_PRIMITIVE_TYPE);
  1632. #endif
  1633. /*
  1634.    These functions make it possible to use standard C++ functions with
  1635.    a similar name from Qt header files (especially template classes).
  1636. */
  1637. Q_CORE_EXPORT void *qMalloc(size_t size);
  1638. Q_CORE_EXPORT void qFree(void *ptr);
  1639. Q_CORE_EXPORT void *qRealloc(void *ptr, size_t size);
  1640. Q_CORE_EXPORT void *qMemCopy(void *dest, const void *src, size_t n);
  1641. Q_CORE_EXPORT void *qMemSet(void *dest, int c, size_t n);
  1642. /*
  1643.    Avoid some particularly useless warnings from some stupid compilers.
  1644.    To get ALL C++ compiler warnings, define QT_CC_WARNINGS or comment out
  1645.    the line "#define QT_NO_WARNINGS".
  1646. */
  1647. #if !defined(QT_CC_WARNINGS)
  1648. #  define QT_NO_WARNINGS
  1649. #endif
  1650. #if defined(QT_NO_WARNINGS)
  1651. #  if defined(Q_CC_MSVC)
  1652. #    pragma warning(disable: 4251) /* class 'A' needs to have dll interface for to be used by clients of class 'B'. */
  1653. #    pragma warning(disable: 4244) /* 'conversion' conversion from 'type1' to 'type2', possible loss of data */
  1654. #    pragma warning(disable: 4275) /* non - DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier' */
  1655. #    pragma warning(disable: 4514) /* unreferenced inline/local function has been removed */
  1656. #    pragma warning(disable: 4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */
  1657. #    pragma warning(disable: 4097) /* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
  1658. #    pragma warning(disable: 4706) /* assignment within conditional expression */
  1659. #    pragma warning(disable: 4786) /* truncating debug info after 255 characters */
  1660. #    pragma warning(disable: 4660) /* template-class specialization 'identifier' is already instantiated */
  1661. #    pragma warning(disable: 4355) /* 'this' : used in base member initializer list */
  1662. #    pragma warning(disable: 4231) /* nonstandard extension used : 'extern' before template explicit instantiation */
  1663. #    pragma warning(disable: 4710) /* function not inlined */
  1664. #    pragma warning(disable: 4530) /* C++ exception handler used, but unwind semantics are not enabled. Specify -GX */
  1665. #    if _MSC_VER < 1300
  1666. #      pragma warning(disable: 4284) /* return type for 'type1::operator ->' is 'type2 *' */
  1667.                                      /* (ie; not a UDT or reference to a UDT.  Will produce errors if applied using infix notation) */
  1668. #    endif
  1669. #  elif defined(Q_CC_BOR)
  1670. #    pragma option -w-inl
  1671. #    pragma option -w-aus
  1672. #    pragma warn -inl
  1673. #    pragma warn -pia
  1674. #    pragma warn -ccc
  1675. #    pragma warn -rch
  1676. #    pragma warn -sig
  1677. #  endif
  1678. #endif
  1679. class Q_CORE_EXPORT QFlag
  1680. {
  1681.     int i;
  1682. public:
  1683.     inline QFlag(int i);
  1684.     inline operator int() const { return i; }
  1685. };
  1686. inline QFlag::QFlag(int ai) : i(ai) {}
  1687. #ifndef Q_NO_TYPESAFE_FLAGS
  1688. template<typename Enum>
  1689. class QFlags
  1690. {
  1691.     typedef void **Zero;
  1692.     int i;
  1693. public:
  1694.     typedef Enum enum_type;
  1695.     inline QFlags(const QFlags &f) : i(f.i) {}
  1696.     inline QFlags(Enum f) : i(f) {}
  1697.     inline QFlags(Zero = 0) : i(0) {}
  1698.     inline QFlags(QFlag f) : i(f) {}
  1699.     inline QFlags &operator=(const QFlags &f) { i = f.i; return *this; }
  1700.     inline QFlags &operator&=(int mask) { i &= mask; return *this; }
  1701.     inline QFlags &operator&=(uint mask) { i &= mask; return *this; }
  1702.     inline QFlags &operator|=(QFlags f) { i |= f.i; return *this; }
  1703.     inline QFlags &operator|=(Enum f) { i |= f; return *this; }
  1704.     inline QFlags &operator^=(QFlags f) { i ^= f.i; return *this; }
  1705.     inline QFlags &operator^=(Enum f) { i ^= f; return *this; }
  1706.     inline operator int() const { return i; }
  1707.     inline QFlags operator|(QFlags f) const { QFlags g; g.i = i | f.i; return g; }
  1708.     inline QFlags operator|(Enum f) const { QFlags g; g.i = i | f; return g; }
  1709.     inline QFlags operator^(QFlags f) const { QFlags g; g.i = i ^ f.i; return g; }
  1710.     inline QFlags operator^(Enum f) const { QFlags g; g.i = i ^ f; return g; }
  1711.     inline QFlags operator&(int mask) const { QFlags g; g.i = i & mask; return g; }
  1712.     inline QFlags operator&(uint mask) const { QFlags g; g.i = i & mask; return g; }
  1713.     inline QFlags operator&(Enum f) const { QFlags g; g.i = i & f; return g; }
  1714.     inline QFlags operator~() const { QFlags g; g.i = ~i; return g; }
  1715.     inline bool operator!() const { return !i; }
  1716.     inline bool testFlag(Enum f) const { return i & f; }
  1717. private:
  1718. #if QT_VERSION >= 0x050000 && !defined(Q_NO_DECLARED_NOT_DEFINED)
  1719.     explicit QFlags(bool);
  1720. #endif
  1721. };
  1722. #define Q_DECLARE_FLAGS(Flags, Enum)
  1723. typedef QFlags<Enum> Flags;
  1724. #define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) 
  1725. inline QFlags<Flags::enum_type> operator|(Flags::enum_type f1, Flags::enum_type f2) 
  1726. { return QFlags<Flags::enum_type>(f1) | f2; } 
  1727. inline QFlags<Flags::enum_type> operator|(Flags::enum_type f1, QFlags<Flags::enum_type> f2) 
  1728. { return f2 | f1; }
  1729. #else /* Q_NO_TYPESAFE_FLAGS */
  1730. #define Q_DECLARE_FLAGS(Flags, Enum)
  1731. typedef uint Flags;
  1732. #define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
  1733. #endif /* Q_NO_TYPESAFE_FLAGS */
  1734. #if defined(Q_CC_GNU) && !defined(Q_CC_INTEL)
  1735. /* make use of typeof-extension */
  1736. template <typename T>
  1737. class QForeachContainer {
  1738. public:
  1739.     inline QForeachContainer(const T& t) : c(t), brk(0), i(c.begin()), e(c.end()) { }
  1740.     const T c;
  1741.     int brk;
  1742.     typename T::const_iterator i, e;
  1743. };
  1744. #define Q_FOREACH(variable, container)                                
  1745. for (QForeachContainer<__typeof__(container)> _container_(container); 
  1746.      !_container_.brk && _container_.i != _container_.e;              
  1747.      __extension__  ({ ++_container_.brk; ++_container_.i; }))                       
  1748.     for (variable = *_container_.i;; __extension__ ({--_container_.brk; break;}))
  1749. #else
  1750. struct QForeachContainerBase {};
  1751. template <typename T>
  1752. class QForeachContainer : public QForeachContainerBase {
  1753. public:
  1754.     inline QForeachContainer(const T& t): c(t), brk(0), i(c.begin()), e(c.end()){};
  1755.     const T c;
  1756.     mutable int brk;
  1757.     mutable typename T::const_iterator i, e;
  1758.     inline bool condition() const { return (!brk++ && i != e); }
  1759. };
  1760. template <typename T> inline T *qForeachPointer(const T &) { return 0; }
  1761. template <typename T> inline QForeachContainer<T> qForeachContainerNew(const T& t)
  1762. { return QForeachContainer<T>(t); }
  1763. template <typename T>
  1764. inline const QForeachContainer<T> *qForeachContainer(const QForeachContainerBase *base, const T *)
  1765. { return static_cast<const QForeachContainer<T> *>(base); }
  1766. #if (defined(Q_CC_MSVC) && !defined(Q_CC_MSVC_NET) && !defined(Q_CC_INTEL)) || defined(Q_CC_MIPS)
  1767. /*
  1768.    Proper for-scoping in VC++6 and MIPSpro CC
  1769. */
  1770. #  define Q_FOREACH(variable,container)                                                             
  1771.     if(0){}else                                                                                     
  1772.     for (const QForeachContainerBase &_container_ = qForeachContainerNew(container);                
  1773.          qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->condition();       
  1774.          ++qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->i)               
  1775.         for (variable = *qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->i; 
  1776.              qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->brk;           
  1777.              --qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->brk)
  1778. #else
  1779. #  define Q_FOREACH(variable, container) 
  1780.     for (const QForeachContainerBase &_container_ = qForeachContainerNew(container); 
  1781.          qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->condition();       
  1782.          ++qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->i)               
  1783.         for (variable = *qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->i; 
  1784.              qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->brk;           
  1785.              --qForeachContainer(&_container_, true ? 0 : qForeachPointer(container))->brk)
  1786. #endif // MSVC6 || MIPSpro
  1787. #endif
  1788. #define Q_FOREVER for(;;)
  1789. #ifndef QT_NO_KEYWORDS
  1790. #  ifndef foreach
  1791. #    define foreach Q_FOREACH
  1792. #  endif
  1793. #  ifndef forever
  1794. #    define forever Q_FOREVER
  1795. #  endif
  1796. #endif
  1797. #if 0
  1798. /* tell gcc to use its built-in methods for some common functions */
  1799. #if defined(QT_NO_DEBUG) && defined(Q_CC_GNU)
  1800. #  define qMemCopy __builtin_memcpy
  1801. #  define qMemSet __builtin_memset
  1802. #endif
  1803. #endif
  1804. #define Q_DECLARE_PRIVATE(Class) 
  1805.     inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(d_ptr); } 
  1806.     inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(d_ptr); } 
  1807.     friend class Class##Private;
  1808. #define Q_DECLARE_PRIVATE_D(Dptr, Class) 
  1809.     inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(Dptr); } 
  1810.     inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(Dptr); } 
  1811.     friend class Class##Private;
  1812. #define Q_DECLARE_PUBLIC(Class)                                    
  1813.     inline Class* q_func() { return static_cast<Class *>(q_ptr); } 
  1814.     inline const Class* q_func() const { return static_cast<const Class *>(q_ptr); } 
  1815.     friend class Class;
  1816. #define Q_D(Class) Class##Private * const d = d_func()
  1817. #define Q_Q(Class) Class * const q = q_func()
  1818. #define QT_TR_NOOP(x) (x)
  1819. #define QT_TRANSLATE_NOOP(scope, x) (x)
  1820. #define QT_TRANSLATE_NOOP3(scope, x, comment) {x, comment}
  1821. #define QDOC_PROPERTY(text)
  1822. /*
  1823.    Some classes do not permit copies to be made of an object. These
  1824.    classes contains a private copy constructor and assignment
  1825.    operator to disable copying (the compiler gives an error message).
  1826. */
  1827. #if !defined(Q_NO_DECLARED_NOT_DEFINED) || !defined(QT_MAKEDLL)
  1828.  #define Q_DISABLE_COPY(Class) 
  1829.      Class(const Class &); 
  1830.      Class &operator=(const Class &);
  1831. #else
  1832.  #define Q_DISABLE_COPY(Class)
  1833. #endif
  1834. class QByteArray;
  1835. Q_CORE_EXPORT QByteArray qgetenv(const char *varName);
  1836. Q_CORE_EXPORT bool qputenv(const char *varName, const QByteArray& value);
  1837. inline int qIntCast(double f) { return int(f); }
  1838. inline int qIntCast(float f) { return int(f); }
  1839. /*
  1840.   Reentrant versions of basic rand() functions for random number generation
  1841. */
  1842. Q_CORE_EXPORT void qsrand(uint seed);
  1843. Q_CORE_EXPORT int qrand();
  1844. /*
  1845.    Compat functions that were generated by configure
  1846. */
  1847. #ifdef QT3_SUPPORT
  1848. #ifndef QT_PRODUCT_LICENSEE
  1849. #  define QT_PRODUCT_LICENSEE QLibraryInfo::licensee()
  1850. #endif
  1851. #ifndef QT_PRODUCT_LICENSE
  1852. #  define QT_PRODUCT_LICENSE QLibraryInfo::licensedProducts()
  1853. #endif
  1854. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPath();
  1855. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathDocs();
  1856. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathHeaders();
  1857. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathLibs();
  1858. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathBins();
  1859. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathPlugins();
  1860. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathData();
  1861. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathTranslations();
  1862. QT3_SUPPORT Q_CORE_EXPORT const char *qInstallPathSysconf();
  1863. #endif
  1864. /*
  1865.    This gives us the possibility to check which modules the user can
  1866.    use. These are purely compile time checks and will generate no code.
  1867. */
  1868. /* Qt modules */
  1869. #define QT_MODULE_CORE                  0x0001
  1870. #define QT_MODULE_GUI                   0x0002
  1871. #define QT_MODULE_NETWORK               0x0004
  1872. #define QT_MODULE_OPENGL                0x0008
  1873. #define QT_MODULE_SQL                   0x0010
  1874. #define QT_MODULE_XML                   0x0020
  1875. #define QT_MODULE_QT3SUPPORTLIGHT       0x0040
  1876. #define QT_MODULE_QT3SUPPORT            0x0080
  1877. #define QT_MODULE_SVG                   0x0100
  1878. #define QT_MODULE_ACTIVEQT              0x0200
  1879. #define QT_MODULE_GRAPHICSVIEW          0x0400
  1880. #define QT_MODULE_SCRIPT                0x0800
  1881. #define QT_MODULE_XMLPATTERNS           0x1000
  1882. #define QT_MODULE_HELP                  0x2000
  1883. #define QT_MODULE_TEST                  0x4000
  1884. #define QT_MODULE_DBUS                  0x8000
  1885. /* Qt editions */
  1886. #define QT_EDITION_CONSOLE      (QT_MODULE_CORE 
  1887.                                  | QT_MODULE_NETWORK 
  1888.                                  | QT_MODULE_SQL 
  1889.                                  | QT_MODULE_SCRIPT 
  1890.                                  | QT_MODULE_XML 
  1891.                                  | QT_MODULE_XMLPATTERNS 
  1892.                                  | QT_MODULE_TEST 
  1893.                                  | QT_MODULE_DBUS)
  1894. #define QT_EDITION_DESKTOPLIGHT (QT_MODULE_CORE 
  1895.                                  | QT_MODULE_GUI 
  1896.                                  | QT_MODULE_QT3SUPPORTLIGHT 
  1897.                                  | QT_MODULE_TEST 
  1898.                                  | QT_MODULE_DBUS)
  1899. #define QT_EDITION_OPENSOURCE   (QT_MODULE_CORE 
  1900.                                  | QT_MODULE_GUI 
  1901.                                  | QT_MODULE_NETWORK 
  1902.                                  | QT_MODULE_OPENGL 
  1903.                                  | QT_MODULE_SQL 
  1904.                                  | QT_MODULE_XML 
  1905.                                  | QT_MODULE_XMLPATTERNS 
  1906.                                  | QT_MODULE_SCRIPT 
  1907.                                  | QT_MODULE_QT3SUPPORTLIGHT 
  1908.                                  | QT_MODULE_QT3SUPPORT 
  1909.                                  | QT_MODULE_SVG 
  1910.                                  | QT_MODULE_GRAPHICSVIEW 
  1911.                                  | QT_MODULE_HELP 
  1912.                                  | QT_MODULE_TEST 
  1913.                                  | QT_MODULE_DBUS)
  1914. #define QT_EDITION_DESKTOP      (QT_EDITION_OPENSOURCE 
  1915.                                  | QT_MODULE_ACTIVEQT)
  1916. #define QT_EDITION_UNIVERSAL    QT_EDITION_DESKTOP
  1917. #define QT_EDITION_ACADEMIC     QT_EDITION_DESKTOP
  1918. #define QT_EDITION_EDUCATIONAL  QT_EDITION_DESKTOP
  1919. #define QT_EDITION_EVALUATION   QT_EDITION_DESKTOP
  1920. /* Determine which modules can be used */
  1921. #ifndef QT_EDITION
  1922. #  ifdef QT_BUILD_QMAKE
  1923. #    define QT_EDITION QT_EDITION_DESKTOP
  1924. #  else
  1925. #    error "Qt not configured correctly, please run configure"
  1926. #  endif
  1927. #endif
  1928. #define QT_LICENSED_MODULE(x) 
  1929.     enum QtValidLicenseFor##x##Module { Licensed##x = true };
  1930. #if (QT_EDITION & QT_MODULE_CORE)
  1931. QT_LICENSED_MODULE(Core)
  1932. #endif
  1933. #if (QT_EDITION & QT_MODULE_GUI)
  1934. QT_LICENSED_MODULE(Gui)
  1935. #endif
  1936. #if (QT_EDITION & QT_MODULE_NETWORK)
  1937. QT_LICENSED_MODULE(Network)
  1938. #endif
  1939. #if (QT_EDITION & QT_MODULE_OPENGL)
  1940. QT_LICENSED_MODULE(OpenGL)
  1941. #endif
  1942. #if (QT_EDITION & QT_MODULE_SQL)
  1943. QT_LICENSED_MODULE(Sql)
  1944. #endif
  1945. #if (QT_EDITION & QT_MODULE_XML)
  1946. QT_LICENSED_MODULE(Xml)
  1947. #endif
  1948. #if (QT_EDITION & QT_MODULE_XMLPATTERNS)
  1949. QT_LICENSED_MODULE(XmlPatterns)
  1950. #endif
  1951. #if (QT_EDITION & QT_MODULE_HELP)
  1952. QT_LICENSED_MODULE(Help)
  1953. #endif
  1954. #if (QT_EDITION & QT_MODULE_SCRIPT) || defined(QT_BUILD_QMAKE)
  1955. QT_LICENSED_MODULE(Script)
  1956. #endif
  1957. #if (QT_EDITION & QT_MODULE_QT3SUPPORTLIGHT)
  1958. QT_LICENSED_MODULE(Qt3SupportLight)
  1959. #endif
  1960. #if (QT_EDITION & QT_MODULE_QT3SUPPORT)
  1961. QT_LICENSED_MODULE(Qt3Support)
  1962. #endif
  1963. #if (QT_EDITION & QT_MODULE_SVG)
  1964. QT_LICENSED_MODULE(Svg)
  1965. #endif
  1966. #if (QT_EDITION & QT_MODULE_ACTIVEQT)
  1967. QT_LICENSED_MODULE(ActiveQt)
  1968. #endif
  1969. #if (QT_EDITION & QT_MODULE_TEST)
  1970. QT_LICENSED_MODULE(Test)
  1971. #endif
  1972. #if (QT_EDITION & QT_MODULE_DBUS)
  1973. QT_LICENSED_MODULE(DBus)
  1974. #endif
  1975. #define QT_MODULE(x) 
  1976.     typedef QtValidLicenseFor##x##Module Qt##x##Module;
  1977. #ifdef QT_NO_CONCURRENT
  1978. #  define QT_NO_QFUTURE
  1979. #endif
  1980. /*
  1981.     Turn off certain features for compilers that have problems parsing
  1982.     the code.
  1983. */
  1984. #if (defined(Q_CC_HPACC) && defined(QT_ARCH_PARISC)) 
  1985.     || defined(Q_CC_MIPS) 
  1986.     || defined(Q_CC_XLC)
  1987. // HP aCC A.03.*, MIPSpro, and xlC cannot handle
  1988. // the template function declarations for the QtConcurrent functions
  1989. #  define QT_NO_QFUTURE
  1990. #  define QT_NO_CONCURRENT
  1991. #endif
  1992. // MSVC 6.0, MSVC .NET 2002, and old versions of Sun CC can`t handle the map(), etc templates,
  1993. // but the QFuture class compiles.
  1994. #if (defined(Q_CC_MSVC) && _MSC_VER <= 1300) || (defined (__SUNPRO_CC) && __SUNPRO_CC < 0x590)
  1995. #  define QT_NO_CONCURRENT
  1996. #endif
  1997. // Mingw uses a gcc 3 version which has problems with some of the
  1998. // map/filter overloads. So does IRIX and Solaris.
  1999. #if (defined(Q_OS_IRIX) || defined(Q_CC_MINGW) || defined (Q_OS_SOLARIS)) && (__GNUC__ < 4)
  2000. #  define QT_NO_CONCURRENT_MAP
  2001. #  define QT_NO_CONCURRENT_FILTER
  2002. #endif
  2003. QT_END_NAMESPACE
  2004. QT_END_HEADER
  2005. #endif /* __cplusplus */
  2006. #endif /* QGLOBAL_H */