File indexing completed on 2024-12-01 05:11:51

0001 // clang-format off
0002 /*****************************************************************************
0003 
0004   SPDX-FileCopyrightText: Copyright © 2010 Pavel Karelin (hkarel), <hkarel@yandex.ru>
0005   SPDX-License-Identifier: MIT
0006   ---
0007 
0008   This header defines macros of general purpose.
0009 
0010 *****************************************************************************/
0011 // clang-format on
0012 
0013 #ifndef DEFMAC_H
0014 #define DEFMAC_H
0015 
0016 #pragma once
0017 
0018 #define DISABLE_DEFAULT_CONSTRUCT( ClassName ) \
0019     ClassName () = delete;                     \
0020     ClassName ( ClassName && ) = delete;       \
0021     ClassName ( const ClassName & ) = delete;
0022 
0023 #define DISABLE_DEFAULT_COPY( ClassName )      \
0024     ClassName ( ClassName && ) = delete;       \
0025     ClassName ( const ClassName & ) = delete;  \
0026     ClassName & operator = ( ClassName && ) = delete; \
0027     ClassName & operator = ( const ClassName & ) = delete;
0028 
0029 #define DISABLE_DEFAULT_FUNC( ClassName )      \
0030     ClassName () = delete;                     \
0031     ClassName ( ClassName && ) = delete;       \
0032     ClassName ( const ClassName & ) = delete;  \
0033     ClassName & operator = ( ClassName && ) = delete; \
0034     ClassName & operator = ( const ClassName & ) = delete;
0035 
0036 #ifndef NDEBUG
0037 #define QCONNECT_ASSERT(COND_) assert(COND_)
0038 #else
0039 #define QCONNECT_ASSERT(COND_) COND_
0040 #endif
0041 
0042 /**
0043   The chk_connect macro is used to check result returned by the function
0044   QObject::connect() in debug mode,  it looks like on assert() function.
0045   However, in the release mode, unlike assert() function, test expression
0046   is not removed.
0047 */
0048 
0049 #define chk_connect(SOURCE_, SIGNAL_, DEST_, SLOT_) \
0050     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_));
0051 
0052 #define chk_connect_unique(SOURCE_, SIGNAL_, DEST_, SLOT_, CONNECT_TYPE_) \
0053     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_, CONNECT_TYPE_ | Qt::UniqueConnection));
0054 
0055 
0056 #define chk_connect_custom(SOURCE_, SIGNAL_, DEST_, SLOT_, CONNECT_TYPE_) \
0057     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_, CONNECT_TYPE_));
0058 
0059 #define chk_connect_a(SOURCE_, SIGNAL_, DEST_, SLOT_) \
0060     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_, \
0061     Qt::ConnectionType(Qt::AutoConnection | Qt::UniqueConnection)));
0062 
0063 #define chk_connect_d(SOURCE_, SIGNAL_, DEST_, SLOT_) \
0064     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_, \
0065     Qt::ConnectionType(Qt::DirectConnection | Qt::UniqueConnection)));
0066 
0067 #define chk_connect_q(SOURCE_, SIGNAL_, DEST_, SLOT_) \
0068     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_, \
0069     Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection)));
0070 
0071 #define chk_connect_bq(SOURCE_, SIGNAL_, DEST_, SLOT_) \
0072     QCONNECT_ASSERT(QObject::connect(SOURCE_, SIGNAL_, DEST_, SLOT_, \
0073     Qt::ConnectionType(Qt::BlockingQueuedConnection | Qt::UniqueConnection)));
0074 
0075 #if defined(__MINGW32__) || defined(__MINGW64__)
0076 #define MINGW
0077 #endif
0078 
0079 #endif /* DEFMAC_H */