1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

SharedResourcePointer: Get a SharedResourcePointer instance without creating one

- Also refactored internals to use weak/shared pointers
This commit is contained in:
Anthony Nicholls 2023-11-27 14:06:20 +00:00
parent 6e8210d6b1
commit 418d7b9c38
40 changed files with 256 additions and 43 deletions

View file

@ -1067,6 +1067,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"
@ -3155,6 +3156,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"

View file

@ -1358,6 +1358,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1975,6 +1975,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1358,6 +1358,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1975,6 +1975,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1358,6 +1358,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1975,6 +1975,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -943,6 +943,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"
@ -2731,6 +2732,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"

View file

@ -1198,6 +1198,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1684,6 +1684,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -976,6 +976,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"
@ -2917,6 +2918,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"

View file

@ -1206,6 +1206,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1759,6 +1759,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1206,6 +1206,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1759,6 +1759,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1206,6 +1206,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1759,6 +1759,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -250,6 +250,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -190,6 +190,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -947,6 +947,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"
@ -2815,6 +2816,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/memory/juce_Reservoir.h" "../../../../../modules/juce_core/memory/juce_Reservoir.h"
"../../../../../modules/juce_core/memory/juce_ScopedPointer.h" "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h"
"../../../../../modules/juce_core/memory/juce_SharedResourcePointer_test.cpp"
"../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_Singleton.h"
"../../../../../modules/juce_core/memory/juce_WeakReference.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h"
"../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp"

View file

@ -1198,6 +1198,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1714,6 +1714,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -389,6 +389,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -670,6 +670,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -389,6 +389,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -670,6 +670,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -389,6 +389,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -670,6 +670,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1214,6 +1214,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1780,6 +1780,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1214,6 +1214,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1780,6 +1780,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1214,6 +1214,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1780,6 +1780,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -1197,6 +1197,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<ExcludedFromBuild>true</ExcludedFromBuild> <ExcludedFromBuild>true</ExcludedFromBuild>
</ClCompile> </ClCompile>

View file

@ -1711,6 +1711,9 @@
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_MemoryBlock.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter> <Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\memory\juce_SharedResourcePointer_test.cpp">
<Filter>JUCE Modules\juce_core\memory</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp"> <ClCompile Include="..\..\..\..\modules\juce_core\misc\juce_ConsoleApplication.cpp">
<Filter>JUCE Modules\juce_core\misc</Filter> <Filter>JUCE Modules\juce_core\misc</Filter>
</ClCompile> </ClCompile>

View file

@ -285,6 +285,7 @@
#include "misc/juce_EnumHelpers_test.cpp" #include "misc/juce_EnumHelpers_test.cpp"
#include "containers/juce_FixedSizeFunction_test.cpp" #include "containers/juce_FixedSizeFunction_test.cpp"
#include "javascript/juce_JSONSerialisation_test.cpp" #include "javascript/juce_JSONSerialisation_test.cpp"
#include "memory/juce_SharedResourcePointer_test.cpp"
#if JUCE_MAC || JUCE_IOS #if JUCE_MAC || JUCE_IOS
#include "native/juce_ObjCHelpers_mac_test.mm" #include "native/juce_ObjCHelpers_mac_test.mm"
#endif #endif

View file

