From cb44d72b78d1fc297ee199542a296809e12410e3 Mon Sep 17 00:00:00 2001 From: reuk Date: Thu, 21 Sep 2023 12:10:50 +0100 Subject: [PATCH] EnumerateIterator: Add utility for concisely enumerating ranges --- .../Builds/Android/app/CMakeLists.txt | 4 + .../DemoRunner.xcodeproj/project.pbxproj | 6 +- .../VisualStudio2017/DemoRunner_App.vcxproj | 4 + .../DemoRunner_App.vcxproj.filters | 6 + .../VisualStudio2019/DemoRunner_App.vcxproj | 4 + .../DemoRunner_App.vcxproj.filters | 6 + .../VisualStudio2022/DemoRunner_App.vcxproj | 4 + .../DemoRunner_App.vcxproj.filters | 6 + .../iOS/DemoRunner.xcodeproj/project.pbxproj | 6 +- .../Builds/Android/app/CMakeLists.txt | 4 + .../AudioPerformanceTest_App.vcxproj | 4 + .../AudioPerformanceTest_App.vcxproj.filters | 6 + .../Builds/Android/app/CMakeLists.txt | 4 + .../AudioPluginHost.xcodeproj/project.pbxproj | 6 +- .../AudioPluginHost_App.vcxproj | 4 + .../AudioPluginHost_App.vcxproj.filters | 6 + .../AudioPluginHost_App.vcxproj | 4 + .../AudioPluginHost_App.vcxproj.filters | 6 + .../AudioPluginHost_App.vcxproj | 4 + .../AudioPluginHost_App.vcxproj.filters | 6 + .../AudioPluginHost.xcodeproj/project.pbxproj | 6 +- .../BinaryBuilder_ConsoleApp.vcxproj | 4 + .../BinaryBuilder_ConsoleApp.vcxproj.filters | 6 + .../Builds/Android/app/CMakeLists.txt | 4 + .../NetworkGraphicsDemo_App.vcxproj | 4 + .../NetworkGraphicsDemo_App.vcxproj.filters | 6 + .../VisualStudio2017/Projucer_App.vcxproj | 4 + .../Projucer_App.vcxproj.filters | 6 + .../VisualStudio2019/Projucer_App.vcxproj | 4 + .../Projucer_App.vcxproj.filters | 6 + .../VisualStudio2022/Projucer_App.vcxproj | 4 + .../Projucer_App.vcxproj.filters | 6 + .../UnitTestRunner.xcodeproj/project.pbxproj | 6 +- .../UnitTestRunner_ConsoleApp.vcxproj | 4 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 6 + .../UnitTestRunner_ConsoleApp.vcxproj | 4 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 6 + .../UnitTestRunner_ConsoleApp.vcxproj | 4 + .../UnitTestRunner_ConsoleApp.vcxproj.filters | 6 + .../WindowsDLL_StaticLibrary.vcxproj | 4 + .../WindowsDLL_StaticLibrary.vcxproj.filters | 6 + modules/juce_core/containers/juce_Enumerate.h | 426 ++++++++++++++++++ .../containers/juce_Enumerate_test.cpp | 126 ++++++ modules/juce_core/juce_core.cpp | 1 + modules/juce_core/juce_core.h | 1 + 45 files changed, 750 insertions(+), 10 deletions(-) create mode 100644 modules/juce_core/containers/juce_Enumerate.h create mode 100644 modules/juce_core/containers/juce_Enumerate_test.cpp diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index f4f2655e43..b37dce3358 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -963,6 +963,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" @@ -3033,6 +3035,8 @@ set_source_files_properties( "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" diff --git a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj index 9331410556..e9a00767b8 100644 --- a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj @@ -576,6 +576,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -585,7 +586,7 @@ INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; @@ -668,6 +669,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -676,7 +678,7 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj index 2874be55e8..740980086b 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj @@ -1244,6 +1244,9 @@ true + + true + true @@ -3305,6 +3308,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters index ef2ec21dfc..05e8c69bc7 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters @@ -1861,6 +1861,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -5115,6 +5118,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj index f57ec587d4..5bca301937 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj @@ -1244,6 +1244,9 @@ true + + true + true @@ -3305,6 +3308,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters index f0f327f78d..bbe9e4d3bd 100644 --- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters @@ -1861,6 +1861,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -5115,6 +5118,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj index 32dc7ee4c3..9a9d85f9df 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj @@ -1244,6 +1244,9 @@ true + + true + true @@ -3305,6 +3308,7 @@ + diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters index 028cc2f0b0..751651b92f 100644 --- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters @@ -1861,6 +1861,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -5115,6 +5118,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj index 78aa478b5d..a44ecf6578 100644 --- a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj @@ -584,6 +584,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -592,7 +593,7 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; @@ -676,6 +677,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -683,7 +685,7 @@ INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index 07dbef3a67..fadc56f02e 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -839,6 +839,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" @@ -2609,6 +2611,8 @@ set_source_files_properties( "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj index 99e3a04935..2011ffbc94 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj @@ -1084,6 +1084,9 @@ true + + true + true @@ -2861,6 +2864,7 @@ + diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters index 262013fa02..4de359f466 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters @@ -1570,6 +1570,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4395,6 +4398,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index a9bf036114..d9744fc2ea 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -872,6 +872,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" @@ -2795,6 +2797,8 @@ set_source_files_properties( "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" diff --git a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj index daae6d73e3..3dbeca4341 100644 --- a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj @@ -508,6 +508,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -517,7 +518,7 @@ INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; @@ -647,6 +648,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -655,7 +657,7 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj index 8070697ac7..78bbd48ce2 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj @@ -1092,6 +1092,9 @@ true + + true + true @@ -3041,6 +3044,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters index 498a8000c7..92576361e7 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters @@ -1645,6 +1645,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4671,6 +4674,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj index d41d5f14a1..d440c2415f 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj @@ -1092,6 +1092,9 @@ true + + true + true @@ -3041,6 +3044,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters index 32e76ecec8..b643e21287 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters @@ -1645,6 +1645,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4671,6 +4674,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj index e56426d765..2de62435dd 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj @@ -1092,6 +1092,9 @@ true + + true + true @@ -3041,6 +3044,7 @@ + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters index 2db94899e5..15ccebaa3d 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters @@ -1645,6 +1645,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4671,6 +4674,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj index 3ec41051a5..0e3f4561ed 100644 --- a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj @@ -523,6 +523,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -531,7 +532,7 @@ INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; @@ -664,6 +665,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -671,7 +673,7 @@ INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj index 6b79c75a32..48edf199d4 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj +++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj @@ -151,6 +151,9 @@ true + + true + true @@ -501,6 +504,7 @@ + diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters index fdf6eac31a..66ba5850dd 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters +++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters @@ -91,6 +91,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -477,6 +480,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index c519748689..a41825469d 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -843,6 +843,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" @@ -2693,6 +2695,8 @@ set_source_files_properties( "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" + "../../../../../modules/juce_core/containers/juce_Enumerate.h" + "../../../../../modules/juce_core/containers/juce_Enumerate_test.cpp" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction.h" "../../../../../modules/juce_core/containers/juce_FixedSizeFunction_test.cpp" "../../../../../modules/juce_core/containers/juce_HashMap.h" diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj index c2bfbe78ec..1b4a9df8ee 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj @@ -1084,6 +1084,9 @@ true + + true + true @@ -2952,6 +2955,7 @@ + diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters index 4ccc63dce9..710abcb7fe 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters @@ -1600,6 +1600,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4536,6 +4539,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj index fea6188584..5a56d77b8b 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj @@ -287,6 +287,9 @@ true + + true + true @@ -1794,6 +1797,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters index 48e1615653..513c8b25ea 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters @@ -568,6 +568,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2550,6 +2553,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj index b5af8da93d..1f99f50842 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj @@ -287,6 +287,9 @@ true + + true + true @@ -1794,6 +1797,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters index 704ee39dd6..36caca4c5a 100644 --- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters @@ -568,6 +568,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2550,6 +2553,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj index 079b40fddb..d6ba24ebe2 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj @@ -287,6 +287,9 @@ true + + true + true @@ -1794,6 +1797,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters index c3a0d636e0..00226c4b21 100644 --- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters @@ -568,6 +568,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2550,6 +2553,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj index b85ce177af..b4dd3cd71e 100644 --- a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj +++ b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj @@ -449,6 +449,7 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", @@ -456,7 +457,7 @@ INSTALL_PATH = "/usr/bin"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; @@ -580,13 +581,14 @@ "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK", "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "$(HOME)/Developer/VSTSDK", "$(SRCROOT)/../../JuceLibraryCode", "$(SRCROOT)/../../../../modules", "$(inherited)", ); INSTALL_PATH = "/usr/bin"; MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; + MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(HOME)/Developer/VSTSDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new"; OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak"; diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj index 353aa1984b..8820b91f52 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj @@ -1100,6 +1100,9 @@ true + + true + true @@ -3097,6 +3100,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters index d9cfeb2ae9..72f760eabd 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1657,6 +1657,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4734,6 +4737,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj index ab94849e62..3ad17aeea1 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj @@ -1100,6 +1100,9 @@ true + + true + true @@ -3097,6 +3100,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters index 2214570d64..86023113e1 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1657,6 +1657,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4734,6 +4737,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj index ba14e72284..69c25cb54f 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj @@ -1100,6 +1100,9 @@ true + + true + true @@ -3097,6 +3100,7 @@ + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters index ddb61d6a52..5db23b33be 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -1657,6 +1657,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4734,6 +4737,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj index 463a957040..689590a844 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj @@ -1083,6 +1083,9 @@ true + + true + true @@ -2928,6 +2931,7 @@ + diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters index dded486675..4f71f79c7c 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters @@ -1597,6 +1597,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -4503,6 +4506,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers diff --git a/modules/juce_core/containers/juce_Enumerate.h b/modules/juce_core/containers/juce_Enumerate.h new file mode 100644 index 0000000000..1108e881f0 --- /dev/null +++ b/modules/juce_core/containers/juce_Enumerate.h @@ -0,0 +1,426 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2022 - Raw Material Software Limited + + JUCE is an open source library subject to commercial or open-source + licensing. + + The code included in this file is provided under the terms of the ISC license + http://www.isc.org/downloads/software-support-policy/isc-license. Permission + To use, copy, modify, and/or distribute this software for any purpose with or + without fee is hereby granted provided that the above copyright notice and + this permission notice appear in all copies. + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +namespace detail +{ + +template +constexpr auto canPreDecrement = false; + +template +constexpr auto canPreDecrement())>> = true; + +template +constexpr auto canAddAssign = false; + +template +constexpr auto canAddAssign() += std::declval())>> = true; + +template +constexpr auto canSubAssign = false; + +template +constexpr auto canSubAssign() -= std::declval())>> = true; + +template +constexpr auto canAdd = false; + +template +constexpr auto canAdd() + std::declval())>> = true; + +template +constexpr auto canSub = false; + +template +constexpr auto canSub() - std::declval())>> = true; + +template +constexpr auto canLessThan = false; + +template +constexpr auto canLessThan() < std::declval())>> = true; + +template +constexpr auto canLessThanEqual = false; + +template +constexpr auto canLessThanEqual() <= std::declval())>> = true; + +template +constexpr auto canGreaterThan = false; + +template +constexpr auto canGreaterThan() > std::declval())>> = true; + +template +constexpr auto canGreaterThanEqual = false; + +template +constexpr auto canGreaterThanEqual() >= std::declval())>> = true; + +namespace withAdlSize +{ + using std::size; + + template + using AdlSize = decltype (size (std::declval())); + + template + using AdlSignedSize = std::common_type_t>>; +} + +} // namespace detail + +/** + Returned when dereferencing an EnumerateIterator. + + Allows querying the index associated with an element, along with a reference to the element + itself. + + You should never need to construct an instance of this type yourself. Instead, use the + enumerate() function to construct a range that can be enumerated. + + @see enumerate() + @tags{Core} +*/ +template +struct Enumerated +{ + Index index; + Value value; +}; + +/** + An iterator that wraps some other iterator, keeping track of the relative position of that + iterator based on calls to arithmetic operators such as + operator++(), operator--(), operator+(), and operator-(). + + You should never need to construct an instance of this type yourself. Instead, use the + enumerate() function to construct a range that can be enumerated. + + @see enumerate() + @tags{Core} +*/ +template +class EnumerateIterator +{ +public: + /** Default constructor. */ + constexpr EnumerateIterator() = default; + + /** Wraps the provided iterator, and sets the internal count to 0. */ + constexpr explicit EnumerateIterator (Iter iter) + : EnumerateIterator (std::move (iter), Index{}) {} + + /** Wraps the provided iterator, and sets the internal count to the provided value. */ + constexpr EnumerateIterator (Iter iter, Index ind) + : iterator (std::move (iter)), index (ind) {} + + /** Two EnumerateIterators are considered equal if the wrapped iterators are equal. */ + template + [[nodiscard]] constexpr bool operator== (const EnumerateIterator& other) const + { + return iterator == other.iterator; + } + + /** @see operator==() */ + template + [[nodiscard]] constexpr bool operator!= (const EnumerateIterator& other) const + { + return ! operator== (other); + } + + /** Dereferencing the iterator produces an Enumerated instance *by value*. This type holds + a copy of the iterator's current index, along with the result of dereferencing the + wrapped iterator (normally a reference type). + */ + [[nodiscard]] constexpr Enumerated())> operator*() const + { + return { index, *iterator }; + } + + /** Increments the iterator and the index. */ + constexpr EnumerateIterator& operator++() + { + ++iterator; + ++index; + return *this; + } + + /** Increments the iterator and the index. */ + constexpr EnumerateIterator operator++ (int) + { + auto copy = *this; + operator++(); + return copy; + } + + /** Decrements the iterator and the index. + Only participates in overload resolution if the iterator can be pre-decremented. + */ + template , int> = 0> + constexpr EnumerateIterator& operator--() + { + --iterator; + --index; + return *this; + } + + /** Decrements the iterator and the index. + Only participates in overload resolution if the iterator can be pre-decremented. + */ + template , int> = 0> + constexpr EnumerateIterator operator-- (int) + { + auto copy = *this; + operator--(); + return copy; + } + + /** Adds an integral value to both the iterator and the index. + Only participates in overload resolution if the iterator can be add-assigned. + */ + template , int> = 0> + constexpr EnumerateIterator& operator+= (I diff) + { + iterator += diff; + index += static_cast (diff); + return *this; + } + + /** Subtracts an integral value from both the iterator and the index. + Only participates in overload resolution if the iterator can be sub-assigned. + */ + template , int> = 0> + constexpr EnumerateIterator& operator-= (I diff) + { + iterator -= diff; + index -= static_cast (diff); + return *this; + } + + /** Subtracts another enumerate iterator from this one, producing the same result as + subtracting the two wrapped iterators. For random-access iterators, this will normally + return the distance between the two iterators. + Only participates in overload resolution if the wrapped iterators can be subtracted. + */ + template , int> = 0> + [[nodiscard]] constexpr auto operator- (const EnumerateIterator& other) const + { + return iterator - other.iterator; + } + + /** Indexes into this iterator, equivalent to adding an integral value to this iterator and + then dereferencing the result. + Only participates in overload resolution if the wrapped iterator allows addition of + integral values. + */ + template , int> = 0> + [[nodiscard]] constexpr auto operator[] (I diff) const + { + return *(*this + diff); + } + + /** Returns the result of comparing the two wrapped iterators. + Only participates in overload resolution if the wrapped iterators are comparable. + */ + template , int> = 0> + [[nodiscard]] constexpr bool operator< (const EnumerateIterator& other) const + { + return iterator < other.iterator; + } + + /** Returns the result of comparing the two wrapped iterators. + Only participates in overload resolution if the wrapped iterators are comparable. + */ + template , int> = 0> + [[nodiscard]] constexpr bool operator<= (const EnumerateIterator& other) const + { + return iterator <= other.iterator; + } + + /** Returns the result of comparing the two wrapped iterators. + Only participates in overload resolution if the wrapped iterators are comparable. + */ + template , int> = 0> + [[nodiscard]] constexpr bool operator> (const EnumerateIterator& other) const + { + return iterator > other.iterator; + } + + /** Returns the result of comparing the two wrapped iterators. + Only participates in overload resolution if the wrapped iterators are comparable. + */ + template , int> = 0> + [[nodiscard]] constexpr bool operator>= (const EnumerateIterator& other) const + { + return iterator >= other.iterator; + } + + /** Returns the result of adding an integral value to this iterator. + Only participates in overload resolution if addition is supported by the wrapped iterator. + */ + template , int> = 0> + constexpr friend auto operator+ (EnumerateIterator iter, I ind) + { + return iter += ind; + } + + /** Returns the result of adding an integral value to this iterator. + Only participates in overload resolution if addition is supported by the wrapped iterator. + */ + template , int> = 0> + constexpr friend auto operator+ (I ind, EnumerateIterator iter) + { + return iter += ind; + } + + /** Returns the result of subtracting an integral value from this iterator. + Only participates in overload resolution if subtraction is supported by the wrapped iterator. + */ + template , int> = 0> + constexpr friend auto operator- (EnumerateIterator iter, I ind) + { + return iter -= ind; + } + +private: + Iter iterator{}; + Index index = 0; +}; + +//============================================================================== +/** + Wraps a pair of iterators, providing member begin() and end() functions that return + those iterators. + This is useful in situations where you have an iterator pair, but want to use that + pair somewhere that requires an iterable range, such as in a ranged-for loop. + + @see makeRange() +*/ +template +class IteratorPair +{ +public: + /** Constructs a pair from a begin and end iterator. + Instead of calling this directly, use makeRange(). + */ + constexpr IteratorPair (Begin bIn, End eIn) + : b (std::move (bIn)), e (std::move (eIn)) {} + + /** Returns the begin iterator. */ + constexpr auto begin() const { return b; } + + /** Returns the end iterator. */ + constexpr auto end() const { return e; } + +private: + Begin b; + End e; +}; + +/** + Given two iterators "begin" and "end", returns an IteratorPair with a member + begin() and end() function. This pair can be used in contexts that expect an + iterable range, the most significant of which is ranged-for loops. + This automatically deduces the Begin and End types, so it is more concise to use than + directly calling the IteratorPair constructor. +*/ +template +[[nodiscard]] constexpr auto makeRange (Begin begin, End end) +{ + return IteratorPair { std::move (begin), std::move (end) }; +} + +//============================================================================== +/** + Given a range and an optional starting offset, returns an IteratorPair that + holds EnumerateIterators wrapping the begin() and end() of the range. + + This is useful in situations where you need to iterate some range, but also query + the position of each item in the range. + + A simple usage might look like this: + + @code + std::list elements { 10, 20, 30, 40, 50 }; + + for (const auto pair : enumerate (elements)) + std::cout << pair.index << ' ' << pair.value << ' '; + + // output: 0 10 1 20 2 30 3 40 4 50 + @endcode + + You can also use structured bindings to concisely destructure each Enumerated instance: + + @code + for (const auto [index, value] : enumerate (elements)) + std::cout << index << ' ' << value << ' '; + @endcode + + Note that the Enumerated instance is returned by value. This is because each Enumerated + instance is created on-demand when the iterator is dereferenced. As a result, the following + will result in a dangling reference, and will probably trigger a compiler warning: + + @code + // BAD IDEA: creating a reference to a temporary Enumerated instance + for (auto& [index, value] : enumerate (elements)) + ... + @endcode + + The 'value' member of Enumerated automatically assumes the same type as dereferencing the + wrapped iterator, which is normally a reference to an element of a container. + In the following snippet, the type of '[index, value]' is 'const Enumerated', + the type of 'index' is 'ptrdiff_t', and the type of 'value' is 'int&'. + + @code + std::vector elements { 10, 20, 30, 40, 50 }; + for (const auto [index, value] : enumerate (elements)) + ... + @endcode + + By default, the constness of pair.value will match the constness of the range passed to + enumerate. If you pass a mutable lvalue reference to enumerate, then each value will also + be mutable. If you pass a constant lvalue reference to enumerate, then each value will be + const. If you know that you don't need the iterated elements to be mutable, it's good + practice to wrap the range with std::as_const before passing it to enumerate: + + @code + for (const auto [index, value] : enumerate (std::as_const (elements))) + { + // value is immutable here + } + @endcode +*/ +template > +[[nodiscard]] constexpr auto enumerate (Range&& range, Index startingValue = {}) +{ + // This ensures argument-dependent lookup works properly for user-defined non-member begin/end + using std::begin, std::end; + return makeRange (EnumerateIterator { begin (range), startingValue }, + EnumerateIterator { end (range), startingValue }); +} + +} // namespace juce diff --git a/modules/juce_core/containers/juce_Enumerate_test.cpp b/modules/juce_core/containers/juce_Enumerate_test.cpp new file mode 100644 index 0000000000..e3ed753b62 --- /dev/null +++ b/modules/juce_core/containers/juce_Enumerate_test.cpp @@ -0,0 +1,126 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2022 - Raw Material Software Limited + + JUCE is an open source library subject to commercial or open-source + licensing. + + The code included in this file is provided under the terms of the ISC license + http://www.isc.org/downloads/software-support-policy/isc-license. Permission + To use, copy, modify, and/or distribute this software for any purpose with or + without fee is hereby granted provided that the above copyright notice and + this permission notice appear in all copies. + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +class EnumerateUnitTest : public UnitTest +{ +public: + EnumerateUnitTest() : UnitTest ("Enumerate", UnitTestCategories::containers) {} + + void runTest() override + { + beginTest ("enumeration works for bidirectional iterators"); + { + const std::list elements { 10, 20, 30, 40, 50 }; + std::vector counts; + + for (const auto pair : enumerate (elements)) + counts.push_back ((int) pair.index); + + expect (counts == std::vector { 0, 1, 2, 3, 4 }); + } + + beginTest ("enumeration works for random-access iterators"); + { + const std::vector strings { "a", "bb", "ccc", "dddd", "eeeee" }; + + std::vector counts; + + for (const auto [count, element] : enumerate (strings)) + counts.push_back ((int) ((size_t) count + element.size())); + + expect (counts == std::vector { 1, 3, 5, 7, 9 }); + } + + beginTest ("enumeration works for mutable ranges"); + { + std::vector strings { "", "", "", "", "" }; + + for (const auto [count, element] : enumerate (strings)) + element = std::to_string (count); + + expect (strings == std::vector { "0", "1", "2", "3", "4" }); + } + + beginTest ("iterator can be incremented by more than one"); + { + std::vector ints (6); + + const auto enumerated = enumerate (ints); + + std::vector counts; + + for (auto b = enumerated.begin(), e = enumerated.end(); b != e; b += 2) + counts.push_back ((int) (*b).index); + + expect (counts == std::vector { 0, 2, 4 }); + } + + beginTest ("iterator can be started at a non-zero value"); + { + const std::vector ints (6); + + std::vector counts; + + for (const auto enumerated : enumerate (ints, 5)) + counts.push_back ((int) enumerated.index); + + expect (counts == std::vector { 5, 6, 7, 8, 9, 10 }); + } + + beginTest ("subtracting two EnumerateIterators returns the difference between the base iterators"); + { + const std::vector ints (6); + const auto enumerated = enumerate (ints); + expect ((int) (enumerated.end() - enumerated.begin()) == (int) ints.size()); + } + + beginTest ("EnumerateIterator can be decremented"); + { + const std::vector ints (5); + std::vector counts; + + const auto enumerated = enumerate (std::as_const (ints)); + + for (auto i = enumerated.end(), b = enumerated.begin(); i != b; --i) + counts.push_back ((int) (*(i - 1)).index); + + expect (counts == std::vector { -1, -2, -3, -4, -5 }); + } + + beginTest ("EnumerateIterator can be compared"); + { + const std::vector ints (6); + const auto enumerated = enumerate (ints); + expect (enumerated.begin() < enumerated.end()); + expect (enumerated.begin() <= enumerated.end()); + expect (enumerated.end() > enumerated.begin()); + expect (enumerated.end() >= enumerated.begin()); + } + } +}; + +static EnumerateUnitTest enumerateUnitTest; + +} // namespace juce diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index 8a7fa37100..60878dc9c7 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -280,6 +280,7 @@ #if JUCE_UNIT_TESTS #include "containers/juce_HashMap_test.cpp" #include "containers/juce_Optional_test.cpp" + #include "containers/juce_Enumerate_test.cpp" #include "maths/juce_MathsFunctions_test.cpp" #include "misc/juce_EnumHelpers_test.cpp" #include "containers/juce_FixedSizeFunction_test.cpp" diff --git a/modules/juce_core/juce_core.h b/modules/juce_core/juce_core.h index e3e3589d2d..43bf824a63 100644 --- a/modules/juce_core/juce_core.h +++ b/modules/juce_core/juce_core.h @@ -246,6 +246,7 @@ JUCE_END_IGNORE_WARNINGS_MSVC #include "memory/juce_ScopedPointer.h" #include "memory/juce_OptionalScopedPointer.h" #include "containers/juce_Optional.h" +#include "containers/juce_Enumerate.h" #include "containers/juce_ScopedValueSetter.h" #include "memory/juce_Singleton.h" #include "memory/juce_WeakReference.h"