diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index d39a44575b..68b1afe523 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -104,8 +104,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -203,9 +205,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" @@ -2618,6 +2622,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_javascript/javascript/juce_JSObject.h" "../../../../../modules/juce_javascript/juce_javascript.cpp" "../../../../../modules/juce_javascript/juce_javascript.h" + "../../../../../modules/juce_midi_ci/ci/juce_CIChannelAddress.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIChannelAddress.h" "../../../../../modules/juce_midi_ci/ci/juce_CIDevice.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIDevice.h" @@ -2629,10 +2634,12 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_midi_ci/ci/juce_CIEncodings.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIEncodings.h" "../../../../../modules/juce_midi_ci/ci/juce_CIFunctionBlock.h" + "../../../../../modules/juce_midi_ci/ci/juce_CIMessages.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIMessages.h" "../../../../../modules/juce_midi_ci/ci/juce_CIMuid.h" "../../../../../modules/juce_midi_ci/ci/juce_CIParser.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIParser.h" + "../../../../../modules/juce_midi_ci/ci/juce_CIProfileAtAddress.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIProfileAtAddress.h" "../../../../../modules/juce_midi_ci/ci/juce_CIProfileDelegate.h" "../../../../../modules/juce_midi_ci/ci/juce_CIProfileHost.cpp" @@ -2649,6 +2656,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_midi_ci/ci/juce_CIResponderDelegate.h" "../../../../../modules/juce_midi_ci/ci/juce_CIResponderOutput.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIResponderOutput.h" + "../../../../../modules/juce_midi_ci/ci/juce_CISubscription.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CISubscription.h" "../../../../../modules/juce_midi_ci/ci/juce_CISubscriptionManager.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CISubscriptionManager.h" @@ -2836,8 +2844,10 @@ set_source_files_properties( "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -2935,9 +2945,11 @@ set_source_files_properties( "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" @@ -5350,6 +5362,7 @@ set_source_files_properties( "../../../../../modules/juce_javascript/javascript/juce_JSObject.h" "../../../../../modules/juce_javascript/juce_javascript.cpp" "../../../../../modules/juce_javascript/juce_javascript.h" + "../../../../../modules/juce_midi_ci/ci/juce_CIChannelAddress.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIChannelAddress.h" "../../../../../modules/juce_midi_ci/ci/juce_CIDevice.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIDevice.h" @@ -5361,10 +5374,12 @@ set_source_files_properties( "../../../../../modules/juce_midi_ci/ci/juce_CIEncodings.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIEncodings.h" "../../../../../modules/juce_midi_ci/ci/juce_CIFunctionBlock.h" + "../../../../../modules/juce_midi_ci/ci/juce_CIMessages.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIMessages.h" "../../../../../modules/juce_midi_ci/ci/juce_CIMuid.h" "../../../../../modules/juce_midi_ci/ci/juce_CIParser.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIParser.h" + "../../../../../modules/juce_midi_ci/ci/juce_CIProfileAtAddress.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIProfileAtAddress.h" "../../../../../modules/juce_midi_ci/ci/juce_CIProfileDelegate.h" "../../../../../modules/juce_midi_ci/ci/juce_CIProfileHost.cpp" @@ -5381,6 +5396,7 @@ set_source_files_properties( "../../../../../modules/juce_midi_ci/ci/juce_CIResponderDelegate.h" "../../../../../modules/juce_midi_ci/ci/juce_CIResponderOutput.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CIResponderOutput.h" + "../../../../../modules/juce_midi_ci/ci/juce_CISubscription.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CISubscription.h" "../../../../../modules/juce_midi_ci/ci/juce_CISubscriptionManager.cpp" "../../../../../modules/juce_midi_ci/ci/juce_CISubscriptionManager.h" diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index 190ac262cc..fe30280141 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -207,6 +207,12 @@ true + + true + + + true + true @@ -339,6 +345,12 @@ true + + true + + + true + true @@ -3195,15 +3207,24 @@ true + + true + true true + + true + true + + true + true @@ -3222,6 +3243,9 @@ true + + true + true diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index c8748e38f5..11ad09e18c 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -919,6 +919,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -1054,6 +1060,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump @@ -4063,15 +4075,24 @@ JUCE Modules\juce_javascript + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci @@ -4090,6 +4111,9 @@ JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index af291e49d3..99c74e34ba 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -207,6 +207,12 @@ true + + true + + + true + true @@ -339,6 +345,12 @@ true + + true + + + true + true @@ -3195,15 +3207,24 @@ true + + true + true true + + true + true + + true + true @@ -3222,6 +3243,9 @@ true + + true + true diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index 520e5f2816..905f2af3f9 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -919,6 +919,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -1054,6 +1060,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump @@ -4063,15 +4075,24 @@ JUCE Modules\juce_javascript + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci @@ -4090,6 +4111,9 @@ JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci diff --git a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj index 3309a96330..b2a29998ad 100644 --- a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj @@ -207,6 +207,12 @@ true + + true + + + true + true @@ -339,6 +345,12 @@ true + + true + + + true + true @@ -3195,15 +3207,24 @@ true + + true + true true + + true + true + + true + true @@ -3222,6 +3243,9 @@ true + + true + true diff --git a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters index 9e9cacbe0b..54a93c238b 100644 --- a/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2026/DemoRunner_App.vcxproj.filters @@ -919,6 +919,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -1054,6 +1060,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump @@ -4063,15 +4075,24 @@ JUCE Modules\juce_javascript + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci @@ -4090,6 +4111,9 @@ JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index 8f17726751..d29c4edbda 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -56,8 +56,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -155,9 +157,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" @@ -2399,8 +2403,10 @@ set_source_files_properties( "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -2498,9 +2504,11 @@ set_source_files_properties( "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index f2d761e301..57c0f51dae 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -165,6 +165,12 @@ true + + true + + + true + true @@ -297,6 +303,12 @@ true + + true + + + true + true diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index b514b62e6f..c8f1249900 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -694,6 +694,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -829,6 +835,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj index 85ccd1444a..747ba1cd6e 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj @@ -165,6 +165,12 @@ true + + true + + + true + true @@ -297,6 +303,12 @@ true + + true + + + true + true diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj.filters index feada155bf..35f3cd9c46 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2026/AudioPerformanceTest_App.vcxproj.filters @@ -694,6 +694,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -829,6 +835,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index d643acf406..a6f2869ba6 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -92,8 +92,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -191,9 +193,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" @@ -2591,8 +2595,10 @@ set_source_files_properties( "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -2690,9 +2696,11 @@ set_source_files_properties( "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index 61e8bb5795..526588987b 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -173,6 +173,12 @@ true + + true + + + true + true @@ -305,6 +311,12 @@ true + + true + + + true + true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index 1868a7289a..753914dfee 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -775,6 +775,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -910,6 +916,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index 0777f62463..d6d2d209f3 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -173,6 +173,12 @@ true + + true + + + true + true @@ -305,6 +311,12 @@ true + + true + + + true + true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 67ceaecdd1..a1c4c01e23 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -775,6 +775,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -910,6 +916,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj index afb685a2a7..482e9ea99e 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj @@ -173,6 +173,12 @@ true + + true + + + true + true @@ -305,6 +311,12 @@ true + + true + + + true + true diff --git a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters index 2e560fba4a..30acc030c2 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2026/AudioPluginHost_App.vcxproj.filters @@ -775,6 +775,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -910,6 +916,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index 981ab6a310..7e741b8b17 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -60,8 +60,10 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -159,9 +161,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" @@ -2483,8 +2487,10 @@ set_source_files_properties( "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPBytesOnGroup.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConversion.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPConverters.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPDispatcher.h" + "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPFactory.h" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.cpp" "../../../../../modules/juce_audio_basics/midi/ump/juce_UMPIterator.h" @@ -2582,9 +2588,11 @@ set_source_files_properties( "../../../../../modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h" "../../../../../modules/juce_audio_devices/audio_io/juce_SampleRateHelpers.cpp" "../../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPDisconnectionListener.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoint.h" + "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.cpp" "../../../../../modules/juce_audio_devices/midi_io/ump/juce_UMPEndpoints.h" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index cf370bbe38..a1de52d2d9 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -165,6 +165,12 @@ true + + true + + + true + true @@ -297,6 +303,12 @@ true + + true + + + true + true diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index 06aefe332b..dd25f812da 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -724,6 +724,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -859,6 +865,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj index 681c8718b5..f410e70d09 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj @@ -165,6 +165,12 @@ true + + true + + + true + true @@ -297,6 +303,12 @@ true + + true + + + true + true diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj.filters index d544849e5d..1fa1eb4717 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2026/NetworkGraphicsDemo_App.vcxproj.filters @@ -724,6 +724,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -859,6 +865,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index 52b08762a7..594cedab8c 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -181,6 +181,12 @@ true + + true + + + true + true @@ -313,6 +319,12 @@ true + + true + + + true + true @@ -3028,15 +3040,24 @@ true + + true + true true + + true + true + + true + true @@ -3055,6 +3076,9 @@ true + + true + true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index ad5a218ed8..42ca6e4221 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -817,6 +817,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -952,6 +958,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump @@ -3820,15 +3832,24 @@ JUCE Modules\juce_javascript + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci @@ -3847,6 +3868,9 @@ JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index de6c91bc2c..28a2dda589 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -181,6 +181,12 @@ true + + true + + + true + true @@ -313,6 +319,12 @@ true + + true + + + true + true @@ -3028,15 +3040,24 @@ true + + true + true true + + true + true + + true + true @@ -3055,6 +3076,9 @@ true + + true + true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index e35947a22c..27b9faa339 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -817,6 +817,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -952,6 +958,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump @@ -3820,15 +3832,24 @@ JUCE Modules\juce_javascript + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci @@ -3847,6 +3868,9 @@ JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci diff --git a/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj index 770dd38bf5..7392fa5003 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj @@ -181,6 +181,12 @@ true + + true + + + true + true @@ -313,6 +319,12 @@ true + + true + + + true + true @@ -3028,15 +3040,24 @@ true + + true + true true + + true + true + + true + true @@ -3055,6 +3076,9 @@ true + + true + true diff --git a/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj.filters index d80fdb5edc..f69c79c5ef 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2026/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -817,6 +817,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -952,6 +958,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump @@ -3820,15 +3832,24 @@ JUCE Modules\juce_javascript + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci @@ -3847,6 +3868,9 @@ JUCE Modules\juce_midi_ci\ci + + JUCE Modules\juce_midi_ci\ci + JUCE Modules\juce_midi_ci\ci diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj index af16a120ed..d96edcb8c3 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj @@ -164,6 +164,12 @@ true + + true + + + true + true @@ -296,6 +302,12 @@ true + + true + + + true + true diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters index 9c05d5ce84..534fcea5cb 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_DynamicLibrary.vcxproj.filters @@ -721,6 +721,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -856,6 +862,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj index 5a29719bbe..5f95bc8edc 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj @@ -164,6 +164,12 @@ true + + true + + + true + true @@ -296,6 +302,12 @@ true + + true + + + true + true diff --git a/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj.filters index d925d1d48f..2f50bc77c8 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2026/WindowsDLL_DynamicLibrary.vcxproj.filters @@ -721,6 +721,12 @@ JUCE Modules\juce_audio_basics\midi\ump + + JUCE Modules\juce_audio_basics\midi\ump + + + JUCE Modules\juce_audio_basics\midi\ump + JUCE Modules\juce_audio_basics\midi\ump @@ -856,6 +862,12 @@ JUCE Modules\juce_audio_devices\audio_io + + JUCE Modules\juce_audio_devices\midi_io\ump + + + JUCE Modules\juce_audio_devices\midi_io\ump + JUCE Modules\juce_audio_devices\midi_io\ump diff --git a/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp b/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp index eb13e9f483..2cb3669b89 100644 --- a/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp +++ b/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.cpp @@ -35,6 +35,69 @@ namespace juce { +bool AudioPlayHead::FrameRate::operator== (const FrameRate& other) const +{ + const auto tie = [] (const FrameRate& x) { return std::tie (x.base, x.drop, x.pulldown); }; + return tie (*this) == tie (other); +} + +bool AudioPlayHead::TimeSignature::operator== (const TimeSignature& other) const +{ + const auto tie = [] (auto& x) { return std::tie (x.numerator, x.denominator); }; + return tie (*this) == tie (other); +} + +bool AudioPlayHead::LoopPoints::operator== (const LoopPoints& other) const +{ + const auto tie = [] (auto& x) { return std::tie (x.ppqStart, x.ppqEnd); }; + return tie (*this) == tie (other); +} + +bool AudioPlayHead::CurrentPositionInfo::operator== (const CurrentPositionInfo& other) const noexcept +{ + const auto tie = [] (const CurrentPositionInfo& i) + { + return std::tie (i.timeInSamples, + i.ppqPosition, + i.editOriginTime, + i.ppqPositionOfLastBarStart, + i.frameRate, + i.isPlaying, + i.isRecording, + i.bpm, + i.timeSigNumerator, + i.timeSigDenominator, + i.ppqLoopStart, + i.ppqLoopEnd, + i.isLooping); + }; + + return tie (*this) == tie (other); +} + +bool AudioPlayHead::PositionInfo::operator== (const PositionInfo& other) const noexcept +{ + const auto tie = [] (const PositionInfo& i) + { + return std::make_tuple (i.getTimeInSamples(), + i.getTimeInSeconds(), + i.getPpqPosition(), + i.getEditOriginTime(), + i.getPpqPositionOfLastBarStart(), + i.getFrameRate(), + i.getBarCount(), + i.getTimeSignature(), + i.getBpm(), + i.getLoopPoints(), + i.getHostTimeNs(), + i.getIsPlaying(), + i.getIsRecording(), + i.getIsLooping()); + }; + + return tie (*this) == tie (other); +} + bool AudioPlayHead::canControlTransport() { return false; } void AudioPlayHead::transportPlay ([[maybe_unused]] bool shouldStartPlaying) {} void AudioPlayHead::transportRecord ([[maybe_unused]] bool shouldStartRecording) {} diff --git a/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h b/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h index 142a0eabaf..0e37fbb789 100644 --- a/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h +++ b/modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h @@ -123,11 +123,7 @@ public: [[nodiscard]] FrameRate withPullDown (bool x = true) const { return with (&FrameRate::pulldown, x); } /** Returns true if this instance is equal to other. */ - bool operator== (const FrameRate& other) const - { - const auto tie = [] (const FrameRate& x) { return std::tie (x.base, x.drop, x.pulldown); }; - return tie (*this) == tie (other); - } + bool operator== (const FrameRate& other) const; /** Returns true if this instance is not equal to other. */ bool operator!= (const FrameRate& other) const { return ! (*this == other); } @@ -176,11 +172,7 @@ public: /** Time signature denominator, e.g. the 4 of a 3/4 time sig */ int denominator = 4; - bool operator== (const TimeSignature& other) const - { - const auto tie = [] (auto& x) { return std::tie (x.numerator, x.denominator); }; - return tie (*this) == tie (other); - } + bool operator== (const TimeSignature& other) const; bool operator!= (const TimeSignature& other) const { @@ -200,11 +192,7 @@ public: /** The current cycle end position in units of quarter-notes. */ double ppqEnd = 0; - bool operator== (const LoopPoints& other) const - { - const auto tie = [] (auto& x) { return std::tie (x.ppqStart, x.ppqEnd); }; - return tie (*this) == tie (other); - } + bool operator== (const LoopPoints& other) const; bool operator!= (const LoopPoints& other) const { @@ -279,27 +267,7 @@ public: bool isLooping = false; //============================================================================== - bool operator== (const CurrentPositionInfo& other) const noexcept - { - const auto tie = [] (const CurrentPositionInfo& i) - { - return std::tie (i.timeInSamples, - i.ppqPosition, - i.editOriginTime, - i.ppqPositionOfLastBarStart, - i.frameRate, - i.isPlaying, - i.isRecording, - i.bpm, - i.timeSigNumerator, - i.timeSigDenominator, - i.ppqLoopStart, - i.ppqLoopEnd, - i.isLooping); - }; - - return tie (*this) == tie (other); - } + bool operator== (const CurrentPositionInfo& other) const noexcept; bool operator!= (const CurrentPositionInfo& other) const noexcept { @@ -425,28 +393,7 @@ public: /** @see getIsLooping() */ void setIsLooping (bool isLoopingIn) { setFlag (flagIsLooping, isLoopingIn); } - bool operator== (const PositionInfo& other) const noexcept - { - const auto tie = [] (const PositionInfo& i) - { - return std::make_tuple (i.getTimeInSamples(), - i.getTimeInSeconds(), - i.getPpqPosition(), - i.getEditOriginTime(), - i.getPpqPositionOfLastBarStart(), - i.getFrameRate(), - i.getBarCount(), - i.getTimeSignature(), - i.getBpm(), - i.getLoopPoints(), - i.getHostTimeNs(), - i.getIsPlaying(), - i.getIsRecording(), - i.getIsLooping()); - }; - - return tie (*this) == tie (other); - } + bool operator== (const PositionInfo& other) const noexcept; bool operator!= (const PositionInfo& other) const noexcept { diff --git a/modules/juce_audio_basics/juce_audio_basics.cpp b/modules/juce_audio_basics/juce_audio_basics.cpp index 4357374c26..992c3d886a 100644 --- a/modules/juce_audio_basics/juce_audio_basics.cpp +++ b/modules/juce_audio_basics/juce_audio_basics.cpp @@ -103,6 +103,8 @@ #include "audio_play_head/juce_AudioPlayHead.cpp" #include "utilities/juce_AudioWorkgroup.cpp" +#include "midi/ump/juce_UMPDeviceInfo.cpp" +#include "midi/ump/juce_UMPFactory.cpp" #include "midi/ump/juce_UMPUtils.cpp" #include "midi/ump/juce_UMPView.cpp" #include "midi/ump/juce_UMPSysEx7.cpp" diff --git a/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp b/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp new file mode 100644 index 0000000000..06c2cf0a54 --- /dev/null +++ b/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.cpp @@ -0,0 +1,53 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::universal_midi_packets +{ + +auto DeviceInfo::tie() const +{ + return std::tie (manufacturer, family, modelNumber, revision); +} + +bool DeviceInfo::operator== (const DeviceInfo& other) const +{ + return tie() == other.tie(); +} + +bool DeviceInfo::operator!= (const DeviceInfo& other) const +{ + return tie() != other.tie(); +} + +} // namespace juce::universal_midi_packets diff --git a/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h b/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h index 2bf5180731..1ed2d0d3d4 100644 --- a/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h +++ b/modules/juce_audio_basics/midi/ump/juce_UMPDeviceInfo.h @@ -49,11 +49,11 @@ struct DeviceInfo std::array revision; private: - auto tie() const { return std::tie (manufacturer, family, modelNumber, revision); } + auto tie() const; public: - bool operator== (const DeviceInfo& other) const { return tie() == other.tie(); } - bool operator!= (const DeviceInfo& other) const { return tie() != other.tie(); } + bool operator== (const DeviceInfo& other) const; + bool operator!= (const DeviceInfo& other) const; static constexpr auto marshallingVersion = std::nullopt; diff --git a/modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp b/modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp new file mode 100644 index 0000000000..c3593b7dba --- /dev/null +++ b/modules/juce_audio_basics/midi/ump/juce_UMPFactory.cpp @@ -0,0 +1,53 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::universal_midi_packets +{ + +auto EndpointInfo::tie() const +{ + return std::tie (versionMajor, versionMinor, numFunctionBlocks, flags); +} + +bool EndpointInfo::operator== (const EndpointInfo& other) const +{ + return tie() == other.tie(); +} + +bool EndpointInfo::operator!= (const EndpointInfo& other) const +{ + return tie() != other.tie(); +} + +} // namespace juce::universal_midi_packets diff --git a/modules/juce_audio_basics/midi/ump/juce_UMPFactory.h b/modules/juce_audio_basics/midi/ump/juce_UMPFactory.h index da1a8fff9b..bdbb23d93f 100644 --- a/modules/juce_audio_basics/midi/ump/juce_UMPFactory.h +++ b/modules/juce_audio_basics/midi/ump/juce_UMPFactory.h @@ -86,7 +86,7 @@ private: */ class EndpointInfo { - auto tie() const { return std::tie (versionMajor, versionMinor, numFunctionBlocks, flags); } + auto tie() const; public: [[nodiscard]] EndpointInfo withVersion (uint8_t major, uint8_t minor) const @@ -122,8 +122,8 @@ public: /** True if this endpoint is capable of transmitting JR timestamps. */ [[nodiscard]] bool hasTransmitJRSupport() const { return getFlag (supportsTransmitJR); } - bool operator== (const EndpointInfo& other) const { return tie() == other.tie(); } - bool operator!= (const EndpointInfo& other) const { return tie() != other.tie(); } + bool operator== (const EndpointInfo& other) const; + bool operator!= (const EndpointInfo& other) const; private: enum Flags diff --git a/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp b/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp index bed4602954..c9a909ce70 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp +++ b/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp @@ -220,6 +220,25 @@ void MPEZoneLayout::checkAndLimitZoneParameters (int minValue, int maxValue, } } +//============================================================================== +bool MPEZone::operator== (const MPEZone& other) const +{ + const auto tie = [] (auto& x) + { + return std::tie (x.zoneType, + x.numMemberChannels, + x.perNotePitchbendRange, + x.masterPitchbendRange); + }; + + return tie (*this) == tie (other); +} + +bool MPEZone::operator!= (const MPEZone& other) const +{ + return ! operator== (other); +} + //============================================================================== //============================================================================== diff --git a/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h b/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h index d50111fcac..4ff5b40402 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h +++ b/modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h @@ -84,23 +84,8 @@ struct MPEZone return isUsingChannelAsMemberChannel (channel) || channel == getMasterChannel(); } - static auto tie (const MPEZone& z) - { - return std::tie (z.zoneType, - z.numMemberChannels, - z.perNotePitchbendRange, - z.masterPitchbendRange); - } - - bool operator== (const MPEZone& other) const - { - return tie (*this) == tie (other); - } - - bool operator!= (const MPEZone& other) const - { - return tie (*this) != tie (other); - } + bool operator== (const MPEZone& other) const; + bool operator!= (const MPEZone& other) const; //============================================================================== static constexpr int lowerZoneMasterChannel = 1, diff --git a/modules/juce_audio_devices/juce_audio_devices.cpp b/modules/juce_audio_devices/juce_audio_devices.cpp index 9772450def..a38bbddadc 100644 --- a/modules/juce_audio_devices/juce_audio_devices.cpp +++ b/modules/juce_audio_devices/juce_audio_devices.cpp @@ -61,6 +61,7 @@ #include "midi_io/juce_WaitFreeListeners.cpp" #include "midi_io/juce_MidiDeviceListConnectionBroadcaster.cpp" +#include "midi_io/ump/juce_UMPBlock.cpp" #include "midi_io/ump/juce_UMPIOHelpers.cpp" #include "midi_io/ump/juce_UMPInput.cpp" #include "midi_io/ump/juce_UMPOutput.cpp" @@ -69,6 +70,7 @@ #include "midi_io/ump/juce_UMPVirtualEndpoint.cpp" #include "midi_io/ump/juce_UMPSession.cpp" #include "midi_io/ump/juce_UMPEndpoints.cpp" +#include "midi_io/ump/juce_UMPEndpointId.cpp" #include "audio_io/juce_SampleRateHelpers.cpp" #include "midi_io/juce_MidiDevices.cpp" diff --git a/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp b/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp index 4f7ddf8f25..419ebdc0f9 100644 --- a/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp +++ b/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp @@ -399,4 +399,10 @@ MidiDeviceInfo MidiOutput::getDeviceInfo() const noexcept return customName.has_value() ? storedInfo.withName (*customName) : storedInfo; } +bool MidiDeviceInfo::operator== (const MidiDeviceInfo& other) const noexcept +{ + const auto tie = [] (auto& x) { return std::tuple (x.name, x.identifier); }; + return tie (*this) == tie (other); +} + } // namespace juce diff --git a/modules/juce_audio_devices/midi_io/juce_MidiDevices.h b/modules/juce_audio_devices/midi_io/juce_MidiDevices.h index 3d48cd64a8..38eb933fd5 100644 --- a/modules/juce_audio_devices/midi_io/juce_MidiDevices.h +++ b/modules/juce_audio_devices/midi_io/juce_MidiDevices.h @@ -129,11 +129,7 @@ struct MidiDeviceInfo [[nodiscard]] MidiDeviceInfo withIdentifier (String x) const { return withMember (*this, &MidiDeviceInfo::identifier, x); } //============================================================================== - bool operator== (const MidiDeviceInfo& other) const noexcept - { - const auto tie = [] (auto& x) { return std::tuple (x.name, x.identifier); }; - return tie (*this) == tie (other); - } + bool operator== (const MidiDeviceInfo& other) const noexcept; bool operator!= (const MidiDeviceInfo& other) const noexcept { return ! operator== (other); } }; diff --git a/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp b/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp new file mode 100644 index 0000000000..e2677d2272 --- /dev/null +++ b/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.cpp @@ -0,0 +1,49 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::universal_midi_packets +{ + +bool Block::operator== (const Block& other) const +{ + const auto tie = [] (auto& x) { return std::tuple (x.info, x.name); }; + return tie (*this) == tie (other); +} + +bool Block::operator!= (const Block& other) const +{ + return ! operator== (other); +} + +} diff --git a/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h b/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h index a3d9542888..e396dc5249 100644 --- a/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h +++ b/modules/juce_audio_devices/midi_io/ump/juce_UMPBlock.h @@ -140,16 +140,8 @@ public: return info == other.info; } - bool operator== (const Block& other) const - { - const auto tie = [] (auto& x) { return std::tuple (x.info, x.name); }; - return tie (*this) == tie (other); - } - - bool operator!= (const Block& other) const - { - return ! operator== (other); - } + bool operator== (const Block& other) const; + bool operator!= (const Block& other) const; private: BlockInfo info; diff --git a/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp b/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp new file mode 100644 index 0000000000..e2bb5ee39a --- /dev/null +++ b/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.cpp @@ -0,0 +1,46 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::universal_midi_packets +{ + +auto EndpointId::tie() const { return std::tuple (src, dst); } +bool EndpointId::operator== (const EndpointId& x) const { return tie() == x.tie(); } +bool EndpointId::operator!= (const EndpointId& x) const { return tie() != x.tie(); } +bool EndpointId::operator< (const EndpointId& x) const { return tie() < x.tie(); } +bool EndpointId::operator<= (const EndpointId& x) const { return tie() <= x.tie(); } +bool EndpointId::operator> (const EndpointId& x) const { return tie() > x.tie(); } +bool EndpointId::operator>= (const EndpointId& x) const { return tie() >= x.tie(); } + +} diff --git a/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h b/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h index 710c90608d..62b64bd277 100644 --- a/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h +++ b/modules/juce_audio_devices/midi_io/ump/juce_UMPEndpointId.h @@ -60,7 +60,7 @@ constexpr IOKind ioKinds[] { IOKind::src, IOKind::dst }; */ class EndpointId { - auto tie() const { return std::tuple (src, dst); } + auto tie() const; public: /** @internal */ @@ -68,12 +68,12 @@ public: EndpointId() = default; - bool operator== (const EndpointId& x) const { return tie() == x.tie(); } - bool operator!= (const EndpointId& x) const { return tie() != x.tie(); } - bool operator< (const EndpointId& x) const { return tie() < x.tie(); } - bool operator<= (const EndpointId& x) const { return tie() <= x.tie(); } - bool operator> (const EndpointId& x) const { return tie() > x.tie(); } - bool operator>= (const EndpointId& x) const { return tie() >= x.tie(); } + bool operator== (const EndpointId& x) const; + bool operator!= (const EndpointId& x) const; + bool operator< (const EndpointId& x) const; + bool operator<= (const EndpointId& x) const; + bool operator> (const EndpointId& x) const; + bool operator>= (const EndpointId& x) const; String get (IOKind k) const { return k == IOKind::src ? src : dst; } diff --git a/modules/juce_graphics/colour/juce_ColourGradient.cpp b/modules/juce_graphics/colour/juce_ColourGradient.cpp index abc0baeee7..ccc60edbf2 100644 --- a/modules/juce_graphics/colour/juce_ColourGradient.cpp +++ b/modules/juce_graphics/colour/juce_ColourGradient.cpp @@ -291,4 +291,24 @@ bool ColourGradient::isInvisible() const noexcept return true; } +auto ColourGradient::ColourPoint::tie() const +{ + return std::tuple (position, colour.getPixelARGB().getNativeARGB()); +} + +bool ColourGradient::ColourPoint::operator== (ColourPoint other) const noexcept +{ + return tie() == other.tie(); +} + +bool ColourGradient::ColourPoint::operator!= (ColourPoint other) const noexcept +{ + return tie() != other.tie(); +} + +bool ColourGradient::ColourPoint::operator< (ColourPoint other) const noexcept +{ + return tie() < other.tie(); +} + } // namespace juce diff --git a/modules/juce_graphics/colour/juce_ColourGradient.h b/modules/juce_graphics/colour/juce_ColourGradient.h index 6439c2377a..f74574552f 100644 --- a/modules/juce_graphics/colour/juce_ColourGradient.h +++ b/modules/juce_graphics/colour/juce_ColourGradient.h @@ -233,14 +233,15 @@ private: //============================================================================== struct ColourPoint { - auto tie() const { return std::tuple (position, colour.getPixelARGB().getNativeARGB()); } - - bool operator== (ColourPoint other) const noexcept { return tie() == other.tie(); } - bool operator!= (ColourPoint other) const noexcept { return tie() != other.tie(); } - bool operator< (ColourPoint other) const noexcept { return tie() < other.tie(); } + bool operator== (ColourPoint other) const noexcept; + bool operator!= (ColourPoint other) const noexcept; + bool operator< (ColourPoint other) const noexcept; double position; Colour colour; + + private: + auto tie() const; }; struct ColourPointArrayComparisons; diff --git a/modules/juce_graphics/detail/juce_SimpleShapedText.cpp b/modules/juce_graphics/detail/juce_SimpleShapedText.cpp index 456570704c..f20f1a2ea0 100644 --- a/modules/juce_graphics/detail/juce_SimpleShapedText.cpp +++ b/modules/juce_graphics/detail/juce_SimpleShapedText.cpp @@ -35,6 +35,34 @@ namespace juce::detail { +auto ShapedTextOptions::tie() const +{ + return std::tie (justification, + readingDir, + wordWrapWidth, + alignmentWidth, + height, + fontsForRange, + firstLineIndent, + leading, + additiveLineSpacing, + baselineAtZero, + allowBreakingInsideWord, + trailingWhitespacesShouldFit, + maxNumLines, + ellipsis); +} + +bool ShapedTextOptions::operator== (const ShapedTextOptions& other) const +{ + return tie() == other.tie(); +} + +bool ShapedTextOptions::operator!= (const ShapedTextOptions& other) const +{ + return tie() != other.tie(); +} + //============================================================================== constexpr hb_script_t getScriptTag (TextScript type) { diff --git a/modules/juce_graphics/detail/juce_SimpleShapedText.h b/modules/juce_graphics/detail/juce_SimpleShapedText.h index 555d89e32f..2b653b476d 100644 --- a/modules/juce_graphics/detail/juce_SimpleShapedText.h +++ b/modules/juce_graphics/detail/juce_SimpleShapedText.h @@ -45,27 +45,11 @@ enum class TextDirection class ShapedTextOptions { private: - auto tie() const - { - return std::tie (justification, - readingDir, - wordWrapWidth, - alignmentWidth, - height, - fontsForRange, - firstLineIndent, - leading, - additiveLineSpacing, - baselineAtZero, - allowBreakingInsideWord, - trailingWhitespacesShouldFit, - maxNumLines, - ellipsis); - } + auto tie() const; public: - bool operator== (const ShapedTextOptions& other) const { return tie() == other.tie(); } - bool operator!= (const ShapedTextOptions& other) const { return tie() != other.tie(); } + bool operator== (const ShapedTextOptions& other) const; + bool operator!= (const ShapedTextOptions& other) const; //============================================================================== [[nodiscard]] ShapedTextOptions withJustification (Justification x) const diff --git a/modules/juce_graphics/fonts/juce_FontFeatures.cpp b/modules/juce_graphics/fonts/juce_FontFeatures.cpp index be967f4461..3a07096542 100644 --- a/modules/juce_graphics/fonts/juce_FontFeatures.cpp +++ b/modules/juce_graphics/fonts/juce_FontFeatures.cpp @@ -35,6 +35,42 @@ namespace juce { +constexpr auto FontFeatureSetting::tie() const +{ + return std::tuple (tag, value); +} + +constexpr bool FontFeatureSetting::operator< (const FontFeatureSetting& other) const +{ + return tie() < other.tie(); +} + +constexpr bool FontFeatureSetting::operator<= (const FontFeatureSetting& other) const +{ + return tie() <= other.tie(); +} + +constexpr bool FontFeatureSetting::operator> (const FontFeatureSetting& other) const +{ + return tie() > other.tie(); +} + +constexpr bool FontFeatureSetting::operator>= (const FontFeatureSetting& other) const +{ + return tie() >= other.tie(); +} + +constexpr bool FontFeatureSetting::operator== (const FontFeatureSetting& other) const +{ + return tie() == other.tie(); +} + +constexpr bool FontFeatureSetting::operator!= (const FontFeatureSetting& other) const +{ + return tie() != other.tie(); +} + +//============================================================================== FontFeatureTag FontFeatureTag::fromString (const String& string) { if (string.getNumBytesAsUTF8() != 4) diff --git a/modules/juce_graphics/fonts/juce_FontFeatures.h b/modules/juce_graphics/fonts/juce_FontFeatures.h index 8a1eee109b..5224199be2 100644 --- a/modules/juce_graphics/fonts/juce_FontFeatures.h +++ b/modules/juce_graphics/fonts/juce_FontFeatures.h @@ -107,7 +107,7 @@ private: */ class JUCE_API FontFeatureSetting final { - constexpr auto tie() const { return std::tuple (tag, value); } + constexpr auto tie() const; public: /** Common feature values for convenience. */ @@ -123,12 +123,12 @@ public: { } - [[nodiscard]] constexpr bool operator< (const FontFeatureSetting& other) const { return tie() < other.tie(); } - [[nodiscard]] constexpr bool operator<= (const FontFeatureSetting& other) const { return tie() <= other.tie(); } - [[nodiscard]] constexpr bool operator> (const FontFeatureSetting& other) const { return tie() > other.tie(); } - [[nodiscard]] constexpr bool operator>= (const FontFeatureSetting& other) const { return tie() >= other.tie(); } - [[nodiscard]] constexpr bool operator== (const FontFeatureSetting& other) const { return tie() == other.tie(); } - [[nodiscard]] constexpr bool operator!= (const FontFeatureSetting& other) const { return tie() != other.tie(); } + [[nodiscard]] constexpr bool operator< (const FontFeatureSetting& other) const; + [[nodiscard]] constexpr bool operator<= (const FontFeatureSetting& other) const; + [[nodiscard]] constexpr bool operator> (const FontFeatureSetting& other) const; + [[nodiscard]] constexpr bool operator>= (const FontFeatureSetting& other) const; + [[nodiscard]] constexpr bool operator== (const FontFeatureSetting& other) const; + [[nodiscard]] constexpr bool operator!= (const FontFeatureSetting& other) const; /** The OpenType feature tag. */ FontFeatureTag tag; diff --git a/modules/juce_midi_ci/ci/juce_CIChannelAddress.cpp b/modules/juce_midi_ci/ci/juce_CIChannelAddress.cpp new file mode 100644 index 0000000000..16175644ef --- /dev/null +++ b/modules/juce_midi_ci/ci/juce_CIChannelAddress.cpp @@ -0,0 +1,44 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::midi_ci +{ + auto ChannelAddress::tie() const { return std::tie (group, channel); } + bool ChannelAddress::operator< (const ChannelAddress& other) const { return tie() < other.tie(); } + bool ChannelAddress::operator<= (const ChannelAddress& other) const { return tie() <= other.tie(); } + bool ChannelAddress::operator> (const ChannelAddress& other) const { return tie() > other.tie(); } + bool ChannelAddress::operator>= (const ChannelAddress& other) const { return tie() >= other.tie(); } + bool ChannelAddress::operator== (const ChannelAddress& other) const { return tie() == other.tie(); } + bool ChannelAddress::operator!= (const ChannelAddress& other) const { return ! operator== (other); } +} // namespace juce::midi_ci diff --git a/modules/juce_midi_ci/ci/juce_CIChannelAddress.h b/modules/juce_midi_ci/ci/juce_CIChannelAddress.h index c7f47faf23..98f89eff1e 100644 --- a/modules/juce_midi_ci/ci/juce_CIChannelAddress.h +++ b/modules/juce_midi_ci/ci/juce_CIChannelAddress.h @@ -46,7 +46,7 @@ private: uint8_t group{}; ///< A group within a MIDI endpoint, where 0 <= group && group < 16 ChannelInGroup channel{}; ///< A set of channels related to specified group - auto tie() const { return std::tie (group, channel); } + auto tie() const; public: /** Returns a copy of this object with the specified group. */ @@ -81,12 +81,12 @@ public: /** Returns true if this address refers to a single channel. */ bool isSingleChannel() const { return ! isBlock() && ! isGroup(); } - bool operator< (const ChannelAddress& other) const { return tie() < other.tie(); } - bool operator<= (const ChannelAddress& other) const { return tie() <= other.tie(); } - bool operator> (const ChannelAddress& other) const { return tie() > other.tie(); } - bool operator>= (const ChannelAddress& other) const { return tie() >= other.tie(); } - bool operator== (const ChannelAddress& other) const { return tie() == other.tie(); } - bool operator!= (const ChannelAddress& other) const { return ! operator== (other); } + bool operator< (const ChannelAddress& other) const; + bool operator<= (const ChannelAddress& other) const; + bool operator> (const ChannelAddress& other) const; + bool operator>= (const ChannelAddress& other) const; + bool operator== (const ChannelAddress& other) const; + bool operator!= (const ChannelAddress& other) const; }; } // namespace juce::midi_ci diff --git a/modules/juce_midi_ci/ci/juce_CIMessages.cpp b/modules/juce_midi_ci/ci/juce_CIMessages.cpp new file mode 100644 index 0000000000..71b07cb926 --- /dev/null +++ b/modules/juce_midi_ci/ci/juce_CIMessages.cpp @@ -0,0 +1,325 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::midi_ci::Message +{ + +//============================================================================== +auto Header::tie() const +{ + return std::tuple (deviceID, category, version, source, destination); +} + +bool Header::operator== (const Header& x) const { return tie() == x.tie(); } +bool Header::operator!= (const Header& x) const { return ! operator== (x); } + +//============================================================================== +auto DiscoveryResponse::tie() const +{ + return std::tuple (device, capabilities, maximumSysexSize, outputPathID, functionBlock); +} + +bool DiscoveryResponse::operator== (const DiscoveryResponse& x) const { return tie() == x.tie(); } +bool DiscoveryResponse::operator!= (const DiscoveryResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto Discovery::tie() const +{ + return std::tuple (device, capabilities, maximumSysexSize, outputPathID); +} + +bool Discovery::operator== (const Discovery& x) const { return tie() == x.tie(); } +bool Discovery::operator!= (const Discovery& x) const { return ! operator== (x); } + +//============================================================================== +auto EndpointInquiryResponse::tie() const +{ + return std::tuple (status, makeComparableRange (data)); +} + +bool EndpointInquiryResponse::operator== (const EndpointInquiryResponse& x) const { return tie() == x.tie(); } +bool EndpointInquiryResponse::operator!= (const EndpointInquiryResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto EndpointInquiry::tie() const +{ + return std::tuple (status); +} + +bool EndpointInquiry::operator== (const EndpointInquiry& x) const { return tie() == x.tie(); } +bool EndpointInquiry::operator!= (const EndpointInquiry& x) const { return ! operator== (x); } + +//============================================================================== +auto InvalidateMUID::tie() const +{ + return std::tuple (target); +} + +bool InvalidateMUID::operator== (const InvalidateMUID& x) const { return tie() == x.tie(); } +bool InvalidateMUID::operator!= (const InvalidateMUID& x) const { return ! operator== (x); } + +//============================================================================== +auto ACK::tie() const +{ + return std::tuple (originalCategory, statusCode, statusData, details, makeComparableRange (messageText)); +} + +bool ACK::operator== (const ACK& x) const { return tie() == x.tie(); } +bool ACK::operator!= (const ACK& x) const { return ! operator== (x); } + +//============================================================================== +auto NAK::tie() const +{ + return std::tuple (originalCategory, statusCode, statusData, details, makeComparableRange (messageText)); +} + +bool NAK::operator== (const NAK& x) const { return tie() == x.tie(); } +bool NAK::operator!= (const NAK& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileInquiryResponse::tie() const +{ + return std::tuple (makeComparableRange (enabledProfiles), makeComparableRange (disabledProfiles)); +} + +bool ProfileInquiryResponse::operator== (const ProfileInquiryResponse& x) const { return tie() == x.tie(); } +bool ProfileInquiryResponse::operator!= (const ProfileInquiryResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileInquiry::tie() const +{ + return std::tuple<>(); +} + +bool ProfileInquiry::operator== (const ProfileInquiry& x) const { return tie() == x.tie(); } +bool ProfileInquiry::operator!= (const ProfileInquiry& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileAdded::tie() const +{ + return std::tuple (profile); +} + +bool ProfileAdded::operator== (const ProfileAdded& x) const { return tie() == x.tie(); } +bool ProfileAdded::operator!= (const ProfileAdded& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileRemoved::tie() const +{ + return std::tuple (profile); +} + +bool ProfileRemoved::operator== (const ProfileRemoved& x) const { return tie() == x.tie(); } +bool ProfileRemoved::operator!= (const ProfileRemoved& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileDetailsResponse::tie() const +{ + return std::tuple (profile, target, makeComparableRange (data)); +} + +bool ProfileDetailsResponse::operator== (const ProfileDetailsResponse& x) const { return tie() == x.tie(); } +bool ProfileDetailsResponse::operator!= (const ProfileDetailsResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileDetails::tie() const +{ + return std::tuple (profile, target); +} + +bool ProfileDetails::operator== (const ProfileDetails& x) const { return tie() == x.tie(); } +bool ProfileDetails::operator!= (const ProfileDetails& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileOn::tie() const +{ + return std::tuple (profile, numChannels); +} + +bool ProfileOn::operator== (const ProfileOn& x) const { return tie() == x.tie(); } +bool ProfileOn::operator!= (const ProfileOn& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileOff::tie() const +{ + return std::tuple (profile); +} + +bool ProfileOff::operator== (const ProfileOff& x) const { return tie() == x.tie(); } +bool ProfileOff::operator!= (const ProfileOff& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileEnabledReport::tie() const +{ + return std::tuple (profile, numChannels); +} + +bool ProfileEnabledReport::operator== (const ProfileEnabledReport& x) const { return tie() == x.tie(); } +bool ProfileEnabledReport::operator!= (const ProfileEnabledReport& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileDisabledReport::tie() const +{ + return std::tuple (profile, numChannels); +} + +bool ProfileDisabledReport::operator== (const ProfileDisabledReport& x) const { return tie() == x.tie(); } +bool ProfileDisabledReport::operator!= (const ProfileDisabledReport& x) const { return ! operator== (x); } + +//============================================================================== +auto ProfileSpecificData::tie() const +{ + return std::tuple (profile, makeComparableRange (data)); +} + +bool ProfileSpecificData::operator== (const ProfileSpecificData& x) const { return tie() == x.tie(); } +bool ProfileSpecificData::operator!= (const ProfileSpecificData& x) const { return ! operator== (x); } + +//============================================================================== +auto PropertyExchangeCapabilitiesResponse::tie() const +{ + return std::tuple (numSimultaneousRequestsSupported, majorVersion, minorVersion); +} + +bool PropertyExchangeCapabilitiesResponse::operator== (const PropertyExchangeCapabilitiesResponse& x) const { return tie() == x.tie(); } +bool PropertyExchangeCapabilitiesResponse::operator!= (const PropertyExchangeCapabilitiesResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto PropertyExchangeCapabilities::tie() const +{ + return std::tuple (numSimultaneousRequestsSupported, majorVersion, minorVersion); +} + +bool PropertyExchangeCapabilities::operator== (const PropertyExchangeCapabilities& x) const { return tie() == x.tie(); } +bool PropertyExchangeCapabilities::operator!= (const PropertyExchangeCapabilities& x) const { return ! operator== (x); } + +//============================================================================== +auto StaticSizePropertyExchange::tie() const +{ + return std::tuple (requestID, makeComparableRange (header)); +} + +//============================================================================== +auto DynamicSizePropertyExchange::tie() const +{ + return std::tuple (requestID, + makeComparableRange (header), + totalNumChunks, + thisChunkNum, + makeComparableRange (data)); +} + +//============================================================================== +bool PropertyGetDataResponse::operator== (const PropertyGetDataResponse& x) const { return tie() == x.tie(); } +bool PropertyGetDataResponse::operator!= (const PropertyGetDataResponse& x) const { return ! operator== (x); } + +//============================================================================== +bool PropertyGetData::operator== (const PropertyGetData& x) const { return tie() == x.tie(); } +bool PropertyGetData::operator!= (const PropertyGetData& x) const { return ! operator== (x); } + +//============================================================================== +bool PropertySetDataResponse::operator== (const PropertySetDataResponse& x) const { return tie() == x.tie(); } +bool PropertySetDataResponse::operator!= (const PropertySetDataResponse& x) const { return ! operator== (x); } + +//============================================================================== +bool PropertySetData::operator== (const PropertySetData& x) const { return tie() == x.tie(); } +bool PropertySetData::operator!= (const PropertySetData& x) const { return ! operator== (x); } + +//============================================================================== +bool PropertySubscribeResponse::operator== (const PropertySubscribeResponse& x) const { return tie() == x.tie(); } +bool PropertySubscribeResponse::operator!= (const PropertySubscribeResponse& x) const { return ! operator== (x); } + +//============================================================================== +bool PropertySubscribe::operator== (const PropertySubscribe& x) const { return tie() == x.tie(); } +bool PropertySubscribe::operator!= (const PropertySubscribe& x) const { return ! operator== (x); } + +//============================================================================== +bool PropertyNotify::operator== (const PropertyNotify& x) const { return tie() == x.tie(); } +bool PropertyNotify::operator!= (const PropertyNotify& x) const { return ! operator== (x); } + +//============================================================================== +auto ProcessInquiryResponse::tie() const +{ + return std::tuple (supportedFeatures); +} + +bool ProcessInquiryResponse::operator== (const ProcessInquiryResponse& x) const { return tie() == x.tie(); } +bool ProcessInquiryResponse::operator!= (const ProcessInquiryResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto ProcessInquiry::tie() const +{ + return std::tuple<>(); +} + +bool ProcessInquiry::operator== (const ProcessInquiry& x) const { return tie() == x.tie(); } +bool ProcessInquiry::operator!= (const ProcessInquiry& x) const { return ! operator== (x); } + +//============================================================================== +auto ProcessMidiMessageReportResponse::tie() const +{ + return std::tuple (messageDataControl, requestedMessages, channelControllerMessages, noteDataMessages); +} + +bool ProcessMidiMessageReportResponse::operator== (const ProcessMidiMessageReportResponse& x) const { return tie() == x.tie(); } +bool ProcessMidiMessageReportResponse::operator!= (const ProcessMidiMessageReportResponse& x) const { return ! operator== (x); } + +//============================================================================== +auto ProcessMidiMessageReport::tie() const +{ + return std::tuple (messageDataControl, requestedMessages, channelControllerMessages, noteDataMessages); +} + +bool ProcessMidiMessageReport::operator== (const ProcessMidiMessageReport& x) const { return tie() == x.tie(); } +bool ProcessMidiMessageReport::operator!= (const ProcessMidiMessageReport& x) const { return ! operator== (x); } + +//============================================================================== +auto ProcessEndMidiMessageReport::tie() const +{ + return std::tuple<>(); +} + +bool ProcessEndMidiMessageReport::operator== (const ProcessEndMidiMessageReport& x) const { return tie() == x.tie(); } +bool ProcessEndMidiMessageReport::operator!= (const ProcessEndMidiMessageReport& x) const { return ! operator== (x); } + +//============================================================================== +bool Parsed::operator== (const Parsed& other) const +{ + const auto tie = [] (const auto& x) { return std::tie (x.header, x.body); }; + return tie (*this) == tie (other); +} + +bool Parsed::operator!= (const Parsed& other) const { return ! operator== (other); } + +} // namespace juce::midi_ci::Message diff --git a/modules/juce_midi_ci/ci/juce_CIMessages.h b/modules/juce_midi_ci/ci/juce_CIMessages.h index 0be935c83d..910441e8dd 100644 --- a/modules/juce_midi_ci/ci/juce_CIMessages.h +++ b/modules/juce_midi_ci/ci/juce_CIMessages.h @@ -131,13 +131,10 @@ namespace Message MUID source = MUID::makeUnchecked (0); MUID destination = MUID::makeUnchecked (0); - auto tie() const - { - return std::tuple (deviceID, category, version, source, destination); - } + auto tie() const; - bool operator== (const Header& x) const { return tie() == x.tie(); } - bool operator!= (const Header& x) const { return ! operator== (x); } + bool operator== (const Header& x) const; + bool operator!= (const Header& x) const; }; /** @@ -164,13 +161,10 @@ namespace Message std::byte outputPathID{}; /**< Only valid if the message header specifies version 0x02 or greater. */ std::byte functionBlock{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (device, capabilities, maximumSysexSize, outputPathID, functionBlock); - } + auto tie() const; - bool operator== (const DiscoveryResponse& x) const { return tie() == x.tie(); } - bool operator!= (const DiscoveryResponse& x) const { return ! operator== (x); } + bool operator== (const DiscoveryResponse& x) const; + bool operator!= (const DiscoveryResponse& x) const; }; /** See the MIDI-CI specification. @@ -184,13 +178,10 @@ namespace Message uint32_t maximumSysexSize{}; std::byte outputPathID{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (device, capabilities, maximumSysexSize, outputPathID); - } + auto tie() const; - bool operator== (const Discovery& x) const { return tie() == x.tie(); } - bool operator!= (const Discovery& x) const { return ! operator== (x); } + bool operator== (const Discovery& x) const; + bool operator!= (const Discovery& x) const; }; /** See the MIDI-CI specification. @@ -202,13 +193,10 @@ namespace Message std::byte status; Span data; - auto tie() const - { - return std::tuple (status, makeComparableRange (data)); - } + auto tie() const; - bool operator== (const EndpointInquiryResponse& x) const { return tie() == x.tie(); } - bool operator!= (const EndpointInquiryResponse& x) const { return ! operator== (x); } + bool operator== (const EndpointInquiryResponse& x) const; + bool operator!= (const EndpointInquiryResponse& x) const; }; /** See the MIDI-CI specification. @@ -219,13 +207,10 @@ namespace Message { std::byte status; - auto tie() const - { - return std::tuple (status); - } + auto tie() const; - bool operator== (const EndpointInquiry& x) const { return tie() == x.tie(); } - bool operator!= (const EndpointInquiry& x) const { return ! operator== (x); } + bool operator== (const EndpointInquiry& x) const; + bool operator!= (const EndpointInquiry& x) const; }; /** See the MIDI-CI specification. @@ -236,13 +221,10 @@ namespace Message { MUID target = MUID::makeUnchecked (0); - auto tie() const - { - return std::tuple (target); - } + auto tie() const; - bool operator== (const InvalidateMUID& x) const { return tie() == x.tie(); } - bool operator!= (const InvalidateMUID& x) const { return ! operator== (x); } + bool operator== (const InvalidateMUID& x) const; + bool operator!= (const InvalidateMUID& x) const; }; /** See the MIDI-CI specification. @@ -263,13 +245,10 @@ namespace Message return Encodings::stringFrom7BitText (messageText); } - auto tie() const - { - return std::tuple (originalCategory, statusCode, statusData, details, makeComparableRange (messageText)); - } + auto tie() const; - bool operator== (const ACK& x) const { return tie() == x.tie(); } - bool operator!= (const ACK& x) const { return ! operator== (x); } + bool operator== (const ACK& x) const; + bool operator!= (const ACK& x) const; }; /** See the MIDI-CI specification. @@ -290,13 +269,10 @@ namespace Message return Encodings::stringFrom7BitText (messageText); } - auto tie() const - { - return std::tuple (originalCategory, statusCode, statusData, details, makeComparableRange (messageText)); - } + auto tie() const; - bool operator== (const NAK& x) const { return tie() == x.tie(); } - bool operator!= (const NAK& x) const { return ! operator== (x); } + bool operator== (const NAK& x) const; + bool operator!= (const NAK& x) const; }; /** See the MIDI-CI specification. @@ -308,13 +284,10 @@ namespace Message Span enabledProfiles; Span disabledProfiles; - auto tie() const - { - return std::tuple (makeComparableRange (enabledProfiles), makeComparableRange (disabledProfiles)); - } + auto tie() const; - bool operator== (const ProfileInquiryResponse& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileInquiryResponse& x) const { return ! operator== (x); } + bool operator== (const ProfileInquiryResponse& x) const; + bool operator!= (const ProfileInquiryResponse& x) const; }; /** See the MIDI-CI specification. @@ -323,13 +296,10 @@ namespace Message */ struct ProfileInquiry { - auto tie() const - { - return std::tuple<>(); - } + auto tie() const; - bool operator== (const ProfileInquiry& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileInquiry& x) const { return ! operator== (x); } + bool operator== (const ProfileInquiry& x) const; + bool operator!= (const ProfileInquiry& x) const; }; /** See the MIDI-CI specification. @@ -340,13 +310,10 @@ namespace Message { Profile profile{}; - auto tie() const - { - return std::tuple (profile); - } + auto tie() const; - bool operator== (const ProfileAdded& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileAdded& x) const { return ! operator== (x); } + bool operator== (const ProfileAdded& x) const; + bool operator!= (const ProfileAdded& x) const; }; /** See the MIDI-CI specification. @@ -357,13 +324,10 @@ namespace Message { Profile profile{}; - auto tie() const - { - return std::tuple (profile); - } + auto tie() const; - bool operator== (const ProfileRemoved& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileRemoved& x) const { return ! operator== (x); } + bool operator== (const ProfileRemoved& x) const; + bool operator!= (const ProfileRemoved& x) const; }; /** See the MIDI-CI specification. @@ -376,13 +340,10 @@ namespace Message std::byte target{}; Span data; - auto tie() const - { - return std::tuple (profile, target, makeComparableRange (data)); - } + auto tie() const; - bool operator== (const ProfileDetailsResponse& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileDetailsResponse& x) const { return ! operator== (x); } + bool operator== (const ProfileDetailsResponse& x) const; + bool operator!= (const ProfileDetailsResponse& x) const; }; /** See the MIDI-CI specification. @@ -394,13 +355,10 @@ namespace Message Profile profile{}; std::byte target{}; - auto tie() const - { - return std::tuple (profile, target); - } + auto tie() const; - bool operator== (const ProfileDetails& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileDetails& x) const { return ! operator== (x); } + bool operator== (const ProfileDetails& x) const; + bool operator!= (const ProfileDetails& x) const; }; /** See the MIDI-CI specification. @@ -412,13 +370,10 @@ namespace Message Profile profile{}; uint16_t numChannels{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (profile, numChannels); - } + auto tie() const; - bool operator== (const ProfileOn& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileOn& x) const { return ! operator== (x); } + bool operator== (const ProfileOn& x) const; + bool operator!= (const ProfileOn& x) const; }; /** See the MIDI-CI specification. @@ -429,13 +384,10 @@ namespace Message { Profile profile{}; - auto tie() const - { - return std::tuple (profile); - } + auto tie() const; - bool operator== (const ProfileOff& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileOff& x) const { return ! operator== (x); } + bool operator== (const ProfileOff& x) const; + bool operator!= (const ProfileOff& x) const; }; /** See the MIDI-CI specification. @@ -447,13 +399,10 @@ namespace Message Profile profile{}; uint16_t numChannels{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (profile, numChannels); - } + auto tie() const; - bool operator== (const ProfileEnabledReport& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileEnabledReport& x) const { return ! operator== (x); } + bool operator== (const ProfileEnabledReport& x) const; + bool operator!= (const ProfileEnabledReport& x) const; }; /** See the MIDI-CI specification. @@ -465,13 +414,10 @@ namespace Message Profile profile{}; uint16_t numChannels{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (profile, numChannels); - } + auto tie() const; - bool operator== (const ProfileDisabledReport& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileDisabledReport& x) const { return ! operator== (x); } + bool operator== (const ProfileDisabledReport& x) const; + bool operator!= (const ProfileDisabledReport& x) const; }; /** See the MIDI-CI specification. @@ -483,13 +429,10 @@ namespace Message Profile profile{}; Span data; - auto tie() const - { - return std::tuple (profile, makeComparableRange (data)); - } + auto tie() const; - bool operator== (const ProfileSpecificData& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileSpecificData& x) const { return ! operator== (x); } + bool operator== (const ProfileSpecificData& x) const; + bool operator!= (const ProfileSpecificData& x) const; }; /** See the MIDI-CI specification. @@ -502,13 +445,10 @@ namespace Message std::byte majorVersion{}; /**< Only valid if the message header specifies version 0x02 or greater. */ std::byte minorVersion{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (numSimultaneousRequestsSupported, majorVersion, minorVersion); - } + auto tie() const; - bool operator== (const PropertyExchangeCapabilitiesResponse& x) const { return tie() == x.tie(); } - bool operator!= (const PropertyExchangeCapabilitiesResponse& x) const { return ! operator== (x); } + bool operator== (const PropertyExchangeCapabilitiesResponse& x) const; + bool operator!= (const PropertyExchangeCapabilitiesResponse& x) const; }; /** See the MIDI-CI specification. @@ -521,13 +461,10 @@ namespace Message std::byte majorVersion{}; /**< Only valid if the message header specifies version 0x02 or greater. */ std::byte minorVersion{}; /**< Only valid if the message header specifies version 0x02 or greater. */ - auto tie() const - { - return std::tuple (numSimultaneousRequestsSupported, majorVersion, minorVersion); - } + auto tie() const; - bool operator== (const PropertyExchangeCapabilities& x) const { return tie() == x.tie(); } - bool operator!= (const PropertyExchangeCapabilities& x) const { return ! operator== (x); } + bool operator== (const PropertyExchangeCapabilities& x) const; + bool operator!= (const PropertyExchangeCapabilities& x) const; }; /** A property-exchange message that has no payload, and must therefore @@ -540,10 +477,7 @@ namespace Message std::byte requestID{}; Span header; - auto tie() const - { - return std::tuple (requestID, makeComparableRange (header)); - } + auto tie() const; }; /** A property-exchange message that may form part of a multi-chunk @@ -559,14 +493,7 @@ namespace Message uint16_t thisChunkNum{}; Span data; - auto tie() const - { - return std::tuple (requestID, - makeComparableRange (header), - totalNumChunks, - thisChunkNum, - makeComparableRange (data)); - } + auto tie() const; }; /** See the MIDI-CI specification. @@ -575,8 +502,8 @@ namespace Message */ struct PropertyGetDataResponse : public DynamicSizePropertyExchange { - bool operator== (const PropertyGetDataResponse& x) const { return tie() == x.tie(); } - bool operator!= (const PropertyGetDataResponse& x) const { return ! operator== (x); } + bool operator== (const PropertyGetDataResponse& x) const; + bool operator!= (const PropertyGetDataResponse& x) const; }; /** See the MIDI-CI specification. @@ -585,8 +512,8 @@ namespace Message */ struct PropertyGetData : public StaticSizePropertyExchange { - bool operator== (const PropertyGetData& x) const { return tie() == x.tie(); } - bool operator!= (const PropertyGetData& x) const { return ! operator== (x); } + bool operator== (const PropertyGetData& x) const; + bool operator!= (const PropertyGetData& x) const; }; /** See the MIDI-CI specification. @@ -595,8 +522,8 @@ namespace Message */ struct PropertySetDataResponse : public StaticSizePropertyExchange { - bool operator== (const PropertySetDataResponse& x) const { return tie() == x.tie(); } - bool operator!= (const PropertySetDataResponse& x) const { return ! operator== (x); } + bool operator== (const PropertySetDataResponse& x) const; + bool operator!= (const PropertySetDataResponse& x) const; }; /** See the MIDI-CI specification. @@ -605,8 +532,8 @@ namespace Message */ struct PropertySetData : public DynamicSizePropertyExchange { - bool operator== (const PropertySetData& x) const { return tie() == x.tie(); } - bool operator!= (const PropertySetData& x) const { return ! operator== (x); } + bool operator== (const PropertySetData& x) const; + bool operator!= (const PropertySetData& x) const; }; /** See the MIDI-CI specification. @@ -615,8 +542,8 @@ namespace Message */ struct PropertySubscribeResponse : public DynamicSizePropertyExchange { - bool operator== (const PropertySubscribeResponse& x) const { return tie() == x.tie(); } - bool operator!= (const PropertySubscribeResponse& x) const { return ! operator== (x); } + bool operator== (const PropertySubscribeResponse& x) const; + bool operator!= (const PropertySubscribeResponse& x) const; }; /** See the MIDI-CI specification. @@ -625,8 +552,8 @@ namespace Message */ struct PropertySubscribe : public DynamicSizePropertyExchange { - bool operator== (const PropertySubscribe& x) const { return tie() == x.tie(); } - bool operator!= (const PropertySubscribe& x) const { return ! operator== (x); } + bool operator== (const PropertySubscribe& x) const; + bool operator!= (const PropertySubscribe& x) const; }; /** See the MIDI-CI specification. @@ -635,8 +562,8 @@ namespace Message */ struct PropertyNotify : public DynamicSizePropertyExchange { - bool operator== (const PropertyNotify& x) const { return tie() == x.tie(); } - bool operator!= (const PropertyNotify& x) const { return ! operator== (x); } + bool operator== (const PropertyNotify& x) const; + bool operator!= (const PropertyNotify& x) const; }; /** See the MIDI-CI specification. @@ -647,13 +574,10 @@ namespace Message { std::byte supportedFeatures{}; - auto tie() const - { - return std::tuple (supportedFeatures); - } + auto tie() const; - bool operator== (const ProcessInquiryResponse& x) const { return tie() == x.tie(); } - bool operator!= (const ProcessInquiryResponse& x) const { return ! operator== (x); } + bool operator== (const ProcessInquiryResponse& x) const; + bool operator!= (const ProcessInquiryResponse& x) const; }; /** See the MIDI-CI specification. @@ -662,13 +586,10 @@ namespace Message */ struct ProcessInquiry { - auto tie() const - { - return std::tuple<>(); - } + auto tie() const; - bool operator== (const ProcessInquiry& x) const { return tie() == x.tie(); } - bool operator!= (const ProcessInquiry& x) const { return ! operator== (x); } + bool operator== (const ProcessInquiry& x) const; + bool operator!= (const ProcessInquiry& x) const; }; /** See the MIDI-CI specification. @@ -682,13 +603,10 @@ namespace Message std::byte channelControllerMessages{}; std::byte noteDataMessages{}; - auto tie() const - { - return std::tuple (messageDataControl, requestedMessages, channelControllerMessages, noteDataMessages); - } + auto tie() const; - bool operator== (const ProcessMidiMessageReportResponse& x) const { return tie() == x.tie(); } - bool operator!= (const ProcessMidiMessageReportResponse& x) const { return ! operator== (x); } + bool operator== (const ProcessMidiMessageReportResponse& x) const; + bool operator!= (const ProcessMidiMessageReportResponse& x) const; }; /** See the MIDI-CI specification. @@ -702,13 +620,10 @@ namespace Message std::byte channelControllerMessages{}; std::byte noteDataMessages{}; - auto tie() const - { - return std::tuple (messageDataControl, requestedMessages, channelControllerMessages, noteDataMessages); - } + auto tie() const; - bool operator== (const ProcessMidiMessageReport& x) const { return tie() == x.tie(); } - bool operator!= (const ProcessMidiMessageReport& x) const { return ! operator== (x); } + bool operator== (const ProcessMidiMessageReport& x) const; + bool operator!= (const ProcessMidiMessageReport& x) const; }; /** See the MIDI-CI specification. @@ -717,13 +632,10 @@ namespace Message */ struct ProcessEndMidiMessageReport { - auto tie() const - { - return std::tuple<>(); - } + auto tie() const; - bool operator== (const ProcessEndMidiMessageReport& x) const { return tie() == x.tie(); } - bool operator!= (const ProcessEndMidiMessageReport& x) const { return ! operator== (x); } + bool operator== (const ProcessEndMidiMessageReport& x) const; + bool operator!= (const ProcessEndMidiMessageReport& x) const; }; /** @@ -773,13 +685,8 @@ namespace Message Header header; Body body; - bool operator== (const Parsed& other) const - { - const auto tie = [] (const auto& x) { return std::tie (x.header, x.body); }; - return tie (*this) == tie (other); - } - - bool operator!= (const Parsed& other) const { return ! operator== (other); } + bool operator== (const Parsed& other) const; + bool operator!= (const Parsed& other) const; }; } diff --git a/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.cpp b/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.cpp new file mode 100644 index 0000000000..b7ae8b6a36 --- /dev/null +++ b/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.cpp @@ -0,0 +1,48 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::midi_ci +{ + +auto ProfileAtAddress::tie() const { return std::tie (profile, address); } + +bool ProfileAtAddress::operator== (const ProfileAtAddress& x) const { return tie() == x.tie(); } +bool ProfileAtAddress::operator!= (const ProfileAtAddress& x) const { return tie() != x.tie(); } + +bool ProfileAtAddress::operator< (const ProfileAtAddress& x) const { return tie() < x.tie(); } +bool ProfileAtAddress::operator<= (const ProfileAtAddress& x) const { return tie() <= x.tie(); } +bool ProfileAtAddress::operator> (const ProfileAtAddress& x) const { return tie() > x.tie(); } +bool ProfileAtAddress::operator>= (const ProfileAtAddress& x) const { return tie() >= x.tie(); } + +} // namespace juce::midi_ci diff --git a/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.h b/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.h index dca21d5974..d5cc8ed748 100644 --- a/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.h +++ b/modules/juce_midi_ci/ci/juce_CIProfileAtAddress.h @@ -42,19 +42,19 @@ namespace juce::midi_ci */ class ProfileAtAddress { - auto tie() const { return std::tie (profile, address); } + auto tie() const; public: Profile profile; ///< The id of a MIDI-CI profile ChannelAddress address; ///< A group and channel - bool operator== (const ProfileAtAddress& x) const { return tie() == x.tie(); } - bool operator!= (const ProfileAtAddress& x) const { return tie() != x.tie(); } + bool operator== (const ProfileAtAddress& x) const; + bool operator!= (const ProfileAtAddress& x) const; - bool operator< (const ProfileAtAddress& x) const { return tie() < x.tie(); } - bool operator<= (const ProfileAtAddress& x) const { return tie() <= x.tie(); } - bool operator> (const ProfileAtAddress& x) const { return tie() > x.tie(); } - bool operator>= (const ProfileAtAddress& x) const { return tie() >= x.tie(); } + bool operator< (const ProfileAtAddress& x) const; + bool operator<= (const ProfileAtAddress& x) const; + bool operator> (const ProfileAtAddress& x) const; + bool operator>= (const ProfileAtAddress& x) const; }; } // namespace juce::midi_ci diff --git a/modules/juce_midi_ci/ci/juce_CIPropertyHost.cpp b/modules/juce_midi_ci/ci/juce_CIPropertyHost.cpp index b6fa152fa2..9c9784f2ea 100644 --- a/modules/juce_midi_ci/ci/juce_CIPropertyHost.cpp +++ b/modules/juce_midi_ci/ci/juce_CIPropertyHost.cpp @@ -420,4 +420,26 @@ PropertyHost::SubscriptionToken PropertyHost::findUnusedSubscribeId (const std:: return ! used.empty() ? SubscriptionToken { std::prev (used.end())->first.uid + 1 } : SubscriptionToken { 0 }; } +auto RequestKey::tie() const +{ + return std::tuple (m, v); +} + +bool RequestKey::operator== (const RequestKey& other) const +{ + return tie() == other.tie(); +} + +/** Inequality operator. */ +bool RequestKey::operator!= (const RequestKey& other) const +{ + return tie() != other.tie(); +} + +/** Less-than operator. */ +bool RequestKey::operator< (const RequestKey& other) const +{ + return tie() < other.tie(); +} + } // namespace juce::midi_ci diff --git a/modules/juce_midi_ci/ci/juce_CIPropertyHost.h b/modules/juce_midi_ci/ci/juce_CIPropertyHost.h index 6ce98b268f..438e73e67f 100644 --- a/modules/juce_midi_ci/ci/juce_CIPropertyHost.h +++ b/modules/juce_midi_ci/ci/juce_CIPropertyHost.h @@ -42,7 +42,7 @@ namespace juce::midi_ci */ class RequestKey { - auto tie() const { return std::tuple (m, v); } + auto tie() const; public: /** Constructor. */ @@ -55,13 +55,13 @@ public: Token64 getKey() const { return v; } /** Equality operator. */ - bool operator== (const RequestKey& other) const { return tie() == other.tie(); } + bool operator== (const RequestKey& other) const; /** Inequality operator. */ - bool operator!= (const RequestKey& other) const { return tie() != other.tie(); } + bool operator!= (const RequestKey& other) const; /** Less-than operator. */ - bool operator< (const RequestKey& other) const { return tie() < other.tie(); } + bool operator< (const RequestKey& other) const; private: MUID m; diff --git a/modules/juce_midi_ci/ci/juce_CISubscription.cpp b/modules/juce_midi_ci/ci/juce_CISubscription.cpp new file mode 100644 index 0000000000..635f76716d --- /dev/null +++ b/modules/juce_midi_ci/ci/juce_CISubscription.cpp @@ -0,0 +1,44 @@ +/* + ============================================================================== + + This file is part of the JUCE framework. + Copyright (c) Raw Material Software Limited + + JUCE is an open source framework subject to commercial or open source + licensing. + + By downloading, installing, or using the JUCE framework, or combining the + JUCE framework with any other source code, object code, content or any other + copyrightable work, you agree to the terms of the JUCE End User Licence + Agreement, and all incorporated terms including the JUCE Privacy Policy and + the JUCE Website Terms of Service, as applicable, which will bind you. If you + do not agree to the terms of these agreements, we will not license the JUCE + framework to you, and you must discontinue the installation or download + process and cease use of the JUCE framework. + + JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/ + JUCE Privacy Policy: https://juce.com/juce-privacy-policy + JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/ + + Or: + + You may also use this code under the terms of the AGPLv3: + https://www.gnu.org/licenses/agpl-3.0.en.html + + THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL + WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. + + ============================================================================== +*/ + +namespace juce::midi_ci +{ + +bool Subscription::operator== (const Subscription& other) const +{ + const auto tie = [] (const auto& x) { return std::tie (x.subscribeId, x.resource); }; + return tie (*this) == tie (other); +} + +} // namespace juce::midi_ci diff --git a/modules/juce_midi_ci/ci/juce_CISubscription.h b/modules/juce_midi_ci/ci/juce_CISubscription.h index f27d59dc78..91de40e182 100644 --- a/modules/juce_midi_ci/ci/juce_CISubscription.h +++ b/modules/juce_midi_ci/ci/juce_CISubscription.h @@ -51,12 +51,7 @@ struct Subscription bool operator> (const Subscription& other) const { return subscribeId > other.subscribeId; } bool operator>= (const Subscription& other) const { return subscribeId >= other.subscribeId; } - bool operator== (const Subscription& other) const - { - const auto tie = [] (const auto& x) { return std::tie (x.subscribeId, x.resource); }; - return tie (*this) == tie (other); - } - + bool operator== (const Subscription& other) const; bool operator!= (const Subscription& other) const { return ! operator== (other); } }; diff --git a/modules/juce_midi_ci/ci/juce_CISubscriptionManager.cpp b/modules/juce_midi_ci/ci/juce_CISubscriptionManager.cpp index fdfca68614..72e1600d76 100644 --- a/modules/juce_midi_ci/ci/juce_CISubscriptionManager.cpp +++ b/modules/juce_midi_ci/ci/juce_CISubscriptionManager.cpp @@ -502,6 +502,26 @@ bool SubscriptionManager::sendPendingMessages() return pimpl->sendPendingMessages(); } +auto SubscriptionKey::tie() const +{ + return std::tie (m, v); +} + +bool SubscriptionKey::operator== (const SubscriptionKey& other) const +{ + return tie() == other.tie(); +} + +bool SubscriptionKey::operator!= (const SubscriptionKey& other) const +{ + return tie() != other.tie(); +} + +bool SubscriptionKey::operator< (const SubscriptionKey& other) const +{ + return tie() < other.tie(); +} + //============================================================================== //============================================================================== #if JUCE_UNIT_TESTS diff --git a/modules/juce_midi_ci/ci/juce_CISubscriptionManager.h b/modules/juce_midi_ci/ci/juce_CISubscriptionManager.h index 77e1b433b0..3c8c3f354f 100644 --- a/modules/juce_midi_ci/ci/juce_CISubscriptionManager.h +++ b/modules/juce_midi_ci/ci/juce_CISubscriptionManager.h @@ -42,7 +42,7 @@ namespace juce::midi_ci */ class SubscriptionKey { - auto tie() const { return std::tuple (m, v); } + auto tie() const; public: /** Constructor */ @@ -58,13 +58,13 @@ public: Token64 getKey() const { return v; } /** Equality operator. */ - bool operator== (const SubscriptionKey& other) const { return tie() == other.tie(); } + bool operator== (const SubscriptionKey& other) const; /** Inequality operator. */ - bool operator!= (const SubscriptionKey& other) const { return tie() != other.tie(); } + bool operator!= (const SubscriptionKey& other) const; /** Less-than operator. */ - bool operator< (const SubscriptionKey& other) const { return tie() < other.tie(); } + bool operator< (const SubscriptionKey& other) const; private: MUID m = MUID::getBroadcast(); diff --git a/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.cpp b/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.cpp index f120edf6eb..5fa31ce9c3 100644 --- a/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.cpp +++ b/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.cpp @@ -159,4 +159,19 @@ void PropertyDataMessageChunker::populateStorage() const storage->resize (storage->size() + numBytesRead - room); } +auto PropertyDataMessageChunker::tie() const +{ + return std::tie (storage, body, source, dest, chunkSize, messageKind, requestId); +} + +bool PropertyDataMessageChunker::operator== (const PropertyDataMessageChunker& other) const noexcept +{ + return tie() == other.tie(); +} + +bool PropertyDataMessageChunker::operator!= (const PropertyDataMessageChunker& other) const noexcept +{ + return tie() != other.tie(); +} + } // namespace juce::midi_ci::detail diff --git a/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.h b/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.h index 692757585c..fcc0aad2c1 100644 --- a/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.h +++ b/modules/juce_midi_ci/detail/juce_CIPropertyDataMessageChunker.h @@ -43,7 +43,7 @@ namespace juce::midi_ci::detail */ class PropertyDataMessageChunker { - auto tie() const { return std::tie (storage, body, source, dest, chunkSize, messageKind, requestId); } + auto tie() const; public: /* Constructs a chunker instance. @@ -79,8 +79,8 @@ public: PropertyDataMessageChunker& operator++() noexcept; /* Checks whether the state of this chunker matches the state of another chunker, enabling foreach usage. */ - bool operator== (const PropertyDataMessageChunker& other) const noexcept { return tie() == other.tie(); } - bool operator!= (const PropertyDataMessageChunker& other) const noexcept { return tie() != other.tie(); } + bool operator== (const PropertyDataMessageChunker& other) const noexcept; + bool operator!= (const PropertyDataMessageChunker& other) const noexcept; /* Returns a span over the valid bytes in the output buffer. */ Span operator*() const noexcept; diff --git a/modules/juce_midi_ci/juce_midi_ci.cpp b/modules/juce_midi_ci/juce_midi_ci.cpp index c735fd362e..7dc4ba4491 100644 --- a/modules/juce_midi_ci/juce_midi_ci.cpp +++ b/modules/juce_midi_ci/juce_midi_ci.cpp @@ -53,13 +53,17 @@ #include #include +#include #include #include +#include #include +#include #include #include #include #include #include #include +#include #include