@ -87,74 +87,94 @@ public:
using. Otherwise, if this is the first SharedResourcePointer to be created, using. Otherwise, if this is the first SharedResourcePointer to be created,
then a shared object will be created automatically. then a shared object will be created automatically.
*/ */
SharedResourcePointer() SharedResourcePointer() = default;
{
initialise();
}
SharedResourcePointer (const SharedResourcePointer&) /** Copy constructor. */
{ SharedResourcePointer (const SharedResourcePointer&) = default;
initialise();
} /** Move constructor. */
SharedResourcePointer (SharedResourcePointer&&) noexcept = default;
/** Destructor. /** Destructor.
If no other SharedResourcePointer objects exist, this will also delete If no other SharedResourcePointer objects exist, this will also delete
the shared object to which it refers. the shared object to which it refers.
*/ */
~SharedResourcePointer() ~SharedResourcePointer() = default;
{
auto& holder = getSharedObjectHolder();
const SpinLock::ScopedLockType sl (holder.lock);
if (--(holder.refCount) == 0) /** Returns a pointer to the shared object. */
holder.sharedInstance = nullptr; operator SharedObjectType*() const noexcept { return sharedObject.get(); }
}
/** Returns the shared object. */ /** Returns a reference to the shared object. */
operator SharedObjectType*() const noexcept { return sharedObject; }
/** Returns the shared object. */
SharedObjectType& get() const noexcept { return *sharedObject; } SharedObjectType& get() const noexcept { return *sharedObject; }
/** Returns the object that this pointer references. */ /** Returns a reference to the shared object. */
SharedObjectType& getObject() const noexcept { return *sharedObject; } SharedObjectType& getObject() const noexcept { return *sharedObject; }
/** Returns the shared object pointer. */ /** Returns a pointer to the shared object. */
SharedObjectType* operator->() const noexcept { return sharedObject; } SharedObjectType* operator->() const noexcept { return sharedObject.get(); }
/** Returns the number of SharedResourcePointers that are currently holding the shared object. */ /** Returns a reference to the shared object. */
int getReferenceCount() const noexcept { return getSharedObjectHolder().refCount; } SharedObjectType& operator*() const noexcept { return *sharedObject; }
#ifndef DOXYGEN
[[deprecated ("If you are relying on this function please inform the JUCE team as we are planing on removing this in a subsequent release")]]
int getReferenceCount() const noexcept { return (int) sharedObject.use_count(); }
#endif
/** Returns the SharedResourcePointer if one already exists, or a null optional otherwise. */
static std::optional<SharedResourcePointer> getSharedObjectWithoutCreating()
{
if (auto sharedPtr = weak().lock())
return SharedResourcePointer { std::move (sharedPtr) };
return {};
}
private: private:
struct SharedObjectHolder explicit SharedResourcePointer (std::shared_ptr<SharedObjectType>&& other) noexcept
: sharedObject (std::move (other))
{ {
SpinLock lock; jassert (sharedObject != nullptr);
std::unique_ptr<SharedObjectType> sharedInstance; }
int refCount;
class Weak
{
public:
std::shared_ptr<SharedObjectType> lock()
{
const SpinLock::ScopedLockType lock { mutex };
return ptr.lock();
}
std::shared_ptr<SharedObjectType> lockOrCreate()
{
const SpinLock::ScopedLockType lock { mutex };
if (auto locked = ptr.lock())
return locked;
auto shared = std::make_shared<SharedObjectType>();
ptr = shared;
return shared;
}
private:
SpinLock mutex;
std::weak_ptr<SharedObjectType> ptr;
}; };
static SharedObjectHolder& getSharedObjectHolder() noexcept inline static Weak& weak()
{ {
static void* holder [(sizeof (SharedObjectHolder) + sizeof (void*) - 1) / sizeof (void*)] = { nullptr }; static Weak weak;
return *reinterpret_cast<SharedObjectHolder*> (holder); return weak;
} }
SharedObjectType* sharedObject; std::shared_ptr<SharedObjectType> sharedObject = weak().lockOrCreate();
void initialise()
{
auto& holder = getSharedObjectHolder();
const SpinLock::ScopedLockType sl (holder.lock);
if (++(holder.refCount) == 1)
holder.sharedInstance.reset (new SharedObjectType());
sharedObject = holder.sharedInstance.get();
}
// There's no need to assign to a SharedResourcePointer because every // There's no need to assign to a SharedResourcePointer because every
// instance of the class is exactly the same! // instance of the class is exactly the same!
SharedResourcePointer& operator= (const SharedResourcePointer&) = delete; SharedResourcePointer& operator= (const SharedResourcePointer&) = delete;
SharedResourcePointer& operator= (SharedResourcePointer&&) noexcept = delete;
JUCE_LEAK_DETECTOR (SharedResourcePointer) JUCE_LEAK_DETECTOR (SharedResourcePointer)
}; };

View file

@ -0,0 +1,87 @@
/*
==============================================================================
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 SharedResourcePointerTest final : public UnitTest
{
public:
SharedResourcePointerTest()
: UnitTest ("SharedResourcePointer", UnitTestCategories::memory) {}
void runTest() final
{
beginTest ("Only one instance is created");
{
static int count = 0;
struct CountIncrementer { CountIncrementer() { ++count; } };
expect (count == 0);
const SharedResourcePointer<CountIncrementer> instance1;
expect (count == 1);
const SharedResourcePointer<CountIncrementer> instance2;
expect (count == 1);
expect (&instance1.get() == &instance2.get());
}
beginTest ("The shared object is destroyed when the reference count reaches 0");
{
static int count = 0;
struct ReferenceCounter
{
ReferenceCounter() { ++count; }
~ReferenceCounter() { --count; }
};
expect (count == 0);
{
const SharedResourcePointer<ReferenceCounter> instance1;
const SharedResourcePointer<ReferenceCounter> instance2;
expect (count == 1);
}
expect (count == 0);
}
beginTest ("getInstanceWithoutCreating()");
{
struct Object{};
expect (SharedResourcePointer<Object>::getSharedObjectWithoutCreating() == std::nullopt);
{
const SharedResourcePointer<Object> instance;
expect (&SharedResourcePointer<Object>::getSharedObjectWithoutCreating()->get() == &instance.get());
}
expect (SharedResourcePointer<Object>::getSharedObjectWithoutCreating() == std::nullopt);
}
}
};
static SharedResourcePointerTest sharedResourcePointerTest;
} // namespace juce

View file

@ -37,6 +37,7 @@ namespace juce::UnitTestCategories
static const String gui { "GUI" }; static const String gui { "GUI" };
static const String json { "JSON" }; static const String json { "JSON" };
static const String maths { "Maths" }; static const String maths { "Maths" };
static const String memory { "Memory" };
static const String midi { "MIDI" }; static const String midi { "MIDI" };
static const String native { "Native" }; static const String native { "Native" };
static const String networking { "Networking" }; static const String networking { "Networking" };