1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

Smart Pointers: Add a new enum for indicating if a smart point should increment a reference count or not

This commit is contained in:
Anthony Nicholls 2025-09-22 17:34:34 +01:00 committed by Anthony Nicholls
parent 8931d45fe9
commit e68627c9ed
68 changed files with 243 additions and 160 deletions

View file

@ -1087,6 +1087,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"
@ -3796,6 +3797,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"

View file

@ -3936,6 +3936,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -6027,6 +6027,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3936,6 +3936,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -6027,6 +6027,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3936,6 +3936,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -6027,6 +6027,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -946,6 +946,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"
@ -3269,6 +3270,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"

View file

@ -3402,6 +3402,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5145,6 +5145,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3402,6 +3402,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5145,6 +5145,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -979,6 +979,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"
@ -3455,6 +3456,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"

View file

@ -3582,6 +3582,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5421,6 +5421,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3582,6 +3582,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5421,6 +5421,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3582,6 +3582,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5421,6 +5421,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -539,6 +539,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -549,6 +549,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -539,6 +539,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -549,6 +549,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -950,6 +950,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"
@ -3353,6 +3354,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
"../../../../../modules/juce_core/containers/juce_Variant.h"
"../../../../../modules/juce_core/detail/juce_CallbackListenerList.h"
"../../../../../modules/juce_core/detail/juce_IncrementRef.h"
"../../../../../modules/juce_core/detail/juce_LruCache.h"
"../../../../../modules/juce_core/detail/juce_NativeFileHandle.h"
"../../../../../modules/juce_core/files/juce_AndroidDocument.h"

View file

@ -3493,6 +3493,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5286,6 +5286,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3493,6 +3493,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5286,6 +5286,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -2115,6 +2115,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -2775,6 +2775,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -2115,6 +2115,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -2775,6 +2775,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -2115,6 +2115,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -2775,6 +2775,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3694,6 +3694,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5580,6 +5580,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3694,6 +3694,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5580,6 +5580,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3694,6 +3694,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5580,6 +5580,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3469,6 +3469,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5253,6 +5253,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -3469,6 +3469,7 @@
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_SparseSet.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Variant.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_NativeFileHandle.h"/>
<ClInclude Include="..\..\..\..\modules\juce_core\files\juce_AndroidDocument.h"/>

View file

@ -5253,6 +5253,9 @@
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_CallbackListenerList.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_IncrementRef.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_core\detail\juce_LruCache.h">
<Filter>JUCE Modules\juce_core\detail</Filter>
</ClInclude>

View file

@ -606,7 +606,7 @@ private:
if (audioSessionControl == nullptr)
return;
sessionEventCallback = becomeComSmartPtrOwner (new SessionEventCallback (*this));
sessionEventCallback = ComSmartPtr { new SessionEventCallback (*this), IncrementRef::no };
audioSessionControl->RegisterAudioSessionNotification (sessionEventCallback);
}
@ -1897,7 +1897,7 @@ private:
if (! check (enumerator.CoCreateInstance (__uuidof (MMDeviceEnumerator))))
return {};
notifyClient = becomeComSmartPtrOwner (new ChangeNotificationClient (this));
notifyClient = ComSmartPtr (new ChangeNotificationClient (this), IncrementRef::no);
enumerator->RegisterEndpointNotificationCallback (notifyClient);
}

View file

