diff --git a/src/control/controlvalue.h b/src/control/controlvalue.h index 460412e594dc..4bd2530c1c67 100644 --- a/src/control/controlvalue.h +++ b/src/control/controlvalue.h @@ -1,12 +1,11 @@ #pragma once -#include - #include #include +#include #include "util/assert.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" // for lock free access, this value has to be >= the number of value using threads // value must be a fraction of an integer diff --git a/src/controllers/bulk/bulkcontroller.cpp b/src/controllers/bulk/bulkcontroller.cpp index 242b59f9a2d4..a8f53e90c7f7 100644 --- a/src/controllers/bulk/bulkcontroller.cpp +++ b/src/controllers/bulk/bulkcontroller.cpp @@ -6,7 +6,7 @@ #include "controllers/controllerdebug.h" #include "controllers/defs_controllers.h" #include "moc_bulkcontroller.cpp" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/time.h" #include "util/trace.h" diff --git a/src/engine/cachingreader/cachingreader.cpp b/src/engine/cachingreader/cachingreader.cpp index 67f14e238964..dd71d4a8fa96 100644 --- a/src/engine/cachingreader/cachingreader.cpp +++ b/src/engine/cachingreader/cachingreader.cpp @@ -7,7 +7,7 @@ #include "moc_cachingreader.cpp" #include "track/track.h" #include "util/assert.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/counter.h" #include "util/logger.h" #include "util/math.h" diff --git a/src/engine/cachingreader/cachingreaderworker.cpp b/src/engine/cachingreader/cachingreaderworker.cpp index 4f0550905b92..f716f03e2dd4 100644 --- a/src/engine/cachingreader/cachingreaderworker.cpp +++ b/src/engine/cachingreader/cachingreaderworker.cpp @@ -8,7 +8,7 @@ #include "moc_cachingreaderworker.cpp" #include "sources/soundsourceproxy.h" #include "track/track.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/compatibility/qmutex.h" #include "util/event.h" #include "util/logger.h" diff --git a/src/engine/controls/loopingcontrol.cpp b/src/engine/controls/loopingcontrol.cpp index 82e0d25368c1..7f45496ad3a5 100644 --- a/src/engine/controls/loopingcontrol.cpp +++ b/src/engine/controls/loopingcontrol.cpp @@ -10,7 +10,7 @@ #include "moc_loopingcontrol.cpp" #include "preferences/usersettings.h" #include "track/track.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/math.h" #include "util/sample.h" diff --git a/src/engine/enginebuffer.cpp b/src/engine/enginebuffer.cpp index 1f584a54cdf9..964699eda861 100644 --- a/src/engine/enginebuffer.cpp +++ b/src/engine/enginebuffer.cpp @@ -30,7 +30,7 @@ #include "track/keyutils.h" #include "track/track.h" #include "util/assert.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/defs.h" #include "util/logger.h" #include "util/sample.h" diff --git a/src/engine/sidechain/shoutconnection.cpp b/src/engine/sidechain/shoutconnection.cpp index 2e86b4570080..768028e5f411 100644 --- a/src/engine/sidechain/shoutconnection.cpp +++ b/src/engine/sidechain/shoutconnection.cpp @@ -28,6 +28,7 @@ #include "preferences/usersettings.h" #include "recording/defs_recording.h" #include "track/track.h" +#include "util/compatibility/qatomic.h" #include "util/logger.h" namespace { diff --git a/src/library/coverartdelegate.cpp b/src/library/coverartdelegate.cpp index e43965c0a0b0..f63a5ccfff1c 100644 --- a/src/library/coverartdelegate.cpp +++ b/src/library/coverartdelegate.cpp @@ -8,6 +8,7 @@ #include "library/trackmodel.h" #include "moc_coverartdelegate.cpp" #include "track/track.h" +#include "util/compatibility.h" #include "util/logger.h" namespace { diff --git a/src/library/dlgcoverartfullsize.cpp b/src/library/dlgcoverartfullsize.cpp index e6eaa7cd45e6..3a09667d1285 100644 --- a/src/library/dlgcoverartfullsize.cpp +++ b/src/library/dlgcoverartfullsize.cpp @@ -9,6 +9,7 @@ #include "library/coverartutils.h" #include "moc_dlgcoverartfullsize.cpp" #include "track/track.h" +#include "util/compatibility.h" #include "util/widgethelper.h" DlgCoverArtFullSize::DlgCoverArtFullSize(QWidget* parent, BaseTrackPlayer* pPlayer) diff --git a/src/library/export/trackexportworker.cpp b/src/library/export/trackexportworker.cpp index 0acd2730a144..e32e4009fb53 100644 --- a/src/library/export/trackexportworker.cpp +++ b/src/library/export/trackexportworker.cpp @@ -6,6 +6,7 @@ #include "moc_trackexportworker.cpp" #include "track/track.h" +#include "util/compatibility/qatomic.h" namespace { diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp index a3340cd210c5..192a97657680 100644 --- a/src/mixer/playermanager.cpp +++ b/src/mixer/playermanager.cpp @@ -19,6 +19,7 @@ #include "soundio/soundmanager.h" #include "track/track.h" #include "util/assert.h" +#include "util/compatibility/qatomic.h" #include "util/defs.h" #include "util/logger.h" #include "util/sleepableqthread.h" diff --git a/src/preferences/broadcastprofile.cpp b/src/preferences/broadcastprofile.cpp index 0640c485792d..f48c26ac192d 100644 --- a/src/preferences/broadcastprofile.cpp +++ b/src/preferences/broadcastprofile.cpp @@ -16,7 +16,7 @@ using namespace QKeychain; #include "defs_urls.h" #include "moc_broadcastprofile.cpp" #include "recording/defs_recording.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/logger.h" #include "util/memory.h" #include "util/xml.h" diff --git a/src/preferences/dialog/dlgprefinterface.cpp b/src/preferences/dialog/dlgprefinterface.cpp index dfe610c4387e..eeaa5bd2c45c 100644 --- a/src/preferences/dialog/dlgprefinterface.cpp +++ b/src/preferences/dialog/dlgprefinterface.cpp @@ -17,6 +17,7 @@ #include "skin/legacy/legacyskinparser.h" #include "skin/skin.h" #include "skin/skinloader.h" +#include "util/compatibility.h" #include "util/screensaver.h" #include "util/screensavermanager.h" #include "util/widgethelper.h" diff --git a/src/soundio/soundmanager.cpp b/src/soundio/soundmanager.cpp index 44fc58fcabb8..63f15b0cb7f0 100644 --- a/src/soundio/soundmanager.cpp +++ b/src/soundio/soundmanager.cpp @@ -19,7 +19,7 @@ #include "soundio/sounddeviceportaudio.h" #include "soundio/soundmanagerutil.h" #include "util/cmdlineargs.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/defs.h" #include "util/sample.h" #include "util/sleep.h" diff --git a/src/util/compatibility.h b/src/util/compatibility.h index dde40b2839d3..34a9d10c9183 100644 --- a/src/util/compatibility.h +++ b/src/util/compatibility.h @@ -1,5 +1,7 @@ #pragma once +// TODO: Split this file into separate header files in subdirectory util/compatibility + #include #include #include @@ -36,87 +38,3 @@ QString uuidToNullableStringWithoutBraces(const QUuid& uuid) { return uuidToStringWithoutBraces(uuid); } } - -template -inline T atomicLoadAcquire(const QAtomicInteger& atomicInt) { - // TODO: QBasicAtomicInteger::load() is deprecated and should be - // replaced with QBasicAtomicInteger::loadRelaxed() However, the - // proposed alternative has just been introduced in Qt 5.14. Until the - // minimum required Qt version of Mixxx is increased, we need a version - // check here -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - return atomicInt.loadAcquire(); -#else - return atomicInt.load(); -#endif -} - -template -inline T* atomicLoadAcquire(const QAtomicPointer& atomicPtr) { - // TODO: QBasicAtomicPointer::load() is deprecated and should be - // replaced with QBasicAtomicPointer::loadRelaxed() However, the - // proposed alternative has just been introduced in Qt 5.14. Until the - // minimum required Qt version of Mixxx is increased, we need a version - // check here -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - return atomicPtr.loadAcquire(); -#else - return atomicPtr.load(); -#endif -} - -template -inline T atomicLoadRelaxed(const QAtomicInteger& atomicInt) { - // TODO: QBasicAtomicInteger::load() is deprecated and should be - // replaced with QBasicAtomicInteger::loadRelaxed() However, the - // proposed alternative has just been introduced in Qt 5.14. Until the - // minimum required Qt version of Mixxx is increased, we need a version - // check here -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - return atomicInt.loadRelaxed(); -#else - return atomicInt.load(); -#endif -} - -template -inline T* atomicLoadRelaxed(const QAtomicPointer& atomicPtr) { - // TODO: QBasicAtomicPointer::load() is deprecated and should be - // replaced with QBasicAtomicPointer::loadRelaxed() However, the - // proposed alternative has just been introduced in Qt 5.14. Until the - // minimum required Qt version of Mixxx is increased, we need a version - // check here -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - return atomicPtr.loadRelaxed(); -#else - return atomicPtr.load(); -#endif -} - -template -inline void atomicStoreRelaxed(QAtomicInteger& atomicInt, T newValue) { - // TODO: QBasicAtomicInteger::store(T newValue) is deprecated and should - // be replaced with QBasicAtomicInteger::storeRelaxed(T newValue) - // However, the proposed alternative has just been introduced in Qt 5.14. - // Until the minimum required Qt version of Mixxx is increased, we need a - // version check here -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - atomicInt.storeRelaxed(newValue); -#else - atomicInt.store(newValue); -#endif -} - -template -inline void atomicStoreRelaxed(QAtomicPointer& atomicPtr, T* newValue) { - // TODO: QBasicAtomicPointer::store(T* newValue) is deprecated and - // should be replaced with QBasicAtomicPointer::storeRelaxed(T* - // newValue) However, the proposed alternative has just been introduced in - // Qt 5.14. Until the minimum required Qt version of Mixxx is increased, we - // need a version check here -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) - atomicPtr.storeRelaxed(newValue); -#else - atomicPtr.store(newValue); -#endif -} diff --git a/src/util/compatibility/qatomic.h b/src/util/compatibility/qatomic.h new file mode 100644 index 000000000000..20dc6004e3c6 --- /dev/null +++ b/src/util/compatibility/qatomic.h @@ -0,0 +1,64 @@ +#pragma once + +#include +#include + +// TODO: QBasicAtomicInteger/Pointer::load/store() are deprecated and +// should be replaced with their explicit relaxed/acquire/release counterparts. +// However, the proposed alternatives have just been introduced in Qt 5.14. +// Until the minimum required Qt version of Mixxx is increased some utility +// functions that work independently of the Qt version are needed. + +template +inline T atomicLoadAcquire(const QAtomicInteger& atomicInt) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + return atomicInt.loadAcquire(); +#else + return atomicInt.load(); +#endif +} + +template +inline T* atomicLoadAcquire(const QAtomicPointer& atomicPtr) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + return atomicPtr.loadAcquire(); +#else + return atomicPtr.load(); +#endif +} + +template +inline T atomicLoadRelaxed(const QAtomicInteger& atomicInt) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + return atomicInt.loadRelaxed(); +#else + return atomicInt.load(); +#endif +} + +template +inline T* atomicLoadRelaxed(const QAtomicPointer& atomicPtr) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + return atomicPtr.loadRelaxed(); +#else + return atomicPtr.load(); +#endif +} + +template +inline void atomicStoreRelaxed(QAtomicInteger& atomicInt, T newValue) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + atomicInt.storeRelaxed(newValue); +#else + atomicInt.store(newValue); +#endif +} + +template +inline void atomicStoreRelaxed(QAtomicPointer& atomicPtr, T* newValue) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + atomicPtr.storeRelaxed(newValue); +#else + atomicPtr.store(newValue); +#endif +} diff --git a/src/util/statsmanager.cpp b/src/util/statsmanager.cpp index 6156bcd7e3fb..6d9c4b63c00d 100644 --- a/src/util/statsmanager.cpp +++ b/src/util/statsmanager.cpp @@ -8,7 +8,7 @@ #include "moc_statsmanager.cpp" #include "util/cmdlineargs.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/compatibility/qmutex.h" // In practice we process stats pipes about once a minute @1ms latency. diff --git a/src/util/task.cpp b/src/util/task.cpp index 92c5df7355ed..6b4906e20a85 100644 --- a/src/util/task.cpp +++ b/src/util/task.cpp @@ -3,7 +3,7 @@ #include #include "moc_task.cpp" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" TaskWatcher::TaskWatcher(QObject* pParent) : QObject(pParent) { } diff --git a/src/waveform/waveform.h b/src/waveform/waveform.h index a5484c34c825..f63390e3adab 100644 --- a/src/waveform/waveform.h +++ b/src/waveform/waveform.h @@ -9,7 +9,7 @@ #include #include "util/class.h" -#include "util/compatibility.h" +#include "util/compatibility/qatomic.h" #include "util/compatibility/qmutex.h" enum FilterIndex { Low = 0, Mid = 1, High = 2, FilterCount = 3};