@ -153,7 +153,10 @@ public:
HRESULT hr = wmCreateSyncReader (nullptr, WMT_RIGHT_PLAYBACK, wmSyncReader.resetAndGetPointerAddress());
if (SUCCEEDED (hr))
hr = wmSyncReader->OpenStream (becomeComSmartPtrOwner (new JuceIStream (*input)));
{
hr = wmSyncReader->OpenStream (ComSmartPtr { new JuceIStream (*input),
IncrementRef::no });
}
if (SUCCEEDED (hr))
{

View file

@ -115,6 +115,7 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE
#include "JucePluginDefines.h"
#endif
#include <juce_core/detail/juce_IncrementRef.h>
#include <juce_audio_processors_headless/format_types/juce_VST3Utilities.h>
#include <juce_audio_processors_headless/utilities/juce_VST3Interface.h>
#include <juce_audio_plugin_client/juce_audio_plugin_client.h>

View file

@ -241,7 +241,7 @@ public:
{
if (doUIDsMatch (entry.infoW.cid, cid))
{
if (auto instance = becomeVSTComSmartPtrOwner (createInstance (entry)))
if (VSTComSmartPtr instance { createInstance (entry), IncrementRef::no })
{
if (instance->queryInterface (iidToQuery, obj) == Steinberg::kResultOk)
return Steinberg::kResultOk;

View file

@ -1231,7 +1231,7 @@ public:
void setAudioProcessor (JuceAudioProcessor* audioProc)
{
if (audioProcessor.get() != audioProc)
installAudioProcessor (addVSTComSmartPtrOwner (audioProc));
installAudioProcessor ({ audioProc, IncrementRef::yes });
}
tresult PLUGIN_API connect (IConnectionPoint* other) override
@ -1794,7 +1794,7 @@ private:
{
jassert (hostContext != nullptr);
if (auto message = becomeVSTComSmartPtrOwner (allocateMessage()))
if (VSTComSmartPtr message { allocateMessage(), IncrementRef::no })
{
message->setMessageID (idTag);
message->getAttributes()->setInt (idTag, value);
@ -1912,7 +1912,7 @@ private:
return {};
const auto idToUse = parameter != nullptr ? processor.getVSTParamIDForIndex (parameter->getParameterIndex()) : 0;
const auto menu = becomeVSTComSmartPtrOwner (handler->createContextMenu (view, &idToUse));
VSTComSmartPtr menu { handler->createContextMenu (view, &idToUse), IncrementRef::no };
return std::make_unique<EditorContextMenu> (editor, menu);
}
@ -1932,7 +1932,7 @@ private:
public:
JuceVST3Editor (JuceVST3EditController& ec, JuceAudioProcessor& p)
: EditorView (&ec, nullptr),
owner (addVSTComSmartPtrOwner (&ec)),
owner (&ec, IncrementRef::yes),
pluginInstance (*p.get())
{
createContentWrapperComponentIfNeeded();
@ -2689,7 +2689,7 @@ public:
// and not AudioChannelSet::discreteChannels (2) etc.
jassert (checkBusFormatsAreNotDiscrete());
comPluginInstance = addVSTComSmartPtrOwner (new JuceAudioProcessor (pluginInstance));
comPluginInstance = VSTComSmartPtr (new JuceAudioProcessor (pluginInstance), IncrementRef::yes);
zerostruct (processContext);
@ -2780,7 +2780,8 @@ public:
if (message->getAttributes()->getInt ("JuceVST3EditController", value) == kResultTrue)
{
juceVST3EditController = addVSTComSmartPtrOwner ((JuceVST3EditController*) (pointer_sized_int) value);
juceVST3EditController = VSTComSmartPtr ((JuceVST3EditController*) (pointer_sized_int) value,
IncrementRef::yes);
if (juceVST3EditController != nullptr)
juceVST3EditController->setAudioProcessor (comPluginInstance.get());

View file

@ -76,7 +76,7 @@ private:
ItemAndTarget newItem;
newItem.item = item;
newItem.target = addVSTComSmartPtrOwner (target);
newItem.target = VSTComSmartPtr (target, IncrementRef::yes);
items.add (newItem);
return kResultOk;
@ -180,7 +180,9 @@ private:
// Unfortunately, Steinberg's docs explicitly say this should be modal..
handleResult (topLevelMenu->showMenu (options));
#else
topLevelMenu->showMenuAsync (options, ModalCallbackFunction::create (menuFinished, addVSTComSmartPtrOwner (this)));
topLevelMenu->showMenuAsync (options,
ModalCallbackFunction::create (menuFinished,
VSTComSmartPtr (this, IncrementRef::yes)));
#endif
return kResultOk;
@ -616,13 +618,13 @@ public:
if (getActiveEditor() != nullptr)
return true;
auto view = becomeVSTComSmartPtrOwner (tryCreatingView());
VSTComSmartPtr view { tryCreatingView(), IncrementRef::no };
return view != nullptr;
}
VST3PluginWindow* createEditor() override
{
if (auto view = becomeVSTComSmartPtrOwner (tryCreatingView()))
if (VSTComSmartPtr view { tryCreatingView(), IncrementRef::no })
return new VST3PluginWindow (this, view);
return nullptr;
@ -635,7 +637,7 @@ void VST3PluginFormat::createPluginInstance (const PluginDescription& descriptio
PluginCreationCallback callback)
{
createVst3InstanceImpl<VST3PluginInstance> (*this,
becomeVSTComSmartPtrOwner (new VST3HostContextWithContextMenu),
{ new VST3HostContextWithContextMenu, IncrementRef::no },
description,
callback);
}

View file

@ -82,7 +82,7 @@ void VST3PluginFormatHeadless::findAllTypesForFile (OwnedArray<PluginDescription
if (pluginFactory == nullptr)
continue;
auto host = addVSTComSmartPtrOwner (new VST3HostContextHeadless());
VSTComSmartPtr host { new VST3HostContextHeadless(), IncrementRef::yes };
for (const auto& d : DescriptionLister::findDescriptionsSlow (*host, *pluginFactory, File (file)))
results.add (new PluginDescription (d));
@ -111,7 +111,7 @@ void VST3PluginFormatHeadless::createPluginInstance (const PluginDescription& de
PluginCreationCallback callback)
{
createVst3InstanceImpl<VST3PluginInstanceHeadless> (*this,
becomeVSTComSmartPtrOwner (new VST3HostContextHeadless),
{ new VST3HostContextHeadless(), IncrementRef::no },
description,
callback);
}

View file

@ -1096,7 +1096,7 @@ struct DLLHandle
{
if (factory == nullptr)
if (auto* proc = (GetFactoryProc) getFunction (factoryFnName))
factory = becomeVSTComSmartPtrOwner (proc());
factory = VSTComSmartPtr (proc(), IncrementRef::no);
// The plugin NEEDS to provide a factory to be able to be called a VST3!
// Most likely you are trying to load a 32-bit VST3 from a 64-bit host
@ -1887,7 +1887,9 @@ class ParameterChanges final : public Vst::IParameterChanges
struct Entry
{
explicit Entry (std::unique_ptr<Queue> queue) : ptr (addVSTComSmartPtrOwner (queue.release())) {}
explicit Entry (std::unique_ptr<Queue> queue)
: ptr (queue.release(), IncrementRef::yes)
{}
VSTComSmartPtr<Queue> ptr;
Steinberg::int32 index = notInVector;
@ -2632,7 +2634,7 @@ public:
{
if (trackInfoListener != nullptr)
{
auto l = addVSTComSmartPtrOwner (new TrackPropertiesAttributeList (properties));
VSTComSmartPtr l { new TrackPropertiesAttributeList (properties), IncrementRef::yes };
trackInfoListener->setChannelContextInfos (l.get());
}
}
@ -2886,7 +2888,7 @@ public:
MemoryBlock getStateForPresetFile() const
{
auto memoryStream = becomeVSTComSmartPtrOwner (new MemoryStream());
VSTComSmartPtr memoryStream { new MemoryStream(), IncrementRef::no };
if (memoryStream == nullptr || holder->component == nullptr)
return {};
@ -2905,7 +2907,8 @@ public:
bool setStateFromPresetFile (const MemoryBlock& rawData) const
{
auto rawDataCopy = rawData;
auto memoryStream = becomeVSTComSmartPtrOwner (new MemoryStream (rawDataCopy.getData(), (int) rawDataCopy.getSize()));
VSTComSmartPtr memoryStream { new MemoryStream (rawDataCopy.getData(), (int) rawDataCopy.getSize()),
IncrementRef::no };
if (memoryStream == nullptr || holder->component == nullptr)
return false;
@ -3042,7 +3045,7 @@ private:
if (mem.fromBase64Encoding (state->getAllSubText()))
{
auto stream = becomeVSTComSmartPtrOwner (new MemoryStream());
VSTComSmartPtr stream { new MemoryStream(), IncrementRef::no };
stream->setSize ((TSize) mem.getSize());
mem.copyTo (stream->getData(), 0, mem.getSize());
return stream;
@ -3053,10 +3056,20 @@ private:
}
CachedParamValues cachedParamValues;
VSTComSmartPtr<ParameterChanges<HostToClientParamQueue>> inputParameterChanges = addVSTComSmartPtrOwner (new ParameterChanges<HostToClientParamQueue>);
VSTComSmartPtr<ParameterChanges<ClientToHostParamQueue>> outputParameterChanges = addVSTComSmartPtrOwner (new ParameterChanges<ClientToHostParamQueue>);
VSTComSmartPtr<MidiEventList> midiInputs = addVSTComSmartPtrOwner (new MidiEventList);
VSTComSmartPtr<MidiEventList> midiOutputs = addVSTComSmartPtrOwner (new MidiEventList);
VSTComSmartPtr<ParameterChanges<HostToClientParamQueue>> inputParameterChanges
{
new ParameterChanges<HostToClientParamQueue>,
IncrementRef::yes
};
VSTComSmartPtr<ParameterChanges<ClientToHostParamQueue>> outputParameterChanges
{
new ParameterChanges<ClientToHostParamQueue>,
IncrementRef::yes
};
VSTComSmartPtr<MidiEventList> midiInputs { new MidiEventList, IncrementRef::yes };
VSTComSmartPtr<MidiEventList> midiOutputs { new MidiEventList, IncrementRef::yes };
Vst::ProcessContext timingInfo; //< Only use this in processBlock()!
bool isControllerInitialised = false, isActive = false, lastProcessBlockCallWasBypass = false;
const bool hasMidiInput = getNumSingleDirectionBusesFor (holder->component.get(), MediaKind::event, Direction::input) > 0,

View file

@ -173,8 +173,15 @@ public:
source->release();
}
VSTComSmartPtr (ObjectType* object, IncrementRef incrementRefCount) noexcept
: source (object)
{
if (source != nullptr && incrementRefCount == IncrementRef::yes)
source->addRef();
}
VSTComSmartPtr (const VSTComSmartPtr& other) noexcept
: VSTComSmartPtr (other.get(), true) {}
: VSTComSmartPtr (other.get(), IncrementRef::yes) {}
template <typename Other, std::enable_if_t<! std::is_same_v<Other, ObjectType>, int> = 0>
VSTComSmartPtr (const VSTComSmartPtr<Other>& other) noexcept
@ -219,43 +226,10 @@ public:
return factory->createInstance (uuid, ObjectType::iid, (void**) &source) == Steinberg::kResultOk;
}
/** Increments refcount. */
static auto addOwner (ObjectType* t)
{
return VSTComSmartPtr (t, true);
}
/** Does not initially increment refcount; assumes t has a positive refcount. */
static auto becomeOwner (ObjectType* t)
{
return VSTComSmartPtr (t, false);
}
private:
VSTComSmartPtr (ObjectType* object, bool autoAddRef) noexcept
: source (object)
{
if (source != nullptr && autoAddRef)
source->addRef();
}
ObjectType* source = nullptr;
};
/** Increments refcount. */
template <class ObjectType>
auto addVSTComSmartPtrOwner (ObjectType* t)
{
return VSTComSmartPtr<ObjectType>::addOwner (t);
}
/** Does not initially increment refcount; assumes t has a positive refcount. */
template <class ObjectType>
auto becomeVSTComSmartPtrOwner (ObjectType* t)
{
return VSTComSmartPtr<ObjectType>::becomeOwner (t);
}
// NOLINTEND(clang-analyzer-cplusplus.NewDelete)
JUCE_END_NO_SANITIZE

View file

@ -0,0 +1,45 @@
/*
==============================================================================
This file is part of the JUCE framework.
Copyright (c) Raw Material Software Limited
JUCE is an open source framework subject to commercial or open source
licensing.
By downloading, installing, or using the JUCE framework, or combining the
JUCE framework with any other source code, object code, content or any other
copyrightable work, you agree to the terms of the JUCE End User Licence
Agreement, and all incorporated terms including the JUCE Privacy Policy and
the JUCE Website Terms of Service, as applicable, which will bind you. If you
do not agree to the terms of these agreements, we will not license the JUCE
framework to you, and you must discontinue the installation or download
process and cease use of the JUCE framework.
JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
JUCE Privacy Policy: https://juce.com/juce-privacy-policy
JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
Or:
You may also use this code under the terms of the AGPLv3:
https://www.gnu.org/licenses/agpl-3.0.en.html
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
==============================================================================
*/
namespace juce
{
/** @internal */
enum class IncrementRef
{
no,
yes
};
} // namespace juce

View file

@ -375,6 +375,7 @@ JUCE_END_IGNORE_WARNINGS_MSVC
#include "detail/juce_CallbackListenerList.h"
#include "detail/juce_LruCache.h"
#include "detail/juce_IncrementRef.h"
#if JUCE_CORE_INCLUDE_OBJC_HELPERS && (JUCE_MAC || JUCE_IOS)
#include "native/juce_CFHelpers_mac.h"

View file

@ -106,9 +106,16 @@ public:
ComSmartPtr() noexcept = default;
ComSmartPtr (std::nullptr_t) noexcept {}
ComSmartPtr (ComClass* object, IncrementRef incrementRef) noexcept
: p (object)
{
if (p != nullptr && incrementRef == IncrementRef::yes)
p->AddRef();
}
template <typename U>
ComSmartPtr (const ComSmartPtr<U>& other) : ComSmartPtr (other, true) {}
ComSmartPtr (const ComSmartPtr& other) : ComSmartPtr (other, true) {}
ComSmartPtr (const ComSmartPtr<U>& other) : ComSmartPtr (other, IncrementRef::yes) {}
ComSmartPtr (const ComSmartPtr& other) : ComSmartPtr (other, IncrementRef::yes) {}
~ComSmartPtr() noexcept { release(); }
@ -162,29 +169,10 @@ public:
return destObject;
}
/** Increments refcount. */
static auto addOwner (ComClass* t)
{
return ComSmartPtr (t, true);
}
/** Does not initially increment refcount; assumes t has a positive refcount. */
static auto becomeOwner (ComClass* t)
{
return ComSmartPtr (t, false);
}
private:
template <typename U>
friend class ComSmartPtr;
ComSmartPtr (ComClass* object, bool autoAddRef) noexcept
: p (object)
{
if (p != nullptr && autoAddRef)
p->AddRef();
}
void release()
{
if (auto* q = std::exchange (p, nullptr))
@ -196,20 +184,6 @@ private:
ComClass* p = nullptr;
};
/** Increments refcount. */
template <class ObjectType>
auto addComSmartPtrOwner (ObjectType* t)
{
return ComSmartPtr<ObjectType>::addOwner (t);
}
/** Does not initially increment refcount; assumes t has a positive refcount. */
template <class ObjectType>
auto becomeComSmartPtrOwner (ObjectType* t)
{
return ComSmartPtr<ObjectType>::becomeOwner (t);
}
//==============================================================================
template <class First, class... ComClasses>
class ComBaseClassHelperBase : public First, public ComClasses...

View file

@ -49,7 +49,20 @@ public:
JNI, i.e. for native function callback parameters.
*/
explicit LocalRef (JavaType o) noexcept
: LocalRef (o, false)
: LocalRef (o, IncrementRef::no)
{}
/* We cannot delete local references that were not created by JNI, e.g. references that were
created by the VM and passed into the native function.
For these references we should use createNewLocalRef = true, which will create a new
local reference that this wrapper is allowed to delete.
Doing otherwise will result in an "Attempt to remove non-JNI local reference" warning in the
VM, which could even cause crashes in future VM implementations.
*/
LocalRef (JavaType o, IncrementRef incrementRefCount) noexcept
: obj (incrementRefCount == IncrementRef::yes ? retain (o) : o)
{}
LocalRef (const LocalRef& other) noexcept : obj (retain (other.obj)) {}
@ -91,59 +104,15 @@ public:
return std::exchange (obj, nullptr);
}
/** Creates a new internal local reference. */
static auto addOwner (JavaType o)
{
return LocalRef { o, true };
}
/** Takes ownership of the passed in local reference, and deletes it when the LocalRef goes out
of scope.
*/
static auto becomeOwner (JavaType o)
{
return LocalRef { o, false };
}
private:
static JavaType retain (JavaType obj)
{
return obj == nullptr ? nullptr : (JavaType) getEnv()->NewLocalRef (obj);
}
/* We cannot delete local references that were not created by JNI, e.g. references that were
created by the VM and passed into the native function.
For these references we should use createNewLocalRef = true, which will create a new
local reference that this wrapper is allowed to delete.
Doing otherwise will result in an "Attempt to remove non-JNI local reference" warning in the
VM, which could even cause crashes in future VM implementations.
*/
LocalRef (JavaType o, bool createNewLocalRef) noexcept
: obj (createNewLocalRef ? retain (o) : o)
{}
JavaType obj = nullptr;
};
/* Creates a new local reference that shares ownership with the passed in pointer.
Can be used for wrapping function parameters that were created outside the JNI.
*/
template <class JavaType>
auto addLocalRefOwner (JavaType t)
{
return LocalRef<JavaType>::addOwner (t);
}
/* Wraps a local reference and destroys it when it goes out of scope. */
template <class JavaType>
auto becomeLocalRefOwner (JavaType t)
{
return LocalRef<JavaType>::becomeOwner (t);
}
//==============================================================================
template <typename JavaType>
class GlobalRefImpl

View file

@ -216,8 +216,8 @@ private:
explicit OwningLayer (const D2D1_LAYER_PARAMETERS1& p) : params (p) {}
D2D1_LAYER_PARAMETERS1 params;
ComSmartPtr<ID2D1Geometry> geometry = params.geometricMask != nullptr ? addComSmartPtrOwner (params.geometricMask) : nullptr;
ComSmartPtr<ID2D1Brush> brush = params.opacityBrush != nullptr ? addComSmartPtrOwner (params.opacityBrush) : nullptr;
ComSmartPtr<ID2D1Geometry> geometry { params.geometricMask, IncrementRef::yes };
ComSmartPtr<ID2D1Brush> brush { params.opacityBrush, IncrementRef::yes };
};
struct Layer

View file

@ -150,7 +150,8 @@ public:
if (FAILED (factory->GetSystemFontFallback (fallback.resetAndGetPointerAddress())) || fallback == nullptr)
return {};
auto analysisSource = becomeComSmartPtrOwner (new AnalysisSource (c, language));
ComSmartPtr analysisSource { new AnalysisSource (c, language), IncrementRef::no };
const auto originalName = getLocalisedFamilyName (*dwFont);
const auto mapped = factories->getFonts().mapCharacters (fallback,

View file

@ -1067,7 +1067,8 @@ DirectWriteCustomFontCollectionLoader::~DirectWriteCustomFontCollectionLoader()
Uuid DirectWriteCustomFontCollectionLoader::addRawFontData (Span<const std::byte> blob)
{
const auto loader = becomeComSmartPtrOwner (new MemoryFontFileLoader { { blob.data(), blob.size() } });
ComSmartPtr loader { new MemoryFontFileLoader { { blob.data(), blob.size() } },
IncrementRef::no };
factory.RegisterFontFileLoader (loader);
@ -1148,7 +1149,9 @@ Direct2DFactories::Direct2DFactories()
}) },
collectionLoader { std::invoke ([&]() -> ComSmartPtr<DirectWriteCustomFontCollectionLoader>
{
auto result = becomeComSmartPtrOwner (new DirectWriteCustomFontCollectionLoader { *directWriteFactory });
ComSmartPtr result { new DirectWriteCustomFontCollectionLoader { *directWriteFactory },
IncrementRef::no };
directWriteFactory->RegisterFontCollectionLoader (result);
return result;

View file

@ -122,7 +122,7 @@ class AccessibilityHandler::AccessibilityNativeImpl
{
public:
explicit AccessibilityNativeImpl (AccessibilityHandler& owner)
: accessibilityElement (becomeComSmartPtrOwner (new AccessibilityNativeHandle (owner)))
: accessibilityElement (new AccessibilityNativeHandle (owner), IncrementRef::no)
{
++providerCount;
}

View file

@ -40,7 +40,7 @@ class UIAProviderBase
{
public:
explicit UIAProviderBase (AccessibilityNativeHandle* nativeHandleIn)
: nativeHandle (addComSmartPtrOwner (nativeHandleIn))
: nativeHandle (nativeHandleIn, IncrementRef::yes)
{
}

View file

@ -194,7 +194,7 @@ private:
public:
UIATextRangeProvider (UIATextProvider& textProvider, Range<int> range)
: UIAProviderBase (textProvider.getHandler().getNativeImplementation()),
owner (addComSmartPtrOwner (&textProvider)),
owner (&textProvider, IncrementRef::yes),
selectionRange (range)
{
}

View file

@ -357,8 +357,8 @@ public:
static jobjectArray JNICALL contentSharerGetStreamTypes (JNIEnv*, jobject /*contentProvider*/, jobject uri, jstring mimeTypeFilter)
{
return getInstance().getStreamTypes (addLocalRefOwner (uri),
addLocalRefOwner (mimeTypeFilter));
return getInstance().getStreamTypes (LocalRef (uri, IncrementRef::yes),
LocalRef (mimeTypeFilter, IncrementRef::yes));
}
private:

View file

@ -296,7 +296,7 @@ private:
{
HWND hwnd = nullptr;
if (auto window = addComSmartPtrOwner (d).getInterface<IOleWindow>())
if (auto window = ComSmartPtr (d, IncrementRef::yes).getInterface<IOleWindow>())
window->GetWindow (&hwnd);
ScopedLock lock (owner.deletingDialog);

View file

@ -75,7 +75,6 @@ namespace ActiveXHelpers
JUCE_COMRESULT GetBorder (LPRECT) override { return E_NOTIMPL; }
JUCE_COMRESULT RequestBorderSpace (LPCBORDERWIDTHS) override { return E_NOTIMPL; }
JUCE_COMRESULT SetBorderSpace (LPCBORDERWIDTHS) override { return E_NOTIMPL; }
JUCE_COMRESULT SetActiveObject (IOleInPlaceActiveObject* a, LPCOLESTR) override { activeObject = addComSmartPtrOwner (a); return S_OK; }
JUCE_COMRESULT InsertMenus (HMENU, LPOLEMENUGROUPWIDTHS) override { return E_NOTIMPL; }
JUCE_COMRESULT SetMenu (HMENU, HOLEMENU, HWND) override { return S_OK; }
JUCE_COMRESULT RemoveMenus (HMENU) override { return E_NOTIMPL; }
@ -83,6 +82,12 @@ namespace ActiveXHelpers
JUCE_COMRESULT EnableModeless (BOOL) override { return S_OK; }
JUCE_COMRESULT TranslateAccelerator (LPMSG, WORD) override { return E_NOTIMPL; }
JUCE_COMRESULT SetActiveObject (IOleInPlaceActiveObject* a, LPCOLESTR) override
{
activeObject = ComSmartPtr (a, IncrementRef::yes);
return S_OK;
}
HRESULT OfferKeyTranslation (LPMSG lpmsg)
{
if (activeObject != nullptr)

View file

@ -671,7 +671,7 @@ public:
Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler> (
[&result] (HRESULT, ICoreWebView2Environment* env) -> HRESULT
{
result.environment = addComSmartPtrOwner (env);
result.environment = ComSmartPtr (env, IncrementRef::yes);
return S_OK;
}).Get());
@ -857,8 +857,10 @@ private:
{
method = "POST";
auto content = becomeComSmartPtrOwner (SHCreateMemStream ((BYTE*) urlRequest.postData.getData(),
(UINT) urlRequest.postData.getSize()));
auto content = ComSmartPtr (SHCreateMemStream ((BYTE*) urlRequest.postData.getData(),
(UINT) urlRequest.postData.getSize()),
IncrementRef::no);
request->put_Content (content);
}
@ -884,8 +886,9 @@ private:
{
if (auto responseData = owner.impl->handleResourceRequest (resourceRequestUri))
{
auto stream = becomeComSmartPtrOwner (SHCreateMemStream ((BYTE*) responseData->data.data(),
(UINT) responseData->data.size()));
ComSmartPtr stream { SHCreateMemStream ((BYTE*) responseData->data.data(),
(UINT) responseData->data.size()),
IncrementRef::no };
StringArray headers { "Content-Type: " + responseData->mimeType };
@ -1063,7 +1066,7 @@ private:
if (controller != nullptr)
{
weakThis->webViewController = addComSmartPtrOwner (controller);
weakThis->webViewController = ComSmartPtr (controller, IncrementRef::yes);
controller->get_CoreWebView2 (weakThis->webView.resetAndGetPointerAddress());
auto allUserScripts = weakThis->userScripts;

View file

@ -134,7 +134,7 @@ struct CameraDevice::Pimpl : public ChangeBroadcaster
sampleGrabber->SetMediaType (&mt);
}
callback = becomeComSmartPtrOwner (new GrabberCallback (*this));
callback = ComSmartPtr (new GrabberCallback (*this), IncrementRef::no);
hr = sampleGrabber->SetCallback (callback, 1);
hr = graphBuilder->AddFilter (sampleGrabberBase, _T ("Sample Grabber"));